mirror of
https://github.com/EnumeratedDev/bpm.git
synced 2026-09-16 02:26:12 +00:00
Show source package contents during package installation
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
ignore_packages: []
|
ignore_packages: []
|
||||||
|
show_source_package_contents: always
|
||||||
cleanup_make_dependencies: true
|
cleanup_make_dependencies: true
|
||||||
databases:
|
databases:
|
||||||
- name: example-database
|
- name: example-database
|
||||||
|
|||||||
@@ -446,6 +446,37 @@ func installPackages() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fetch packages
|
||||||
|
err = operation.FetchPackages()
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error: could not fetch packages for operation: %s\n", err)
|
||||||
|
exitCode = 1
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if bpmlib.MainBPMConfig.ShowSourcePackageContents == "always" || bpmlib.MainBPMConfig.ShowSourcePackageContents == "install-only" {
|
||||||
|
// Show source package contents
|
||||||
|
sourcePackagesShown, err := operation.ShowSourcePackageContent()
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error: could not show source package content: %s\n", err)
|
||||||
|
exitCode = 1
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Confirmation Prompt
|
||||||
|
if sourcePackagesShown > 0 && !yesAll {
|
||||||
|
reader := bufio.NewReader(os.Stdin)
|
||||||
|
fmt.Printf("Are you sure you wish to continue? [y\\N] ")
|
||||||
|
|
||||||
|
text, _ := reader.ReadString('\n')
|
||||||
|
if strings.TrimSpace(strings.ToLower(text)) != "y" && strings.TrimSpace(strings.ToLower(text)) != "yes" {
|
||||||
|
fmt.Println("Cancelling package installation...")
|
||||||
|
exitCode = 1
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Execute operation
|
// Execute operation
|
||||||
err = operation.Execute(verbose, force)
|
err = operation.Execute(verbose, force)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -771,6 +802,37 @@ func updatePackages() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fetch packages
|
||||||
|
err = operation.FetchPackages()
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error: could not fetch packages for operation: %s\n", err)
|
||||||
|
exitCode = 1
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if bpmlib.MainBPMConfig.ShowSourcePackageContents == "always" {
|
||||||
|
// Show source package contents
|
||||||
|
sourcePackagesShown, err := operation.ShowSourcePackageContent()
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error: could not show source package content: %s\n", err)
|
||||||
|
exitCode = 1
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Confirmation Prompt
|
||||||
|
if sourcePackagesShown > 0 && !yesAll {
|
||||||
|
reader := bufio.NewReader(os.Stdin)
|
||||||
|
fmt.Printf("Are you sure you wish to continue? [y\\N] ")
|
||||||
|
|
||||||
|
text, _ := reader.ReadString('\n')
|
||||||
|
if strings.TrimSpace(strings.ToLower(text)) != "y" && strings.TrimSpace(strings.ToLower(text)) != "yes" {
|
||||||
|
fmt.Println("Cancelling package installation...")
|
||||||
|
exitCode = 1
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Execute operation
|
// Execute operation
|
||||||
err = operation.Execute(verbose, force)
|
err = operation.Execute(verbose, force)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -515,3 +515,75 @@ func downloadPackageFiles(pkgInfo *PackageInfo, tempDirectory string) error {
|
|||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func showPackageFiles(archiveFilename string) error {
|
||||||
|
// Read BPM archive
|
||||||
|
bpmpkg, err := ReadPackage(archiveFilename)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ensure package type is 'source'
|
||||||
|
if bpmpkg.PkgInfo.Type != "source" {
|
||||||
|
return fmt.Errorf("cannot compile a non-source package")
|
||||||
|
}
|
||||||
|
|
||||||
|
printTarballContent := func(filename string) error {
|
||||||
|
// Get tarball reader for file
|
||||||
|
reader, err := readTarballFile(archiveFilename, filename)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Read file content
|
||||||
|
data, err := io.ReadAll(reader.tarReader)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Print file name and content
|
||||||
|
fmt.Println("==============================")
|
||||||
|
fmt.Printf("%s: %s\n", bpmpkg.PkgInfo.Name, filename)
|
||||||
|
fmt.Println("==============================")
|
||||||
|
fmt.Printf("%s\n", data)
|
||||||
|
|
||||||
|
// Close reader
|
||||||
|
err = reader.file.Close()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Print pkg.info content
|
||||||
|
err = printTarballContent("pkg.info")
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Print source files contents
|
||||||
|
files, err := listTarballContent(archiveFilename)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
for _, file := range files {
|
||||||
|
if !strings.HasPrefix(file, "source-files/") {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// Print source file content
|
||||||
|
err = printTarballContent(file)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Print source.sh content
|
||||||
|
err = printTarballContent("source.sh")
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|||||||
@@ -7,9 +7,10 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type MainBPMConfigStruct struct {
|
type MainBPMConfigStruct struct {
|
||||||
IgnorePackages []string `yaml:"ignore_packages"`
|
IgnorePackages []string `yaml:"ignore_packages"`
|
||||||
CleanupMakeDependencies bool `yaml:"cleanup_make_dependencies"`
|
ShowSourcePackageContents string `yaml:"show_source_package_contents"`
|
||||||
Databases []configDatabase `yaml:"databases"`
|
CleanupMakeDependencies bool `yaml:"cleanup_make_dependencies"`
|
||||||
|
Databases []configDatabase `yaml:"databases"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type configDatabase struct {
|
type configDatabase struct {
|
||||||
@@ -31,7 +32,8 @@ func ReadConfig() (err error) {
|
|||||||
|
|
||||||
// Set default config options
|
// Set default config options
|
||||||
MainBPMConfig = MainBPMConfigStruct{
|
MainBPMConfig = MainBPMConfigStruct{
|
||||||
CleanupMakeDependencies: true,
|
ShowSourcePackageContents: "always",
|
||||||
|
CleanupMakeDependencies: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read main BPM config
|
// Read main BPM config
|
||||||
|
|||||||
@@ -15,7 +15,9 @@ type BPMOperation struct {
|
|||||||
UnresolvedDepends []string
|
UnresolvedDepends []string
|
||||||
Changes map[string]string
|
Changes map[string]string
|
||||||
RootDir string
|
RootDir string
|
||||||
compiledPackages map[string]string
|
|
||||||
|
compiledPackages map[string]string
|
||||||
|
hasFetchedPackages bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func (operation *BPMOperation) ActionsContainPackage(pkg string) bool {
|
func (operation *BPMOperation) ActionsContainPackage(pkg string) bool {
|
||||||
@@ -395,6 +397,34 @@ func (operation *BPMOperation) ShowOperationSummary() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (operation *BPMOperation) ShowSourcePackageContent() (sourcePackagesShown int, err error) {
|
||||||
|
// Fetch packages
|
||||||
|
if !operation.hasFetchedPackages {
|
||||||
|
err = operation.FetchPackages()
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, action := range operation.Actions {
|
||||||
|
if action.GetActionType() != "install" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if action.(*InstallPackageAction).BpmPackage.PkgInfo.Type != "source" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
err = showPackageFiles(action.(*InstallPackageAction).File)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
sourcePackagesShown++
|
||||||
|
}
|
||||||
|
|
||||||
|
return sourcePackagesShown, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (operation *BPMOperation) RunHooks(verbose bool) error {
|
func (operation *BPMOperation) RunHooks(verbose bool) error {
|
||||||
// Return if hooks directory does not exist
|
// Return if hooks directory does not exist
|
||||||
if stat, err := os.Stat(path.Join(operation.RootDir, "var/lib/bpm/hooks")); err != nil || !stat.IsDir() {
|
if stat, err := os.Stat(path.Join(operation.RootDir, "var/lib/bpm/hooks")); err != nil || !stat.IsDir() {
|
||||||
@@ -426,7 +456,7 @@ func (operation *BPMOperation) RunHooks(verbose bool) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (operation *BPMOperation) Execute(verbose, force bool) (err error) {
|
func (operation *BPMOperation) FetchPackages() (err error) {
|
||||||
// Fetch packages from databases
|
// Fetch packages from databases
|
||||||
if slices.ContainsFunc(operation.Actions, func(action OperationAction) bool {
|
if slices.ContainsFunc(operation.Actions, func(action OperationAction) bool {
|
||||||
return action.GetActionType() == "fetch"
|
return action.GetActionType() == "fetch"
|
||||||
@@ -492,6 +522,19 @@ func (operation *BPMOperation) Execute(verbose, force bool) (err error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
operation.hasFetchedPackages = true
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (operation *BPMOperation) Execute(verbose, force bool) (err error) {
|
||||||
|
// Fetch packages
|
||||||
|
if !operation.hasFetchedPackages {
|
||||||
|
err = operation.FetchPackages()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Determine words to be used for the following message
|
// Determine words to be used for the following message
|
||||||
words := make([]string, 0)
|
words := make([]string, 0)
|
||||||
if slices.ContainsFunc(operation.Actions, func(action OperationAction) bool {
|
if slices.ContainsFunc(operation.Actions, func(action OperationAction) bool {
|
||||||
|
|||||||
Reference in New Issue
Block a user