Skip to content

Commit

Permalink
Introduce close_pack_index to permit replacement
Browse files Browse the repository at this point in the history
By closing the pack index, a caller can later overwrite the index
with an updated index file, possibly after converting from v1 to
the v2 format.  Because p->index_data is NULL after close, on the
next access the index will be opened again and the other members
will be updated with new data.

Signed-off-by: Shawn O. Pearce <[email protected]>
Signed-off-by: Junio C Hamano <[email protected]>
  • Loading branch information
spearce authored and gitster committed Apr 20, 2010
1 parent 162eb5f commit fa5fc15
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 2 deletions.
1 change: 1 addition & 0 deletions cache.h
Original file line number Diff line number Diff line change
Expand Up @@ -911,6 +911,7 @@ extern struct packed_git *find_sha1_pack(const unsigned char *sha1,

extern void pack_report(void);
extern int open_pack_index(struct packed_git *);
extern void close_pack_index(struct packed_git *);
extern unsigned char *use_pack(struct packed_git *, struct pack_window **, off_t, unsigned int *);
extern void close_pack_windows(struct packed_git *);
extern void unuse_pack(struct pack_window **);
Expand Down
11 changes: 9 additions & 2 deletions sha1_file.c
Original file line number Diff line number Diff line change
Expand Up @@ -606,6 +606,14 @@ void unuse_pack(struct pack_window **w_cursor)
}
}

void close_pack_index(struct packed_git *p)
{
if (p->index_data) {
munmap((void *)p->index_data, p->index_size);
p->index_data = NULL;
}
}

/*
* This is used by git-repack in case a newly created pack happens to
* contain the same set of objects as an existing one. In that case
Expand All @@ -627,8 +635,7 @@ void free_pack_by_name(const char *pack_name)
close_pack_windows(p);
if (p->pack_fd != -1)
close(p->pack_fd);
if (p->index_data)
munmap((void *)p->index_data, p->index_size);
close_pack_index(p);
free(p->bad_object_sha1);
*pp = p->next;
free(p);
Expand Down

0 comments on commit fa5fc15

Please sign in to comment.