Skip to content

Commit 4cf76f6

Browse files
bk2204gitster
authored andcommitted
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 <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 3f26785 commit 4cf76f6

File tree

2 files changed

+44
-4
lines changed

2 files changed

+44
-4
lines changed

builtin/reset.c

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ static inline int is_merge(void)
4646
return !access(git_path_merge_head(the_repository), F_OK);
4747
}
4848

49-
static int reset_index(const struct object_id *oid, int reset_type, int quiet)
49+
static int reset_index(const char *ref, const struct object_id *oid, int reset_type, int quiet)
5050
{
5151
int i, nr = 0;
5252
struct tree_desc desc[2];
@@ -60,6 +60,7 @@ static int reset_index(const struct object_id *oid, int reset_type, int quiet)
6060
opts.dst_index = &the_index;
6161
opts.fn = oneway_merge;
6262
opts.merge = 1;
63+
init_checkout_metadata(&opts.meta, ref, oid, NULL);
6364
if (!quiet)
6465
opts.verbose_update = 1;
6566
switch (reset_type) {
@@ -418,11 +419,20 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
418419
}
419420
}
420421
} else {
421-
int err = reset_index(&oid, reset_type, quiet);
422+
struct object_id dummy;
423+
char *ref = NULL;
424+
int err;
425+
426+
dwim_ref(rev, strlen(rev), &dummy, &ref);
427+
if (ref && !starts_with(ref, "refs/"))
428+
ref = NULL;
429+
430+
err = reset_index(ref, &oid, reset_type, quiet);
422431
if (reset_type == KEEP && !err)
423-
err = reset_index(&oid, MIXED, quiet);
432+
err = reset_index(ref, &oid, MIXED, quiet);
424433
if (err)
425434
die(_("Could not reset index file to revision '%s'."), rev);
435+
free(ref);
426436
}
427437

428438
if (write_locked_index(&the_index, &lock, COMMIT_LOCK))

t/t0021-conversion.sh

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -447,7 +447,8 @@ test_expect_success PERL 'required process filter should filter data for various
447447
git commit -m "test commit 3" &&
448448
git checkout empty-branch &&
449449
filter_git rebase --onto empty-branch master^^ master &&
450-
META="ref=refs/heads/master treeish=$(git rev-parse --verify master)" &&
450+
MASTER2=$(git rev-parse --verify master) &&
451+
META="ref=refs/heads/master treeish=$MASTER2" &&
451452
cat >expected.log <<-EOF &&
452453
START
453454
init handshake complete
@@ -458,6 +459,35 @@ test_expect_success PERL 'required process filter should filter data for various
458459
IN: smudge testsubdir/test3 '\''sq'\'',\$x=.r $META blob=$M3 $S3 [OK] -- OUT: $S3 . [OK]
459460
STOP
460461
EOF
462+
test_cmp_exclude_clean expected.log debug.log &&
463+
464+
git reset --hard empty-branch &&
465+
filter_git reset --hard $MASTER &&
466+
META="treeish=$MASTER" &&
467+
cat >expected.log <<-EOF &&
468+
START
469+
init handshake complete
470+
IN: smudge test.r $META blob=$M $S [OK] -- OUT: $S . [OK]
471+
IN: smudge test2.r $META blob=$M2 $S2 [OK] -- OUT: $S2 . [OK]
472+
IN: smudge test4-empty.r $META blob=$EMPTY 0 [OK] -- OUT: 0 [OK]
473+
IN: smudge testsubdir/test3 '\''sq'\'',\$x=.r $META blob=$M3 $S3 [OK] -- OUT: $S3 . [OK]
474+
STOP
475+
EOF
476+
test_cmp_exclude_clean expected.log debug.log &&
477+
478+
git branch old-master $MASTER &&
479+
git reset --hard empty-branch &&
480+
filter_git reset --hard old-master &&
481+
META="ref=refs/heads/old-master treeish=$MASTER" &&
482+
cat >expected.log <<-EOF &&
483+
START
484+
init handshake complete
485+
IN: smudge test.r $META blob=$M $S [OK] -- OUT: $S . [OK]
486+
IN: smudge test2.r $META blob=$M2 $S2 [OK] -- OUT: $S2 . [OK]
487+
IN: smudge test4-empty.r $META blob=$EMPTY 0 [OK] -- OUT: 0 [OK]
488+
IN: smudge testsubdir/test3 '\''sq'\'',\$x=.r $META blob=$M3 $S3 [OK] -- OUT: $S3 . [OK]
489+
STOP
490+
EOF
461491
test_cmp_exclude_clean expected.log debug.log
462492
)
463493
'

0 commit comments

Comments
 (0)