git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 04/20] path.c: add is_git_path_shared()

From
Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Date
Feb 3, 2016, 09:35 UTC
Message-ID
<1454492150-10628-5-git-send-email-pclouds@gmail.com>
In-Reply-To
<1454492150-10628-1-git-send-email-pclouds@gmail.com>
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
 cache.h |  2 ++
 path.c  | 27 ++++++++++++++++++++++-----
 2 files changed, 24 insertions(+), 5 deletions(-)
diff --git a/cache.h b/cache.h
index ec71181..c75d13f 100644
--- a/cache.h
+++ b/cache.h
@@ -748,6 +748,8 @@ extern int check_repository_format(void);
 extern const char *mkpath(const char *fmt, ...) __attribute__((format (printf, 1, 2)));
 extern const char *git_path(const char *fmt, ...) __attribute__((format (printf, 1, 2)));
 extern const char *git_common_path(const char *fmt, ...) __attribute__((format (printf, 1, 2)));
+extern int is_git_path_shared(const char *path);
+
 
 extern char *mksnpath(char *buf, size_t n, const char *fmt, ...)
 	__attribute__((format (printf, 3, 4)));
diff --git a/path.c b/path.c
index 08ff346..9e350e7 100644
--- a/path.c
+++ b/path.c
@@ -335,15 +335,18 @@ static int check_common(const char *unmatched, void *value, void *baton)
 	return 0;
 }
 
-static void update_common_dir(struct strbuf *buf, int git_dir_len,
-			      const char *common_dir)
+static int update_common_dir(struct strbuf *buf, int git_dir_len,
+			     const char *common_dir)
 {
 	char *base = buf->buf + git_dir_len;
 	init_common_trie();
 	if (!common_dir)
 		common_dir = get_git_common_dir();
-	if (trie_find(&common_trie, base, check_common, NULL) > 0)
+	if (trie_find(&common_trie, base, check_common, NULL) > 0) {
 		replace_dir(buf, git_dir_len, common_dir);
+		return 1;
+	}
+	return 0;
 }
 
 void report_linked_checkout_garbage(void)
@@ -368,7 +371,7 @@ void report_linked_checkout_garbage(void)
 	strbuf_release(&sb);
 }
 
-static void adjust_git_path(struct strbuf *buf, int git_dir_len)
+static int adjust_git_path(struct strbuf *buf, int git_dir_len)
 {
 	const char *base = buf->buf + git_dir_len;
 	if (git_graft_env && is_dir_file(base, "info", "grafts"))
@@ -380,7 +383,10 @@ static void adjust_git_path(struct strbuf *buf, int git_dir_len)
 	else if (git_db_env && dir_prefix(base, "objects"))
 		replace_dir(buf, git_dir_len + 7, get_object_directory());
 	else if (git_common_dir_env)
-		update_common_dir(buf, git_dir_len, NULL);
+		return update_common_dir(buf, git_dir_len, NULL);
+	else
+		return 0;
+	return 1;
 }
 
 static void do_git_path(struct strbuf *buf, const char *fmt, va_list args)
@@ -532,6 +538,17 @@ void strbuf_git_common_path(struct strbuf *sb, const char *fmt, ...)
 	va_end(args);
 }
 
