diff options
author | Nguyễn Thái Ngọc Duy <pclouds@gmail.com> | 2013-08-16 13:52:04 +0400 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2013-08-28 22:51:54 +0400 |
commit | 08ea65ad13faaf24f57732cdc8af3d830d4b367f (patch) | |
tree | c1143ed482a92214c09223fd32914292e4db1dd7 | |
parent | 6a3bbb4db409c5417960ffd3f020f75e0cb36f81 (diff) |
shallow: add setup_temporary_shallow()
This function is like setup_alternate_shallow() except that it does
not lock $GIT_DIR/shallow. It is supposed to be used when a program
generates temporary shallow for use by another program, then throw
the shallow file away.
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r-- | commit.h | 1 | ||||
-rw-r--r-- | shallow.c | 23 |
2 files changed, 24 insertions, 0 deletions
@@ -201,6 +201,7 @@ extern void set_alternate_shallow_file(const char *path); extern int write_shallow_commits(struct strbuf *out, int use_pack_protocol); extern void setup_alternate_shallow(struct lock_file *shallow_lock, const char **alternate_shallow_file); +extern char *setup_temporary_shallow(void); int is_descendant_of(struct commit *, struct commit_list *); int in_merge_bases(struct commit *, struct commit *); @@ -175,6 +175,29 @@ int write_shallow_commits(struct strbuf *out, int use_pack_protocol) return data.count; } +char *setup_temporary_shallow(void) +{ + struct strbuf sb = STRBUF_INIT; + int fd; + + if (write_shallow_commits(&sb, 0)) { + struct strbuf path = STRBUF_INIT; + strbuf_addstr(&path, git_path("shallow_XXXXXX")); + fd = xmkstemp(path.buf); + if (write_in_full(fd, sb.buf, sb.len) != sb.len) + die_errno("failed to write to %s", + path.buf); + close(fd); + strbuf_release(&sb); + return strbuf_detach(&path, NULL); + } + /* + * is_repository_shallow() sees empty string as "no shallow + * file". + */ + return xstrdup(""); +} + void setup_alternate_shallow(struct lock_file *shallow_lock, const char **alternate_shallow_file) { |