Merge pull request #2558 from git-lfs/migrate-everything
commands: teach '--everything' to 'git lfs migrate'
This commit is contained in:
commit
bec5f340e4
@ -19,6 +19,10 @@ var (
|
||||
// migrateExcludeRefs is a set of Git references to explicitly exclude
|
||||
// in the migration.
|
||||
migrateExcludeRefs []string
|
||||
|
||||
// migrateEverything indicates the presence of the --everything flag,
|
||||
// and instructs 'git lfs migrate' to migrate all local references.
|
||||
migrateEverything bool
|
||||
)
|
||||
|
||||
// migrate takes the given command and arguments, *odb.ObjectDatabase, as well
|
||||
@ -91,7 +95,7 @@ func rewriteOptions(args []string, opts *githistory.RewriteOptions, l *log.Logge
|
||||
func includeExcludeRefs(l *log.Logger, args []string) (include, exclude []string, err error) {
|
||||
hardcore := len(migrateIncludeRefs) > 0 || len(migrateExcludeRefs) > 0
|
||||
|
||||
if len(args) == 0 && !hardcore {
|
||||
if len(args) == 0 && !hardcore && !migrateEverything {
|
||||
// If no branches were given explicitly AND neither
|
||||
// --include-ref or --exclude-ref flags were given, then add the
|
||||
// currently checked out reference.
|
||||
@ -102,6 +106,10 @@ func includeExcludeRefs(l *log.Logger, args []string) (include, exclude []string
|
||||
args = append(args, current.Name)
|
||||
}
|
||||
|
||||
if migrateEverything && len(args) > 0 {
|
||||
return nil, nil, errors.New("fatal: cannot use --everything with explicit reference arguments")
|
||||
}
|
||||
|
||||
for _, name := range args {
|
||||
// Then, loop through each branch given, resolve that reference,
|
||||
// and include it.
|
||||
@ -114,11 +122,24 @@ func includeExcludeRefs(l *log.Logger, args []string) (include, exclude []string
|
||||
}
|
||||
|
||||
if hardcore {
|
||||
if migrateEverything {
|
||||
return nil, nil, errors.New("fatal: cannot use --everything with --include-ref or --exclude-ref")
|
||||
}
|
||||
|
||||
// If either --include-ref=<ref> or --exclude-ref=<ref> were
|
||||
// given, append those to the include and excluded reference
|
||||
// set, respectively.
|
||||
include = append(include, migrateIncludeRefs...)
|
||||
exclude = append(exclude, migrateExcludeRefs...)
|
||||
} else if migrateEverything {
|
||||
localRefs, err := git.LocalRefs()
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
for _, ref := range localRefs {
|
||||
include = append(include, ref.Name)
|
||||
}
|
||||
} else {
|
||||
// Otherwise, if neither --include-ref=<ref> or
|
||||
// --exclude-ref=<ref> were given, include no additional
|
||||
@ -236,6 +257,7 @@ func init() {
|
||||
|
||||
subcommand.Flags().StringSliceVar(&migrateIncludeRefs, "include-ref", nil, "An explicit list of refs to include")
|
||||
subcommand.Flags().StringSliceVar(&migrateExcludeRefs, "exclude-ref", nil, "An explicit list of refs to exclude")
|
||||
subcommand.Flags().BoolVar(&migrateEverything, "everything", false, "Migrate all local references")
|
||||
|
||||
cmd.AddCommand(subcommand)
|
||||
}
|
||||
|
@ -24,6 +24,9 @@ git-lfs-migrate(1) - Migrate history to or from git-lfs
|
||||
* `--exclude-ref`=<refname>:
|
||||
See [INCLUDE AND EXCLUDE (REFS)].
|
||||
|
||||
* `--everything`:
|
||||
See [INCLUDE AND EXCLUDE (REFS)].
|
||||
|
||||
* [branch ...]:
|
||||
Migrate only the set of branches listed. If not given, `git-lfs-migrate(1)`
|
||||
will migrate the currently checked out branch.
|
||||
@ -105,6 +108,9 @@ The following configuration:
|
||||
|
||||
Would, therefore, include commits: F, E, D, C, B, but exclude commit A.
|
||||
|
||||
The presence of flag --everything indicates that all local references should be
|
||||
migrated.
|
||||
|
||||
## SEE ALSO
|
||||
|
||||
Part of the git-lfs(1) suite.
|
||||
|
@ -342,3 +342,61 @@ begin_test "migrate import (prefix include(s))"
|
||||
done
|
||||
)
|
||||
end_test
|
||||
|
||||
begin_test "migrate import (--everything)"
|
||||
(
|
||||
set -e
|
||||
|
||||
setup_multiple_local_branches
|
||||
git checkout master
|
||||
|
||||
master_txt_oid="$(calc_oid "$(git cat-file -p :a.txt)")"
|
||||
master_md_oid="$(calc_oid "$(git cat-file -p :a.md)")"
|
||||
feature_md_oid="$(calc_oid "$(git cat-file -p my-feature:a.md)")"
|
||||
master_txt_size="$(git cat-file -p :a.txt | wc -c | awk '{ print $1 }')"
|
||||
master_md_size="$(git cat-file -p :a.md | wc -c | awk '{ print $1 }')"
|
||||
feature_md_size="$(git cat-file -p my-feature:a.md | wc -c | awk '{ print $1 }')"
|
||||
|
||||
git lfs migrate import --everything
|
||||
|
||||
assert_pointer "master" "a.txt" "$master_txt_oid" "$master_txt_size"
|
||||
assert_pointer "master" "a.md" "$master_md_oid" "$master_md_size"
|
||||
assert_pointer "my-feature" "a.md" "$feature_md_oid" "$feature_md_size"
|
||||
)
|
||||
end_test
|
||||
|
||||
|
||||
begin_test "migrate import (--everything with args)"
|
||||
(
|
||||
set -e
|
||||
|
||||
setup_multiple_local_branches
|
||||
|
||||
[ "$(git lfs migrate import --everything master 2>&1)" = \
|
||||
"fatal: cannot use --everything with explicit reference arguments" ]
|
||||
)
|
||||
end_test
|
||||
|
||||
begin_test "migrate import (--everything with --include-ref)"
|
||||
(
|
||||
set -e
|
||||
|
||||
setup_multiple_local_branches
|
||||
|
||||
[ "$(git lfs migrate import --everything --include-ref=refs/heads/master 2>&1)" = \
|
||||
"fatal: cannot use --everything with --include-ref or --exclude-ref" ]
|
||||
)
|
||||
end_test
|
||||
|
||||
exit 0
|
||||
|
||||
begin_test "migrate import (--everything with --exclude-ref)"
|
||||
(
|
||||
set -e
|
||||
|
||||
setup_multiple_local_branches
|
||||
|
||||
[ "$(git lfs migrate import --everything --exclude-ref=refs/heads/master 2>&1)" = \
|
||||
"fatal: cannot use --everything with --include-ref or --exclude-ref" ]
|
||||
)
|
||||
end_test
|
||||
|
@ -265,3 +265,61 @@ begin_test "migrate info (empty set)"
|
||||
[ "0" -eq "$(echo -n "$migrate" | wc -l | awk '{ print $1 }')" ]
|
||||
)
|
||||
end_test
|
||||
|
||||
begin_test "migrate info (--everything)"
|
||||
(
|
||||
set -e
|
||||
|
||||
setup_multiple_local_branches
|
||||
git checkout master
|
||||
|
||||
original_master="$(git rev-parse refs/heads/master)"
|
||||
original_feature="$(git rev-parse refs/heads/my-feature)"
|
||||
|
||||
diff -u <(git lfs migrate info --everything 2>&1 | tail -n 2) <(cat <<-EOF
|
||||
*.md 170 B 2/2 files(s) 100%
|
||||
*.txt 120 B 1/1 files(s) 100%
|
||||
EOF)
|
||||
|
||||
migrated_master="$(git rev-parse refs/heads/master)"
|
||||
migrated_feature="$(git rev-parse refs/heads/my-feature)"
|
||||
|
||||
assert_ref_unmoved "refs/heads/master" "$original_master" "$migrated_master"
|
||||
assert_ref_unmoved "refs/heads/my-feature" "$original_feature" "$migrated_feature"
|
||||
)
|
||||
end_test
|
||||
|
||||
begin_test "migrate info (--everything with args)"
|
||||
(
|
||||
set -e
|
||||
|
||||
setup_multiple_local_branches
|
||||
|
||||
[ "$(git lfs migrate info --everything master 2>&1)" = \
|
||||
"fatal: cannot use --everything with explicit reference arguments" ]
|
||||
)
|
||||
end_test
|
||||
|
||||
begin_test "migrate info (--everything with --include-ref)"
|
||||
(
|
||||
set -e
|
||||
|
||||
setup_multiple_local_branches
|
||||
|
||||
[ "$(git lfs migrate info --everything --include-ref=refs/heads/master 2>&1)" = \
|
||||
"fatal: cannot use --everything with --include-ref or --exclude-ref" ]
|
||||
)
|
||||
end_test
|
||||
|
||||
exit 0
|
||||
|
||||
begin_test "migrate info (--everything with --exclude-ref)"
|
||||
(
|
||||
set -e
|
||||
|
||||
setup_multiple_local_branches
|
||||
|
||||
[ "$(git lfs migrate info --everything --exclude-ref=refs/heads/master 2>&1)" = \
|
||||
"fatal: cannot use --everything with --include-ref or --exclude-ref" ]
|
||||
)
|
||||
end_test
|
||||
|
Loading…
Reference in New Issue
Block a user