зеркало из https://github.com/microsoft/git.git
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>
This commit is contained in:
Родитель
b06dcd7d68
Коммит
1a30f5a2f2
8
commit.h
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);
|
||||
extern void check_shallow_file_for_update(void);
|
||||
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,
|
||||
const char **alternate_shallow_file);
|
||||
extern char *setup_temporary_shallow(void);
|
||||
const char **alternate_shallow_file,
|
||||
const struct sha1_array *extra);
|
||||
extern char *setup_temporary_shallow(const struct sha1_array *extra);
|
||||
extern void advertise_shallow_grafts(int);
|
||||
|
||||
int is_descendant_of(struct commit *, struct commit_list *);
|
||||
|
|
|
@ -311,7 +311,7 @@ static int find_common(struct fetch_pack_args *args,
|
|||
}
|
||||
|
||||
if (is_repository_shallow())
|
||||
write_shallow_commits(&req_buf, 1);
|
||||
write_shallow_commits(&req_buf, 1, NULL);
|
||||
if (args->depth > 0)
|
||||
packet_buf_write(&req_buf, "deepen %d", args->depth);
|
||||
packet_buf_flush(&req_buf);
|
||||
|
@ -850,7 +850,8 @@ static struct ref *do_fetch_pack(struct fetch_pack_args *args,
|
|||
if (args->stateless_rpc)
|
||||
packet_flush(fd[1]);
|
||||
if (args->depth > 0)
|
||||
setup_alternate_shallow(&shallow_lock, &alternate_shallow_file);
|
||||
setup_alternate_shallow(&shallow_lock, &alternate_shallow_file,
|
||||
NULL);
|
||||
else
|
||||
alternate_shallow_file = NULL;
|
||||
if (get_pack(args, fd, pack_lockfile))
|
||||
|
|
20
shallow.c
20
shallow.c
|
@ -165,22 +165,31 @@ static int write_one_shallow(const struct commit_graft *graft, void *cb_data)
|
|||
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;
|
||||
int i;
|
||||
data.out = out;
|
||||
data.use_pack_protocol = use_pack_protocol;
|
||||
data.count = 0;
|
||||
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;
|
||||
}
|
||||
|
||||
char *setup_temporary_shallow(void)
|
||||
char *setup_temporary_shallow(const struct sha1_array *extra)
|
||||
{
|
||||
struct strbuf sb = STRBUF_INIT;
|
||||
int fd;
|
||||
|
||||
if (write_shallow_commits(&sb, 0)) {
|
||||
if (write_shallow_commits(&sb, 0, extra)) {
|
||||
struct strbuf path = STRBUF_INIT;
|
||||
strbuf_addstr(&path, git_path("shallow_XXXXXX"));
|
||||
fd = xmkstemp(path.buf);
|
||||
|
@ -199,7 +208,8 @@ char *setup_temporary_shallow(void)
|
|||
}
|
||||
|
||||
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;
|
||||
int fd;
|
||||
|
@ -207,7 +217,7 @@ void setup_alternate_shallow(struct lock_file *shallow_lock,
|
|||
check_shallow_file_for_update();
|
||||
fd = hold_lock_file_for_update(shallow_lock, git_path("shallow"),
|
||||
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)
|
||||
die_errno("failed to write to %s",
|
||||
shallow_lock->filename);
|
||||
|
|
|
@ -84,7 +84,7 @@ static void create_pack_file(void)
|
|||
char *shallow_file = NULL;
|
||||
|
||||
if (shallow_nr) {
|
||||
shallow_file = setup_temporary_shallow();
|
||||
shallow_file = setup_temporary_shallow(NULL);
|
||||
argv[arg++] = "--shallow-file";
|
||||
argv[arg++] = shallow_file;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче