From 3125fe528b65c1e4a4f5f934d056af342ab5472d Mon Sep 17 00:00:00 2001 From: Nguyễn Thái Ngọc Duy Date: Fri, 16 Aug 2013 16:52:02 +0700 Subject: move setup_alternate_shallow and write_shallow_commits to shallow.c MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Nguyễn Thái Ngọc Duy Signed-off-by: Junio C Hamano --- commit.h | 3 +++ 1 file changed, 3 insertions(+) (limited to 'commit.h') diff --git a/commit.h b/commit.h index d912a9d4ac..790e31bec8 100644 --- a/commit.h +++ b/commit.h @@ -198,6 +198,9 @@ 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 void setup_alternate_shallow(struct lock_file *shallow_lock, + const char **alternate_shallow_file); int is_descendant_of(struct commit *, struct commit_list *); int in_merge_bases(struct commit *, struct commit *); -- cgit 1.2.3-korg From 08ea65ad13faaf24f57732cdc8af3d830d4b367f Mon Sep 17 00:00:00 2001 From: Nguyễn Thái Ngọc Duy Date: Fri, 16 Aug 2013 16:52:04 +0700 Subject: shallow: add setup_temporary_shallow() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Signed-off-by: Junio C Hamano --- commit.h | 1 + shallow.c | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+) (limited to 'commit.h') diff --git a/commit.h b/commit.h index 790e31bec8..c4d324c955 100644 --- a/commit.h +++ b/commit.h @@ -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 *); diff --git a/shallow.c b/shallow.c index 5f626c0138..cdf37d694d 100644 --- a/shallow.c +++ b/shallow.c @@ -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) { -- cgit 1.2.3-korg