Browse Source

shallow.c: extend setup_*_shallow() to accept extra shallow commits

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Nguyễn Thái Ngọc Duy 11 years ago committed by Junio C Hamano
parent
commit
1a30f5a2f2
  1. 8
      commit.h
  2. 5
      fetch-pack.c
  3. 20
      shallow.c
  4. 2
      upload-pack.c

8
commit.h

@ -201,10 +201,12 @@ extern struct commit_list *get_shallow_commits(struct object_array *heads,
int depth, int shallow_flag, int not_shallow_flag); int depth, int shallow_flag, int not_shallow_flag);
extern void check_shallow_file_for_update(void); extern void check_shallow_file_for_update(void);
extern void set_alternate_shallow_file(const char *path); extern void set_alternate_shallow_file(const char *path);
extern int write_shallow_commits(struct strbuf *out, int use_pack_protocol); extern int write_shallow_commits(struct strbuf *out, int use_pack_protocol,
const struct sha1_array *extra);
extern void setup_alternate_shallow(struct lock_file *shallow_lock, extern void setup_alternate_shallow(struct lock_file *shallow_lock,
const char **alternate_shallow_file); const char **alternate_shallow_file,
extern char *setup_temporary_shallow(void); const struct sha1_array *extra);
extern char *setup_temporary_shallow(const struct sha1_array *extra);
extern void advertise_shallow_grafts(int); extern void advertise_shallow_grafts(int);


int is_descendant_of(struct commit *, struct commit_list *); int is_descendant_of(struct commit *, struct commit_list *);

5
fetch-pack.c

@ -311,7 +311,7 @@ static int find_common(struct fetch_pack_args *args,
} }


if (is_repository_shallow()) if (is_repository_shallow())
write_shallow_commits(&req_buf, 1); write_shallow_commits(&req_buf, 1, NULL);
if (args->depth > 0) if (args->depth > 0)
packet_buf_write(&req_buf, "deepen %d", args->depth); packet_buf_write(&req_buf, "deepen %d", args->depth);
packet_buf_flush(&req_buf); packet_buf_flush(&req_buf);
@ -850,7 +850,8 @@ static struct ref *do_fetch_pack(struct fetch_pack_args *args,
if (args->stateless_rpc) if (args->stateless_rpc)
packet_flush(fd[1]); packet_flush(fd[1]);
if (args->depth > 0) if (args->depth > 0)
setup_alternate_shallow(&shallow_lock, &alternate_shallow_file); setup_alternate_shallow(&shallow_lock, &alternate_shallow_file,
NULL);
else else
alternate_shallow_file = NULL; alternate_shallow_file = NULL;
if (get_pack(args, fd, pack_lockfile)) if (get_pack(args, fd, pack_lockfile))

20
shallow.c

@ -165,22 +165,31 @@ static int write_one_shallow(const struct commit_graft *graft, void *cb_data)
return 0; return 0;
} }


int write_shallow_commits(struct strbuf *out, int use_pack_protocol) int write_shallow_commits(struct strbuf *out, int use_pack_protocol,
const struct sha1_array *extra)
{ {
struct write_shallow_data data; struct write_shallow_data data;
int i;
data.out = out; data.out = out;
data.use_pack_protocol = use_pack_protocol; data.use_pack_protocol = use_pack_protocol;
data.count = 0; data.count = 0;
for_each_commit_graft(write_one_shallow, &data); for_each_commit_graft(write_one_shallow, &data);
if (!extra)
return data.count;
for (i = 0; i < extra->nr; i++) {
strbuf_addstr(out, sha1_to_hex(extra->sha1[i]));
strbuf_addch(out, '\n');
data.count++;
}
return data.count; return data.count;
} }


char *setup_temporary_shallow(void) char *setup_temporary_shallow(const struct sha1_array *extra)
{ {
struct strbuf sb = STRBUF_INIT; struct strbuf sb = STRBUF_INIT;
int fd; int fd;


if (write_shallow_commits(&sb, 0)) { if (write_shallow_commits(&sb, 0, extra)) {
struct strbuf path = STRBUF_INIT; struct strbuf path = STRBUF_INIT;
strbuf_addstr(&path, git_path("shallow_XXXXXX")); strbuf_addstr(&path, git_path("shallow_XXXXXX"));
fd = xmkstemp(path.buf); fd = xmkstemp(path.buf);
@ -199,7 +208,8 @@ char *setup_temporary_shallow(void)
} }


void setup_alternate_shallow(struct lock_file *shallow_lock, void setup_alternate_shallow(struct lock_file *shallow_lock,
const char **alternate_shallow_file) const char **alternate_shallow_file,
const struct sha1_array *extra)
{ {
struct strbuf sb = STRBUF_INIT; struct strbuf sb = STRBUF_INIT;
int fd; int fd;
@ -207,7 +217,7 @@ void setup_alternate_shallow(struct lock_file *shallow_lock,
check_shallow_file_for_update(); check_shallow_file_for_update();
fd = hold_lock_file_for_update(shallow_lock, git_path("shallow"), fd = hold_lock_file_for_update(shallow_lock, git_path("shallow"),
LOCK_DIE_ON_ERROR); LOCK_DIE_ON_ERROR);
if (write_shallow_commits(&sb, 0)) { if (write_shallow_commits(&sb, 0, extra)) {
if (write_in_full(fd, sb.buf, sb.len) != sb.len) if (write_in_full(fd, sb.buf, sb.len) != sb.len)
die_errno("failed to write to %s", die_errno("failed to write to %s",
shallow_lock->filename); shallow_lock->filename);

2
upload-pack.c

@ -84,7 +84,7 @@ static void create_pack_file(void)
char *shallow_file = NULL; char *shallow_file = NULL;


if (shallow_nr) { if (shallow_nr) {
shallow_file = setup_temporary_shallow(); shallow_file = setup_temporary_shallow(NULL);
argv[arg++] = "--shallow-file"; argv[arg++] = "--shallow-file";
argv[arg++] = shallow_file; argv[arg++] = shallow_file;
} }

Loading…
Cancel
Save