Skip to content

Commit

Permalink
Always ensure the pack.keep file is removed by git-fetch
Browse files Browse the repository at this point in the history
If we are using a native transport and the transport chose to
save the packfile it may have created a .keep file to protect
the packfile from a concurrently running git-repack process.

In such a case the git-fetch process should make sure it will
unlink the .keep file even if it fails to update any refs as
otherwise the newly downloaded packfile's diskspace will never
be reclaimed if the objects are not actually referenced.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Shawn O. Pearce authored and Junio C Hamano committed Sep 19, 2007
1 parent 1788c39 commit e4022ed
Showing 1 changed file with 16 additions and 1 deletion.
17 changes: 16 additions & 1 deletion builtin-fetch.c
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,20 @@ static const char fetch_usage[] = "git-fetch [-a | --append] [--upload-pack <upl

static int append, force, tags, no_tags, update_head_ok, verbose, quiet;
static char *default_rla = NULL;
static struct transport *transport;

static void unlock_pack(void)
{
if (transport)
transport_unlock_pack(transport);
}

static void unlock_pack_on_signal(int signo)
{
unlock_pack();
signal(SIGINT, SIG_DFL);
raise(signo);
}

static void find_merge_config(struct ref *ref_map, struct remote *remote)
{
Expand Down Expand Up @@ -396,7 +410,6 @@ static int do_fetch(struct transport *transport,
int cmd_fetch(int argc, const char **argv, const char *prefix)
{
struct remote *remote;
struct transport *transport;
int i, j, rla_offset;
static const char **refs = NULL;
int ref_nr = 0;
Expand Down Expand Up @@ -520,5 +533,7 @@ int cmd_fetch(int argc, const char **argv, const char *prefix)
printf("ref: %s\n", refs[j]);
}

signal(SIGINT, unlock_pack_on_signal);
atexit(unlock_pack);
return do_fetch(transport, parse_ref_spec(ref_nr, refs), ref_nr);
}

0 comments on commit e4022ed

Please sign in to comment.