diff --git a/src/bpmlib/databases.go b/src/bpmlib/databases.go index c27e278..e120082 100644 --- a/src/bpmlib/databases.go +++ b/src/bpmlib/databases.go @@ -28,8 +28,8 @@ type BPMDatabase struct { type BPMDatabaseEntry struct { Info *PackageInfo `yaml:"info"` Filepath string `yaml:"filepath"` - DownloadSize uint64 `yaml:"download_size"` - InstalledSize uint64 `yaml:"installed_size"` + DownloadSize int64 `yaml:"download_size"` + InstalledSize int64 `yaml:"installed_size"` Database *BPMDatabase } @@ -400,7 +400,7 @@ func (entry *BPMDatabaseEntry) CreateReadableInfo(rootDir string, humanReadableS ret = append(ret, "Installation Reason: "+installationReasonString) } if entry.Info.Type == "binary" { - installedSize := int64(entry.InstalledSize) + installedSize := entry.InstalledSize var installedSizeStr string if humanReadableSize { installedSizeStr = bytesToHumanReadable(installedSize) diff --git a/src/bpmlib/installed_packages.go b/src/bpmlib/installed_packages.go index 6c0312a..8305830 100644 --- a/src/bpmlib/installed_packages.go +++ b/src/bpmlib/installed_packages.go @@ -225,7 +225,7 @@ func getPackageFiles(pkg, rootDir string) []*PackageFileEntry { if err != nil { return nil } - size, err := strconv.ParseUint(stringEntry[len(stringEntry)-1], 0, 64) + size, err := strconv.ParseInt(stringEntry[len(stringEntry)-1], 0, 64) if err != nil { return nil } diff --git a/src/bpmlib/operations.go b/src/bpmlib/operations.go index c3f9fdf..ad87cc9 100644 --- a/src/bpmlib/operations.go +++ b/src/bpmlib/operations.go @@ -87,8 +87,8 @@ func (operation *BPMOperation) RemoveAction(pkg, actionType string) { }) } -func (operation *BPMOperation) GetTotalDownloadSize() uint64 { - var ret uint64 = 0 +func (operation *BPMOperation) GetTotalDownloadSize() int64 { + var ret int64 = 0 for _, action := range operation.Actions { if action.GetActionType() == "fetch" { ret += action.(*FetchPackageAction).DatabaseEntry.DownloadSize @@ -97,8 +97,8 @@ func (operation *BPMOperation) GetTotalDownloadSize() uint64 { return ret } -func (operation *BPMOperation) GetTotalInstalledSize() uint64 { - var ret uint64 = 0 +func (operation *BPMOperation) GetTotalInstalledSize() int64 { + var ret int64 = 0 for _, action := range operation.Actions { if action.GetActionType() == "install" { ret += action.(*InstallPackageAction).BpmPackage.GetInstalledSize() @@ -113,14 +113,17 @@ func (operation *BPMOperation) GetFinalActionSize(rootDir string) int64 { var ret int64 = 0 for _, action := range operation.Actions { if action.GetActionType() == "install" { - ret += int64(action.(*InstallPackageAction).BpmPackage.GetInstalledSize()) + ret += action.(*InstallPackageAction).BpmPackage.GetInstalledSize() if IsPackageInstalled(action.(*InstallPackageAction).BpmPackage.PkgInfo.Name, rootDir) { - ret -= int64(GetPackage(action.(*InstallPackageAction).BpmPackage.PkgInfo.Name, rootDir).GetInstalledSize()) + ret -= GetPackage(action.(*InstallPackageAction).BpmPackage.PkgInfo.Name, rootDir).GetInstalledSize() } } else if action.GetActionType() == "fetch" { - ret += int64(action.(*FetchPackageAction).DatabaseEntry.InstalledSize) + ret += action.(*FetchPackageAction).DatabaseEntry.InstalledSize + if IsPackageInstalled(action.(*FetchPackageAction).DatabaseEntry.Info.Name, rootDir) { + ret -= action.(*FetchPackageAction).DatabaseEntry.InstalledSize + } } else if action.GetActionType() == "remove" { - ret -= int64(action.(*RemovePackageAction).BpmPackage.GetInstalledSize()) + ret -= action.(*RemovePackageAction).BpmPackage.GetInstalledSize() } } return ret @@ -426,7 +429,7 @@ func (operation *BPMOperation) ShowOperationSummary() { fmt.Println("Warning: Operating in " + operation.RootDir) } if operation.GetTotalDownloadSize() > 0 { - fmt.Printf("%s will be downloaded to complete this operation\n", unsignedBytesToHumanReadable(operation.GetTotalDownloadSize())) + fmt.Printf("%s will be downloaded to complete this operation\n", bytesToHumanReadable(operation.GetTotalDownloadSize())) } if operation.GetFinalActionSize(operation.RootDir) > 0 { fmt.Printf("A total of %s will be installed after the operation finishes\n", bytesToHumanReadable(operation.GetFinalActionSize(operation.RootDir))) diff --git a/src/bpmlib/packages.go b/src/bpmlib/packages.go index 3e7eadf..c8eef7f 100644 --- a/src/bpmlib/packages.go +++ b/src/bpmlib/packages.go @@ -69,11 +69,11 @@ type PackageFileEntry struct { OctalPerms uint32 UserID int GroupID int - SizeInBytes uint64 + SizeInBytes int64 } -func (pkg *BPMPackage) GetInstalledSize() uint64 { - var totalSize uint64 = 0 +func (pkg *BPMPackage) GetInstalledSize() int64 { + var totalSize int64 = 0 for _, entry := range pkg.PkgFiles { totalSize += entry.SizeInBytes } @@ -232,7 +232,7 @@ func ReadPackage(filename string) (*BPMPackage, error) { if err != nil { return nil, err } - size, err := strconv.ParseUint(stringEntry[len(stringEntry)-1], 0, 64) + size, err := strconv.ParseInt(stringEntry[len(stringEntry)-1], 0, 64) if err != nil { return nil, err } @@ -604,7 +604,7 @@ func (bpmpkg *BPMPackage) CreateReadableInfo(rootDir string, humanReadableSize b ret = append(ret, "Installation Reason: "+installationReasonString) } if bpmpkg.PkgInfo.Type == "binary" { - installedSize := int64(bpmpkg.GetInstalledSize()) + installedSize := bpmpkg.GetInstalledSize() var installedSizeStr string if humanReadableSize { installedSizeStr = bytesToHumanReadable(installedSize) @@ -624,7 +624,7 @@ func extractPackage(bpmpkg *BPMPackage, verbose bool, filename, rootDir string) } // Initialize progress bar - bar := createProgressBar(int64(bpmpkg.GetInstalledSize()), "Installing "+bpmpkg.PkgInfo.Name, verbose) + bar := createProgressBar(bpmpkg.GetInstalledSize(), "Installing "+bpmpkg.PkgInfo.Name, verbose) defer bar.Close() tarballFile, err := readTarballFile(filename, "files.tar.gz") @@ -1039,12 +1039,12 @@ func removePackage(pkg string, verbose bool, rootDir string) error { return err } - bar := createProgressBar(int64(bpmpkg.GetInstalledSize()), "Removing "+bpmpkg.PkgInfo.Name, verbose) + bar := createProgressBar(bpmpkg.GetInstalledSize(), "Removing "+bpmpkg.PkgInfo.Name, verbose) defer bar.Close() // Removing package files for _, entry := range fileEntries { - bar.Add64(int64(entry.SizeInBytes)) + bar.Add64(entry.SizeInBytes) file := path.Join(rootDir, entry.Path) lstat, err := os.Lstat(file) if os.IsNotExist(err) { diff --git a/src/bpmlib/utils.go b/src/bpmlib/utils.go index 9c747b3..7b96095 100644 --- a/src/bpmlib/utils.go +++ b/src/bpmlib/utils.go @@ -119,17 +119,6 @@ func stringSliceRemove(s []string, r string) []string { return s } -func unsignedBytesToHumanReadable(b uint64) string { - bf := float64(b) - for _, unit := range []string{"", "Ki", "Mi", "Gi", "Ti", "Pi", "Ei", "Zi"} { - if math.Abs(bf) < 1024.0 { - return fmt.Sprintf("%3.1f%sB", bf, unit) - } - bf /= 1024.0 - } - return fmt.Sprintf("%.1fYiB", bf) -} - func bytesToHumanReadable(b int64) string { bf := float64(b) for _, unit := range []string{"", "Ki", "Mi", "Gi", "Ti", "Pi", "Ei", "Zi"} {