commands: prune cache on export

After performing an export, prune object files for exported files
from the cache.
This commit is contained in:
Preben Ingvaldsen 2018-06-26 11:18:35 -07:00
parent 000a12225e
commit a1b5770329
2 changed files with 55 additions and 1 deletions

@ -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")

@ -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)"