die("failed to write ref-pack file");
if (fflush(cbdata.refs_file) || fsync(fd) || fclose(cbdata.refs_file))
die("failed to write ref-pack file (%s)", strerror(errno));
+ /*
+ * Since the lock file was fdopen()'ed and then fclose()'ed above,
+ * assign -1 to the lock file descriptor so that commit_lock_file()
+ * won't try to close() it.
+ */
+ packed.fd = -1;
if (commit_lock_file(&packed) < 0)
die("unable to overwrite old ref-pack file (%s)", strerror(errno));
if (cbdata.flags & PACK_REFS_PRUNE)
int cmd_pack_refs(int argc, const char **argv, const char *prefix)
{
- int all = 0, prune = 1;
- unsigned int flags = 0;
+ unsigned int flags = PACK_REFS_PRUNE;
struct option opts[] = {
- OPT_BOOLEAN(0, "all", &all, "pack everything"),
- OPT_BOOLEAN(0, "prune", &prune, "prune loose refs (default)"),
+ OPT_BIT(0, "all", &flags, "pack everything", PACK_REFS_ALL),
+ OPT_BIT(0, "prune", &flags, "prune loose refs (default)", PACK_REFS_PRUNE),
OPT_END(),
};
-
if (parse_options(argc, argv, opts, pack_refs_usage, 0))
usage_with_options(pack_refs_usage, opts);
- if (prune)
- flags |= PACK_REFS_PRUNE;
- if (all)
- flags |= PACK_REFS_ALL;
return pack_refs(flags);
}