Browse Source

Merge branch 'en/t3433-rebase-stat-dirty-failure' into maint

The merge-recursive machinery failed to refresh the cache entry for
a merge result in a couple of places, resulting in an unnecessary
merge failure, which has been fixed.

* en/t3433-rebase-stat-dirty-failure:
  merge-recursive: fix the refresh logic in update_file_flags
  t3433: new rebase testcase documenting a stat-dirty-like failure
maint
Junio C Hamano 5 years ago
parent
commit
569b89842d
  1. 7
      merge-recursive.c
  2. 48
      t/t3433-rebase-across-mode-change.sh

7
merge-recursive.c

@ -998,10 +998,13 @@ static int update_file_flags(struct merge_options *opt, @@ -998,10 +998,13 @@ static int update_file_flags(struct merge_options *opt,
free(buf);
}
update_index:
if (!ret && update_cache)
if (add_cacheinfo(opt, contents, path, 0, update_wd,
if (!ret && update_cache) {
int refresh = (!opt->priv->call_depth &&
contents->mode != S_IFGITLINK);
if (add_cacheinfo(opt, contents, path, 0, refresh,
ADD_CACHE_OK_TO_ADD))
return -1;
}
return ret;
}


48
t/t3433-rebase-across-mode-change.sh

@ -0,0 +1,48 @@ @@ -0,0 +1,48 @@
#!/bin/sh

test_description='git rebase across mode change'

. ./test-lib.sh

test_expect_success 'setup' '
mkdir DS &&
>DS/whatever &&
git add DS &&
git commit -m base &&

git branch side1 &&
git branch side2 &&

git checkout side1 &&
git rm -rf DS &&
test_ln_s_add unrelated DS &&
git commit -m side1 &&

git checkout side2 &&
>unrelated &&
git add unrelated &&
git commit -m commit1 &&

echo >>unrelated &&
git commit -am commit2
'

test_expect_success 'rebase changes with the apply backend' '
test_when_finished "git rebase --abort || true" &&
git checkout -b apply-backend side2 &&
git rebase side1
'

test_expect_success 'rebase changes with the merge backend' '
test_when_finished "git rebase --abort || true" &&
git checkout -b merge-backend side2 &&
git rebase -m side1
'

test_expect_success 'rebase changes with the merge backend with a delay' '
test_when_finished "git rebase --abort || true" &&
git checkout -b merge-delay-backend side2 &&
git rebase -m --exec "sleep 1" side1
'

test_done
Loading…
Cancel
Save