Skip to content

Commit

Permalink
git bundle create <bundle> leaks handle the revlist is empty.
Browse files Browse the repository at this point in the history
issue #790: git bundle create does not close handle to *.lock file

This problem happens when an user tries to create an empty bundle, using the
following command:  `git bundle create <bundle> <revlist>` and when <revlist>
resolve to an empty list (for example, like `master..master`), `git bundle` fails
and warn the user about how it don't want to create empty bundle.

In that case, git tries to delete the `<bundle>.lock` file, and since there's still
an open file handle, fails to do so and ask the user if it should retry (which will
fail again).

The lock can still be deleted manually by the user (and it is required if the user
want to create a bundle after revising his rev-list).

Signed-off-by: Gaël Lhez <gael.lhez@gmail.com>
  • Loading branch information
glhez committed Jun 22, 2016
1 parent dd1308a commit 0ef742a
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 3 deletions.
7 changes: 4 additions & 3 deletions bundle.c
Original file line number Diff line number Diff line change
Expand Up @@ -447,10 +447,11 @@ int create_bundle(struct bundle_header *header, const char *path,
object_array_remove_duplicates(&revs.pending);

ref_count = write_bundle_refs(bundle_fd, &revs);
if (!ref_count)
die(_("Refusing to create empty bundle."));
else if (ref_count < 0)
if (ref_count <= 0) {
if (!ref_count)
error(_("Refusing to create empty bundle."));
goto err;
}

/* write pack */
if (write_pack_data(bundle_fd, &revs)) {
Expand Down
15 changes: 15 additions & 0 deletions t/tgfw790-git-bundle.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#!/bin/sh
test_description='
test git-bundle under git for Windows
When we select an empty set of commit (like git bundle create foobar.bundle master..master),
we should not have problem with the foobar.bundle.lock being locked (especially on Windows).
'

. ./test-lib.sh

test_expect_failure 'try to create a bundle with empty ref count' '
git bundle create foobar.bundle master..master
'

test_done

0 comments on commit 0ef742a

Please sign in to comment.