+int is_git_path_shared(const char *path)
+{
+	struct strbuf buf = STRBUF_INIT;
+	int ret;
+
+	strbuf_addf(&buf, ".git/%s", path);
+	ret = adjust_git_path(&buf, 5);
+	strbuf_release(&buf);
+	return ret;
+}
+
 int validate_headref(const char *path)
 {
 	struct stat st;
-- 
2.7.0.377.g4cd97dd
Previous: Nguyễn Thái Ngọc DuyNext: Nguyễn Thái Ngọc Duy
Message 5 of 50 in “"git worktree move" preview”
  1. 00/20 "git worktree move" previewNguyễn Thái Ngọc Duy, Feb 3, 2016
  2. 01/20 usage.c: move format processing out of die_errno()Nguyễn Thái Ngọc Duy, Feb 3, 2016
  3. 02/20 usage.c: add sys_error() that prints strerror() automaticallyNguyễn Thái Ngọc Duy, Feb 3, 2016
  4. 03/20 path.c: add git_common_path() and strbuf_git_common_path()Nguyễn Thái Ngọc Duy, Feb 3, 2016
  5. 04/20 path.c: add is_git_path_shared()Nguyễn Thái Ngọc Duy, Feb 3, 2016
  6. 05/20 copy.c: add copy_dir_recursively()Nguyễn Thái Ngọc Duy, Feb 3, 2016
  7. 06/20 worktree.c: use is_dot_or_dotdot()Nguyễn Thái Ngọc Duy, Feb 3, 2016
  8. 07/20 worktree.c: store "id" instead of "git_dir"Nguyễn Thái Ngọc Duy, Feb 3, 2016
  9. 08/20 worktree.c: add clear_worktree()Nguyễn Thái Ngọc Duy, Feb 3, 2016
  10. 09/20 worktree.c: add find_worktree_by_path()Nguyễn Thái Ngọc Duy, Feb 3, 2016
  11. 10/20 worktree.c: add is_main_worktree()Nguyễn Thái Ngọc Duy, Feb 3, 2016
  12. 11/20 worktree.c: recognize no main worktreeNguyễn Thái Ngọc Duy, Feb 3, 2016
  13. 12/20 worktree.c: add update_worktree_location()Nguyễn Thái Ngọc Duy, Feb 3, 2016
  14. 13/20 worktree.c: add update_worktree_gitfile()Nguyễn Thái Ngọc Duy, Feb 3, 2016
  15. 14/20 worktree.c: add collect_per_worktree_git_paths()Nguyễn Thái Ngọc Duy, Feb 3, 2016
  16. 15/20 worktree: avoid 0{40}, too many zeroes, hard to readNguyễn Thái Ngọc Duy, Feb 3, 2016
  17. 16/20 worktree: simplify prefixing pathsNguyễn Thái Ngọc Duy, Feb 3, 2016
  18. 17/20 worktree: add "move" commmandNguyễn Thái Ngọc Duy, Feb 3, 2016
  19. 18/20 worktree: refactor add_worktree()Nguyễn Thái Ngọc Duy, Feb 3, 2016
  20. 19/20 worktree: move repo, simple caseNguyễn Thái Ngọc Duy, Feb 3, 2016
  21. 20/20 worktree: move repo, convert main worktreeNguyễn Thái Ngọc Duy, Feb 3, 2016
  22. 00/26 worktree lock, move, remove and unlockNguyễn Thái Ngọc Duy, Feb 16, 2016
  23. 01/26 usage.c: move format processing out of die_errno()Nguyễn Thái Ngọc Duy, Feb 16, 2016
  24. 02/26 usage.c: add sys_error() that prints strerror() automaticallyNguyễn Thái Ngọc Duy, Feb 16, 2016
  25. 03/26 copy.c: import copy_file() from busyboxNguyễn Thái Ngọc Duy, Feb 16, 2016
  26. 04/26 copy.c: delete unused code in copy_file()Nguyễn Thái Ngọc Duy, Feb 16, 2016
  27. 05/26 copy.c: convert bb_(p)error_msg to (sys_)errorNguyễn Thái Ngọc Duy, Feb 16, 2016
  28. 06/26 copy.c: style fixNguyễn Thái Ngọc Duy, Feb 16, 2016
  29. 07/26 copy.c: convert copy_file() to copy_dir_recursively()Nguyễn Thái Ngọc Duy, Feb 16, 2016
  30. 08/26 completion: support git-worktreeNguyễn Thái Ngọc Duy, Feb 16, 2016
  31. 09/26 git-worktree.txt: keep subcommand listing in alphabetical orderNguyễn Thái Ngọc Duy, Feb 16, 2016
  32. 10/26 wrapper.c: allow to create an empty file with write_file()Nguyễn Thái Ngọc Duy, Feb 16, 2016
  33. Junio C HamanoFeb 17, 2016
  34. Duy NguyenFeb 18, 2016
  35. 11/26 path.c: add git_common_path() and strbuf_git_common_path()Nguyễn Thái Ngọc Duy, Feb 16, 2016
  36. 12/26 worktree.c: use is_dot_or_dotdot()Nguyễn Thái Ngọc Duy, Feb 16, 2016
  37. 13/26 worktree.c: store "id" instead of "git_dir"Nguyễn Thái Ngọc Duy, Feb 16, 2016
  38. 14/26 worktree.c: add clear_worktree()Nguyễn Thái Ngọc Duy, Feb 16, 2016
  39. 15/26 worktree.c: add find_worktree_by_path()Nguyễn Thái Ngọc Duy, Feb 16, 2016
  40. 16/26 worktree.c: add is_main_worktree()Nguyễn Thái Ngọc Duy, Feb 16, 2016
  41. 17/26 worktree.c: add validate_worktree()Nguyễn Thái Ngọc Duy, Feb 16, 2016
  42. 18/26 worktree.c: add update_worktree_location()Nguyễn Thái Ngọc Duy, Feb 16, 2016
  43. 19/26 worktree.c: add is_worktree_locked()Nguyễn Thái Ngọc Duy, Feb 16, 2016
  44. 20/26 worktree: avoid 0{40}, too many zeroes, hard to readNguyễn Thái Ngọc Duy, Feb 16, 2016
  45. 21/26 worktree: simplify prefixing pathsNguyễn Thái Ngọc Duy, Feb 16, 2016
  46. 22/26 worktree: add "lock" commandNguyễn Thái Ngọc Duy, Feb 16, 2016
  47. 23/26 worktree: add "unlock" commandNguyễn Thái Ngọc Duy, Feb 16, 2016
  48. 24/26 worktree: add "move" commmandNguyễn Thái Ngọc Duy, Feb 16, 2016
  49. 25/26 worktree move: accept destination as directoryNguyễn Thái Ngọc Duy, Feb 16, 2016
  50. 26/26 worktree: add "remove" commandNguyễn Thái Ngọc Duy, Feb 16, 2016

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.