Skip to content

Commit db137fe

Browse files
julliardgitster
authored andcommitted
read-tree: Fix regression with creation of a new index file.
Reading the index into an empty file has been broken by 5a56da5, since it causes the existing index to always be loaded first, and dies if it's an empty file: $ GIT_INDEX_FILE=`mktemp` git read-tree master fatal: index file smaller than expected It breaks for instance committing from git.el. This patch reverts to the previous behavior of only loading the index when merging it. Signed-off-by: Alexandre Julliard <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 5a56da5 commit db137fe

File tree

2 files changed

+31
-4
lines changed

2 files changed

+31
-4
lines changed

builtin-read-tree.c

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -113,13 +113,15 @@ int cmd_read_tree(int argc, const char **argv, const char *unused_prefix)
113113
argc = parse_options(argc, argv, unused_prefix, read_tree_options,
114114
read_tree_usage, 0);
115115

116-
if (read_cache_unmerged() && (opts.prefix || opts.merge))
117-
die("You need to resolve your current index first");
118-
119116
prefix_set = opts.prefix ? 1 : 0;
120117
if (1 < opts.merge + opts.reset + prefix_set)
121118
die("Which one? -m, --reset, or --prefix?");
122-
stage = opts.merge = (opts.reset || opts.merge || prefix_set);
119+
120+
if (opts.reset || opts.merge || opts.prefix) {
121+
if (read_cache_unmerged() && (opts.prefix || opts.merge))
122+
die("You need to resolve your current index first");
123+
stage = opts.merge = 1;
124+
}
123125

124126
for (i = 0; i < argc; i++) {
125127
const char *arg = argv[i];

t/t1009-read-tree-new-index.sh

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
#!/bin/sh
2+
3+
test_description='test read-tree into a fresh index file'
4+
5+
. ./test-lib.sh
6+
7+
test_expect_success setup '
8+
echo one >a &&
9+
git add a &&
10+
git commit -m initial
11+
'
12+
13+
test_expect_success 'non-existent index file' '
14+
rm -f new-index &&
15+
GIT_INDEX_FILE=new-index git read-tree master
16+
'
17+
18+
test_expect_success 'empty index file' '
19+
rm -f new-index &&
20+
> new-index &&
21+
GIT_INDEX_FILE=new-index git read-tree master
22+
'
23+
24+
test_done
25+

0 commit comments

Comments
 (0)