builtin/reset: compute checkout metadata for reset
Pass the commit, and if we have it, the ref to the filters when we perform a checkout. This should only be the case when we invoke git reset --hard; the metadata will be unused otherwise. Signed-off-by: brian m. carlson <bk2204@github.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
parent
3f26785624
commit
4cf76f6bbf
|
@ -46,7 +46,7 @@ static inline int is_merge(void)
|
||||||
return !access(git_path_merge_head(the_repository), F_OK);
|
return !access(git_path_merge_head(the_repository), F_OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int reset_index(const struct object_id *oid, int reset_type, int quiet)
|
static int reset_index(const char *ref, const struct object_id *oid, int reset_type, int quiet)
|
||||||
{
|
{
|
||||||
int i, nr = 0;
|
int i, nr = 0;
|
||||||
struct tree_desc desc[2];
|
struct tree_desc desc[2];
|
||||||
|
@ -60,6 +60,7 @@ static int reset_index(const struct object_id *oid, int reset_type, int quiet)
|
||||||
opts.dst_index = &the_index;
|
opts.dst_index = &the_index;
|
||||||
opts.fn = oneway_merge;
|
opts.fn = oneway_merge;
|
||||||
opts.merge = 1;
|
opts.merge = 1;
|
||||||
|
init_checkout_metadata(&opts.meta, ref, oid, NULL);
|
||||||
if (!quiet)
|
if (!quiet)
|
||||||
opts.verbose_update = 1;
|
opts.verbose_update = 1;
|
||||||
switch (reset_type) {
|
switch (reset_type) {
|
||||||
|
@ -418,11 +419,20 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
int err = reset_index(&oid, reset_type, quiet);
|
struct object_id dummy;
|
||||||
|
char *ref = NULL;
|
||||||
|
int err;
|
||||||
|
|
||||||
|
dwim_ref(rev, strlen(rev), &dummy, &ref);
|
||||||
|
if (ref && !starts_with(ref, "refs/"))
|
||||||
|
ref = NULL;
|
||||||
|
|
||||||
|
err = reset_index(ref, &oid, reset_type, quiet);
|
||||||
if (reset_type == KEEP && !err)
|
if (reset_type == KEEP && !err)
|
||||||
err = reset_index(&oid, MIXED, quiet);
|
err = reset_index(ref, &oid, MIXED, quiet);
|
||||||
if (err)
|
if (err)
|
||||||
die(_("Could not reset index file to revision '%s'."), rev);
|
die(_("Could not reset index file to revision '%s'."), rev);
|
||||||
|
free(ref);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (write_locked_index(&the_index, &lock, COMMIT_LOCK))
|
if (write_locked_index(&the_index, &lock, COMMIT_LOCK))
|
||||||
|
|
|
@ -447,7 +447,8 @@ test_expect_success PERL 'required process filter should filter data for various
|
||||||
git commit -m "test commit 3" &&
|
git commit -m "test commit 3" &&
|
||||||
git checkout empty-branch &&
|
git checkout empty-branch &&
|
||||||
filter_git rebase --onto empty-branch master^^ master &&
|
filter_git rebase --onto empty-branch master^^ master &&
|
||||||
META="ref=refs/heads/master treeish=$(git rev-parse --verify master)" &&
|
MASTER2=$(git rev-parse --verify master) &&
|
||||||
|
META="ref=refs/heads/master treeish=$MASTER2" &&
|
||||||
cat >expected.log <<-EOF &&
|
cat >expected.log <<-EOF &&
|
||||||
START
|
START
|
||||||
init handshake complete
|
init handshake complete
|
||||||
|
@ -458,6 +459,35 @@ test_expect_success PERL 'required process filter should filter data for various
|
||||||
IN: smudge testsubdir/test3 '\''sq'\'',\$x=.r $META blob=$M3 $S3 [OK] -- OUT: $S3 . [OK]
|
IN: smudge testsubdir/test3 '\''sq'\'',\$x=.r $META blob=$M3 $S3 [OK] -- OUT: $S3 . [OK]
|
||||||
STOP
|
STOP
|
||||||
EOF
|
EOF
|
||||||
|
test_cmp_exclude_clean expected.log debug.log &&
|
||||||
|
|
||||||
|
git reset --hard empty-branch &&
|
||||||
|
filter_git reset --hard $MASTER &&
|
||||||
|
META="treeish=$MASTER" &&
|
||||||
|
cat >expected.log <<-EOF &&
|
||||||
|
START
|
||||||
|
init handshake complete
|
||||||
|
IN: smudge test.r $META blob=$M $S [OK] -- OUT: $S . [OK]
|
||||||
|
IN: smudge test2.r $META blob=$M2 $S2 [OK] -- OUT: $S2 . [OK]
|
||||||
|
IN: smudge test4-empty.r $META blob=$EMPTY 0 [OK] -- OUT: 0 [OK]
|
||||||
|
IN: smudge testsubdir/test3 '\''sq'\'',\$x=.r $META blob=$M3 $S3 [OK] -- OUT: $S3 . [OK]
|
||||||
|
STOP
|
||||||
|
EOF
|
||||||
|
test_cmp_exclude_clean expected.log debug.log &&
|
||||||
|
|
||||||
|
git branch old-master $MASTER &&
|
||||||
|
git reset --hard empty-branch &&
|
||||||
|
filter_git reset --hard old-master &&
|
||||||
|
META="ref=refs/heads/old-master treeish=$MASTER" &&
|
||||||
|
cat >expected.log <<-EOF &&
|
||||||
|
START
|
||||||
|
init handshake complete
|
||||||
|
IN: smudge test.r $META blob=$M $S [OK] -- OUT: $S . [OK]
|
||||||
|
IN: smudge test2.r $META blob=$M2 $S2 [OK] -- OUT: $S2 . [OK]
|
||||||
|
IN: smudge test4-empty.r $META blob=$EMPTY 0 [OK] -- OUT: 0 [OK]
|
||||||
|
IN: smudge testsubdir/test3 '\''sq'\'',\$x=.r $META blob=$M3 $S3 [OK] -- OUT: $S3 . [OK]
|
||||||
|
STOP
|
||||||
|
EOF
|
||||||
test_cmp_exclude_clean expected.log debug.log
|
test_cmp_exclude_clean expected.log debug.log
|
||||||
)
|
)
|
||||||
'
|
'
|
||||||
|
|
Loading…
Reference in New Issue