threads / patch / 24867

patchbundle: detect if bundle file cannot be created

Subject: [PATCH] bundle: detect if bundle file cannot be created

## tl;dr

3 messages between Aug 26, 2010 and Aug 27, 2010. Diffs are folded; open one to read it.

replies: 2people: 2as markdown or json

Csaba Henk· Aug 26, 2010, 09:23 UTC · lore
bundle command silently died with no sign of failure if it
could not create the bundle file. (Eg.: its path resovles to a directory,
or the parent dir is sticky while file already exists and is owned
by someone else.)
---
 bundle.c          |    6 ++++--
 t/t5704-bundle.sh |    7 +++++++
 2 files changed, 11 insertions(+), 2 deletions(-)
Show changes to 2 files +11 −2

bundle.c, t/t5704-bundle.sh

diff --git a/bundle.c b/bundle.c
index ff97adc..3eb4ca2 100644
--- a/bundle.c
+++ b/bundle.c
@@ -372,8 +372,10 @@ int create_bundle(struct bundle_header *header, const char *path,
 	close(rls.in);
 	if (finish_command(&rls))
 		return error ("pack-objects died");
-	if (!bundle_to_stdout)
-		commit_lock_file(&lock);
+	if (!bundle_to_stdout) {
+		if (commit_lock_file(&lock))
+			die_errno("cannot create bundle file");
+	}
 	return 0;
 }
 
diff --git a/t/t5704-bundle.sh b/t/t5704-bundle.sh
index ddc3dc5..728ccd8 100755
--- a/t/t5704-bundle.sh
+++ b/t/t5704-bundle.sh
@@ -30,6 +30,13 @@ test_expect_success 'tags can be excluded by rev-list options' '
 
 '
 
+test_expect_success 'die if bundle file cannot be created' '
+
+	mkdir adir &&
+	test_must_fail git bundle create adir --all
+
+'
+
 test_expect_failure 'bundle --stdin' '
 
 	echo master | git bundle create stdin-bundle.bdl --stdin &&
-- 
1.7.2.2
Junio C Hamano· Aug 26, 2010, 17:26 UTC · re: Csaba Henk · lore

Re: [PATCH] bundle: detect if bundle file cannot be created

Csaba Henk <csaba@gluster.com> writes:
Show 5 quoted lines
> bundle command silently died with no sign of failure if it
> could not create the bundle file. (Eg.: its path resovles to a directory,
> or the parent dir is sticky while file already exists and is owned
> by someone else.)
> ---
Sign-off?
Show 14 quoted lines
> diff --git a/bundle.c b/bundle.c
> index ff97adc..3eb4ca2 100644
> --- a/bundle.c
> +++ b/bundle.c
> @@ -372,8 +372,10 @@ int create_bundle(struct bundle_header *header, const char *path,
>  	close(rls.in);
>  	if (finish_command(&rls))
>  		return error ("pack-objects died");
> -	if (!bundle_to_stdout)
> -		commit_lock_file(&lock);
> +	if (!bundle_to_stdout) {
> +		if (commit_lock_file(&lock))
> +			die_errno("cannot create bundle file");
> +	}
You would want to parrot the path given by the caller, perhaps like this?
	die_errno("cannot create '%s'", path)

This function tries to report error to the caller in some places but rudely dies in some other places, so dying here is not a serious offence.

Show 14 quoted lines
> diff --git a/t/t5704-bundle.sh b/t/t5704-bundle.sh
> index ddc3dc5..728ccd8 100755
> --- a/t/t5704-bundle.sh
> +++ b/t/t5704-bundle.sh
> @@ -30,6 +30,13 @@ test_expect_success 'tags can be excluded by rev-list options' '
>  
>  '
>  
> +test_expect_success 'die if bundle file cannot be created' '
> +
> +	mkdir adir &&
> +	test_must_fail git bundle create adir --all
> +
> +'
I like it ;-)
Thanks.
Csaba Henk· Aug 27, 2010, 20:31 UTC · re: Csaba Henk · lore

[PATCH v2] bundle: detect if bundle file cannot be created

bundle command silently died with no sign of failure if it could not create the bundle file. (Eg.: its path resovles to a directory, or the parent dir is sticky while file already exists and is owned by someone else.)

Signed-off-by: Csaba Henk <csaba@gluster.com>
---
 bundle.c          |    6 ++++--
 t/t5704-bundle.sh |    7 +++++++
 2 files changed, 11 insertions(+), 2 deletions(-)
Show changes to 2 files +11 −2

bundle.c, t/t5704-bundle.sh

diff --git a/bundle.c b/bundle.c
index ff97adc..65ea26b 100644
--- a/bundle.c
+++ b/bundle.c
@@ -372,8 +372,10 @@ int create_bundle(struct bundle_header *header, const char *path,
 	close(rls.in);
 	if (finish_command(&rls))
 		return error ("pack-objects died");
-	if (!bundle_to_stdout)
-		commit_lock_file(&lock);
+	if (!bundle_to_stdout) {
+		if (commit_lock_file(&lock))
+			die_errno("cannot create '%s'", path);
+	}
 	return 0;
 }
 
diff --git a/t/t5704-bundle.sh b/t/t5704-bundle.sh
index ddc3dc5..728ccd8 100755
--- a/t/t5704-bundle.sh
+++ b/t/t5704-bundle.sh
@@ -30,6 +30,13 @@ test_expect_success 'tags can be excluded by rev-list options' '
 
 '
 
+test_expect_success 'die if bundle file cannot be created' '
+
+	mkdir adir &&
+	test_must_fail git bundle create adir --all
+
+'
+
 test_expect_failure 'bundle --stdin' '
 
 	echo master | git bundle create stdin-bundle.bdl --stdin &&
-- 
1.7.2.2

← back to recent threads