From a1b5770329a6b6fa30ce23adeadcad31401970bf Mon Sep 17 00:00:00 2001 From: Preben Ingvaldsen Date: Tue, 26 Jun 2018 11:18:35 -0700 Subject: [PATCH] commands: prune cache on export After performing an export, prune object files for exported files from the cache. --- commands/command_migrate_export.go | 22 ++++++++++++++++++- test/test-migrate-export.sh | 34 ++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+), 1 deletion(-) diff --git a/commands/command_migrate_export.go b/commands/command_migrate_export.go index c46e7c6d..3db49445 100644 --- a/commands/command_migrate_export.go +++ b/commands/command_migrate_export.go @@ -36,6 +36,8 @@ func migrateExportCommand(cmd *cobra.Command, args []string) { tracked := trackedFromExportFilter(filter) gitfilter := lfs.NewGitFilter(cfg) + var exported []string + opts := &githistory.RewriteOptions{ Verbose: migrateVerbose, ObjectMapFilePath: objectMapFilePath, @@ -57,7 +59,13 @@ func migrateExportCommand(cmd *cobra.Command, args []string) { return nil, err } - return odb.NewBlobFromFile(downloadPath) + newBlob, err := odb.NewBlobFromFile(downloadPath) + if err != nil { + return nil, err + } + + exported = append(exported, downloadPath) + return newBlob, nil }, TreeCallbackFn: func(path string, t *odb.Tree) (*odb.Tree, error) { @@ -142,6 +150,18 @@ func migrateExportCommand(cmd *cobra.Command, args []string) { ExitWithError(err) } + // Prune the cache + for _, object := range exported { + err := os.Remove(object) + if os.IsNotExist(err) { + continue + } + + if err != nil { + ExitWithError(err) + } + } + // Only perform `git-checkout(1) -f` if the repository is non-bare. if bare, _ := git.IsBare(); !bare { t := l.Waiter("migrate: checkout") diff --git a/test/test-migrate-export.sh b/test/test-migrate-export.sh index 2831d301..b5db9cb4 100755 --- a/test/test-migrate-export.sh +++ b/test/test-migrate-export.sh @@ -26,6 +26,10 @@ begin_test "migrate export (default branch)" [ ! $(assert_pointer "refs/heads/master" "a.txt" "$txt_oid" "120") ] assert_pointer "refs/heads/my-feature" "a.md" "$md_feature_oid" "30" + refute_local_object "$md_oid" "140" + refute_local_object "$txt_oid" "120" + assert_local_object "$md_feature_oid" "30" + master="$(git rev-parse refs/heads/master)" feature="$(git rev-parse refs/heads/my-feature)" @@ -65,6 +69,9 @@ begin_test "migrate export (with remote)" [ ! $(assert_pointer "refs/remotes/origin/master" "a.md" "$md_oid" "50") ] [ ! $(assert_pointer "refs/remotes/origin/master" "a.txt" "$txt_oid" "30") ] + refute_local_object "$md_oid" "50" + refute_local_object "$txt_oid" "30" + master="$(git rev-parse refs/heads/master)" master_attrs="$(git cat-file -p "$master:.gitattributes")" @@ -89,6 +96,9 @@ begin_test "migrate export (include/exclude args)" [ ! $(assert_pointer "refs/heads/master" "a.txt" "$txt_oid" "120") ] assert_pointer "refs/heads/master" "a.md" "$md_oid" "140" + refute_local_object "$txt_oid" "120" + assert_local_object "$md_oid" "140" + master="$(git rev-parse refs/heads/master)" master_attrs="$(git cat-file -p "$master:.gitattributes")" @@ -136,6 +146,10 @@ begin_test "migrate export (given branch)" [ ! $(assert_pointer "refs/heads/master" "a.md" "$md_oid" "140") ] [ ! $(assert_pointer "refs/heads/master" "a.txt" "$txt_oid" "120") ] + refute_local_object "$md_feature_oid" "30" + refute_local_object "$txt_oid" "120" + refute_local_object "$md_oid" "140" + master="$(git rev-parse refs/heads/master)" feature="$(git rev-parse refs/heads/my-feature)" @@ -190,9 +204,15 @@ begin_test "migrate export (exclude remote refs)" [ ! $(assert_pointer "refs/heads/master" "a.md" "$md_oid" "50") ] [ ! $(assert_pointer "refs/heads/master" "a.txt" "$txt_oid" "30") ] + refute_local_object "$md_oid" "50" + refute_local_object "$txt_oid" "30" + assert_pointer "refs/remotes/origin/master" "a.md" "$md_remote_oid" "140" assert_pointer "refs/remotes/origin/master" "a.txt" "$txt_remote_oid" "120" + assert_local_object "$md_remote_oid" "140" + assert_local_object "$txt_remote_oid" "120" + master="$(git rev-parse refs/heads/master)" remote="$(git rev-parse refs/remotes/origin/master)" @@ -238,6 +258,11 @@ begin_test "migrate export (--skip-fetch)" [ ! $(assert_pointer "refs/heads/master" "a.txt" "$txt_master_oid" "30") ] [ ! $(assert_pointer "pseudo-remote" "a.txt" "$txt_remote_oid" "120") ] + refute_local_object "$md_master_oid" "50" + refute_local_object "$md_remote_oid" "140" + refute_local_object "$txt_master_oid" "30" + refute_local_object "$txt_remote_oid" "120" + master="$(git rev-parse refs/heads/master)" remote="$(git rev-parse pseudo-remote)" @@ -284,6 +309,15 @@ begin_test "migrate export (include/exclude ref)" assert_pointer "refs/heads/my-feature" "a.md" "$md_feature_oid" "31" [ ! $(assert_pointer "refs/heads/my-feature" "a.txt" "$txt_feature_oid" "30") ] + assert_local_object "$md_master_oid" "21" + assert_local_object "$txt_master_oid" "20" + + assert_local_object "$md_remote_oid" "11" + assert_local_object "$txt_remote_oid" "10" + + assert_local_object "$md_feature_oid" "31" + refute_local_object "$txt_feature_oid" "30" + master="$(git rev-parse refs/heads/master)" feature="$(git rev-parse refs/heads/my-feature)" remote="$(git rev-parse refs/remotes/origin/master)"