From: =?UTF-8?q?Ga=C3=ABl=20Lhez?= <gael.l...@gmail.com>

When an user tries to create an empty bundle via `git bundle create
<bundle> <revlist>` where `<revlist>` resolves to an empty list (for
example, like `master..master`), the command fails and warns the user
about how it does not want to create empty bundle.

However, the `.lock` file was still open and on Windows that means
that it could not be deleted properly. This patch fixes that issue.

This closes https://github.com/git-for-windows/git/issues/790

Signed-off-by: Gaël Lhez <gael.l...@gmail.com>
Signed-off-by: Johannes Schindelin <johannes.schinde...@gmx.de>
---
 bundle.c                | 7 ++++---
 t/t5607-clone-bundle.sh | 4 ++++
 2 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/bundle.c b/bundle.c
index 1ef584b93b..4e349feff9 100644
--- a/bundle.c
+++ b/bundle.c
@@ -457,10 +457,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)) {
diff --git a/t/t5607-clone-bundle.sh b/t/t5607-clone-bundle.sh
index 348d9b3bc7..f84b875950 100755
--- a/t/t5607-clone-bundle.sh
+++ b/t/t5607-clone-bundle.sh
@@ -71,4 +71,8 @@ test_expect_success 'prerequisites with an empty commit 
message' '
        git bundle verify bundle
 '
 
+test_expect_success 'try to create a bundle with empty ref count' '
+       test_expect_code 1 git bundle create foobar.bundle master..master
+'
+
 test_done
-- 
gitgitgadget

Reply via email to