|
|
|
@ -189,7 +189,9 @@ static int list_heads(struct bundle_header *header, int argc, const char **argv)
@@ -189,7 +189,9 @@ static int list_heads(struct bundle_header *header, int argc, const char **argv)
|
|
|
|
|
static int create_bundle(struct bundle_header *header, const char *path, |
|
|
|
|
int argc, const char **argv) |
|
|
|
|
{ |
|
|
|
|
static struct lock_file lock; |
|
|
|
|
int bundle_fd = -1; |
|
|
|
|
int bundle_to_stdout; |
|
|
|
|
const char **argv_boundary = xmalloc((argc + 4) * sizeof(const char *)); |
|
|
|
|
const char **argv_pack = xmalloc(5 * sizeof(const char *)); |
|
|
|
|
int i, ref_count = 0; |
|
|
|
@ -198,14 +200,11 @@ static int create_bundle(struct bundle_header *header, const char *path,
@@ -198,14 +200,11 @@ static int create_bundle(struct bundle_header *header, const char *path,
|
|
|
|
|
struct child_process rls; |
|
|
|
|
FILE *rls_fout; |
|
|
|
|
|
|
|
|
|
/* |
|
|
|
|
* NEEDSWORK: this should use something like lock-file |
|
|
|
|
* to create temporary that is cleaned up upon error. |
|
|
|
|
*/ |
|
|
|
|
bundle_fd = (!strcmp(path, "-") ? 1 : |
|
|
|
|
open(path, O_CREAT | O_EXCL | O_WRONLY, 0666)); |
|
|
|
|
if (bundle_fd < 0) |
|
|
|
|
return error("Could not create '%s': %s", path, strerror(errno)); |
|
|
|
|
bundle_to_stdout = !strcmp(path, "-"); |
|
|
|
|
if (bundle_to_stdout) |
|
|
|
|
bundle_fd = 1; |
|
|
|
|
else |
|
|
|
|
bundle_fd = hold_lock_file_for_update(&lock, path, 1); |
|
|
|
|
|
|
|
|
|
/* write signature */ |
|
|
|
|
write_or_die(bundle_fd, bundle_signature, strlen(bundle_signature)); |
|
|
|
@ -341,6 +340,9 @@ static int create_bundle(struct bundle_header *header, const char *path,
@@ -341,6 +340,9 @@ static int create_bundle(struct bundle_header *header, const char *path,
|
|
|
|
|
} |
|
|
|
|
if (finish_command(&rls)) |
|
|
|
|
return error ("pack-objects died"); |
|
|
|
|
close(bundle_fd); |
|
|
|
|
if (!bundle_to_stdout) |
|
|
|
|
commit_lock_file(&lock); |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|