Skip to content

Commit

Permalink
read-tree: Fix regression with creation of a new index file.
Browse files Browse the repository at this point in the history
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]>
  • Loading branch information
julliard authored and gitster committed Aug 17, 2009
1 parent 5a56da5 commit db137fe
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 4 deletions.
10 changes: 6 additions & 4 deletions builtin-read-tree.c
Original file line number Diff line number Diff line change
Expand Up @@ -113,13 +113,15 @@ int cmd_read_tree(int argc, const char **argv, const char *unused_prefix)
argc = parse_options(argc, argv, unused_prefix, read_tree_options,
read_tree_usage, 0);

if (read_cache_unmerged() && (opts.prefix || opts.merge))
die("You need to resolve your current index first");

prefix_set = opts.prefix ? 1 : 0;
if (1 < opts.merge + opts.reset + prefix_set)
die("Which one? -m, --reset, or --prefix?");
stage = opts.merge = (opts.reset || opts.merge || prefix_set);

if (opts.reset || opts.merge || opts.prefix) {
if (read_cache_unmerged() && (opts.prefix || opts.merge))
die("You need to resolve your current index first");
stage = opts.merge = 1;
}

for (i = 0; i < argc; i++) {
const char *arg = argv[i];
Expand Down
25 changes: 25 additions & 0 deletions t/t1009-read-tree-new-index.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#!/bin/sh

test_description='test read-tree into a fresh index file'

. ./test-lib.sh

test_expect_success setup '
echo one >a &&
git add a &&
git commit -m initial
'

test_expect_success 'non-existent index file' '
rm -f new-index &&
GIT_INDEX_FILE=new-index git read-tree master
'

test_expect_success 'empty index file' '
rm -f new-index &&
> new-index &&
GIT_INDEX_FILE=new-index git read-tree master
'

test_done

0 comments on commit db137fe

Please sign in to comment.