From: "Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
To: git@vger.kernel.org
Cc: Jeff King <peff@peff.net>, Rafael Ascensao <rafa.almas@gmail.com>,
Duy Nguyen <pclouds@gmail.com>
Subject: [PATCH 4/8] setup.c: introduce setup_adjust_path()
Date: Wed, 28 Mar 2018 19:55:33 +0200 [thread overview]
Message-ID: <20180328175537.17450-5-pclouds@gmail.com> (raw)
In-Reply-To: <20180328175537.17450-1-pclouds@gmail.com>
From: Duy Nguyen <pclouds@gmail.com>
When $CWD is moved, relative path must be updated to be relative to
the new $CWD. This function helps do that. The _in_place version is
just for convenient (and we will use it quite often in subsequent
patches).
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
cache.h | 3 +++
setup.c | 20 ++++++++++++++++++++
2 files changed, 23 insertions(+)
diff --git a/cache.h b/cache.h
index bbaf5c349a..05f32c9659 100644
--- a/cache.h
+++ b/cache.h
@@ -522,6 +522,9 @@ extern void set_git_work_tree(const char *tree);
#define ALTERNATE_DB_ENVIRONMENT "GIT_ALTERNATE_OBJECT_DIRECTORIES"
+extern void setup_adjust_path(const char *name, char **path,
+ const char *old_cwd,
+ const char *new_cwd);
extern void setup_work_tree(void);
/*
* Find the commondir and gitdir of the repository that contains the current
diff --git a/setup.c b/setup.c
index 664453fcef..e26f44185e 100644
--- a/setup.c
+++ b/setup.c
@@ -376,6 +376,26 @@ int is_inside_work_tree(void)
return inside_work_tree;
}
+void setup_adjust_path(const char *name, char **path,
+ const char *old_cwd,
+ const char *new_cwd)
+{
+ char *old_path = *path;
+ struct strbuf sb = STRBUF_INIT;
+
+ if (!old_path || is_absolute_path(old_path))
+ return;
+
+ strbuf_addstr(&sb, old_cwd);
+ strbuf_ensure_trailing_dir_sep(&sb);
+ strbuf_addstr(&sb, old_path);
+ *path = xstrdup(remove_leading_path(sb.buf, new_cwd));
+ trace_printf_key(&trace_setup_key, "setup: adjust '%s' to %s",
+ name, *path);
+ strbuf_release(&sb);
+ free(old_path);
+}
+
void setup_work_tree(void)
{
const char *work_tree, *git_dir;
--
2.17.0.rc1.439.gca064e2955
next prev parent reply other threads:[~2018-03-28 17:56 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-03-26 21:27 git complains packed-refs is not a directory when used with GIT_DIR and GIT_WORK_TREE envvars Rafael Ascensao
2018-03-26 21:44 ` Ævar Arnfjörð Bjarmason
2018-03-27 6:31 ` Jeff King
2018-03-27 14:56 ` Duy Nguyen
2018-03-27 16:47 ` Jeff King
2018-03-27 17:09 ` Duy Nguyen
2018-03-27 17:30 ` Duy Nguyen
2018-03-28 9:52 ` Jeff King
2018-03-28 10:10 ` Duy Nguyen
2018-03-28 17:36 ` Jeff King
2018-03-28 17:38 ` [PATCH 1/4] set_git_dir: die when setenv() fails Jeff King
2018-03-28 17:40 ` [PATCH 2/4] add chdir-notify API Jeff King
2018-03-28 17:58 ` Eric Sunshine
2018-03-28 18:02 ` Jeff King
2018-03-29 14:53 ` Duy Nguyen
2018-03-29 17:48 ` Jeff King
2018-03-29 18:12 ` Duy Nguyen
2018-03-28 17:42 ` [PATCH 3/4] set_work_tree: use chdir_notify Jeff King
2018-03-29 17:02 ` Duy Nguyen
2018-03-29 17:23 ` Duy Nguyen
2018-03-29 17:50 ` Jeff King
2018-03-29 17:50 ` Jeff King
2018-03-29 18:01 ` Duy Nguyen
2018-03-30 17:23 ` Jeff King
2018-03-28 17:43 ` [PATCH 4/4] refs: use chdir_notify to update cached relative paths Jeff King
2018-03-30 18:34 ` [PATCH v2 0/5] re-parenting relative directories after chdir Jeff King
2018-03-30 18:34 ` [PATCH v2 1/5] set_git_dir: die when setenv() fails Jeff King
2018-03-30 18:34 ` [PATCH v2 2/5] trace.c: export trace_setup_key Jeff King
2018-03-30 19:46 ` Junio C Hamano
2018-03-30 19:47 ` Jeff King
2018-03-30 19:50 ` Junio C Hamano
2018-03-30 19:54 ` Jeff King
2018-03-30 18:35 ` [PATCH v2 3/5] add chdir-notify API Jeff King
2018-03-30 18:35 ` [PATCH v2 4/5] set_work_tree: use chdir_notify Jeff King
2018-03-30 18:35 ` [PATCH v2 5/5] refs: use chdir_notify to update cached relative paths Jeff King
2018-03-30 19:36 ` [PATCH v2 0/5] re-parenting relative directories after chdir Duy Nguyen
2018-03-28 9:47 ` git complains packed-refs is not a directory when used with GIT_DIR and GIT_WORK_TREE envvars Jeff King
2018-03-28 17:55 ` [PATCH 0/8] " Nguyễn Thái Ngọc Duy
2018-03-28 17:55 ` [PATCH 1/8] strbuf.c: add strbuf_ensure_trailing_dr_sep() Nguyễn Thái Ngọc Duy
2018-03-28 17:55 ` [PATCH 2/8] strbuf.c: reintroduce get_pwd_cwd() (with strbuf_ prefix) Nguyễn Thái Ngọc Duy
2018-03-28 18:02 ` Stefan Beller
2018-03-28 18:05 ` Duy Nguyen
2018-03-28 17:55 ` [PATCH 3/8] trace.c: export trace_setup_key Nguyễn Thái Ngọc Duy
2018-03-28 17:55 ` Nguyễn Thái Ngọc Duy [this message]
2018-03-28 17:55 ` [PATCH 5/8] setup.c: allow other code to be notified when $CWD moves Nguyễn Thái Ngọc Duy
2018-03-28 17:55 ` [PATCH 6/8] environment.c: adjust env containing relpath when $CWD is moved Nguyễn Thái Ngọc Duy
2018-03-28 18:30 ` Jeff King
2018-03-28 18:45 ` Duy Nguyen
2018-03-28 17:55 ` [PATCH 7/8] repository: adjust repo paths when $CWD moves Nguyễn Thái Ngọc Duy
2018-03-28 17:55 ` [PATCH 8/8] refs: adjust main " Nguyễn Thái Ngọc Duy
2018-03-28 18:19 ` [PATCH 0/8] Re: git complains packed-refs is not a directory when used with GIT_DIR and GIT_WORK_TREE envvars Jeff King
2018-03-29 14:57 ` Duy Nguyen
2018-03-30 17:21 ` Jeff King
2018-03-28 22:24 ` Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180328175537.17450-5-pclouds@gmail.com \
--to=pclouds@gmail.com \
--cc=git@vger.kernel.org \
--cc=peff@peff.net \
--cc=rafa.almas@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.