From: skimo@liacs.nl
To: git@vger.kernel.org, Junio C Hamano <junkio@cox.net>
Subject: [PATCH 09/16] entry.c: optionally checkout submodules
Date: Fri, 18 May 2007 21:24:58 +0200 [thread overview]
Message-ID: <1179516307425-git-send-email-skimo@liacs.nl> (raw)
In-Reply-To: <11795163053812-git-send-email-skimo@liacs.nl>
From: Sven Verdoolaege <skimo@kotnet.org>
Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
---
entry.c | 42 ++++++++++++++++++++++++++++++++++++++++--
1 files changed, 40 insertions(+), 2 deletions(-)
diff --git a/entry.c b/entry.c
index 82bf725..96a4a60 100644
--- a/entry.c
+++ b/entry.c
@@ -1,5 +1,6 @@
#include "cache.h"
#include "blob.h"
+#include "run-command.h"
static void create_directories(const char *path, const struct checkout *state)
{
@@ -163,6 +164,44 @@ static int write_entry(struct cache_entry *ce, char *path, const struct checkout
return 0;
}
+static int checkout_submodule(const char *path, struct cache_entry *ce, const struct checkout *state)
+{
+ static char cwd[PATH_MAX];
+ const char *gitdirenv;
+ const char *args[10];
+ int argc;
+ int err;
+
+ if (!state->submodules)
+ return 0;
+
+ if (!getcwd(cwd, sizeof(cwd)) || cwd[0] != '/')
+ die("Unable to read current working directory");
+
+ if (chdir(path))
+ die("Cannot move to '%s'", path);
+
+ argc = 0;
+ args[argc++] = "checkout";
+ if (state->force)
+ args[argc++] = "-f";
+ args[argc++] = sha1_to_hex(ce->sha1);
+ args[argc] = NULL;
+
+ gitdirenv = getenv(GIT_DIR_ENVIRONMENT);
+ unsetenv(GIT_DIR_ENVIRONMENT);
+ err = run_command_v_opt(args, RUN_GIT_CMD);
+ setenv(GIT_DIR_ENVIRONMENT, gitdirenv, 1);
+
+ if (chdir(cwd))
+ die("Cannot come back to cwd");
+
+ if (err)
+ return error("failed to run git-checkout in submodule '%s'", path);
+
+ return 0;
+}
+
int checkout_entry(struct cache_entry *ce, const struct checkout *state, char *topath)
{
static char path[PATH_MAX + 1];
@@ -193,9 +232,8 @@ int checkout_entry(struct cache_entry *ce, const struct checkout *state, char *t
*/
unlink(path);
if (S_ISDIR(st.st_mode)) {
- /* If it is a gitlink, leave it alone! */
if (S_ISDIRLNK(ntohl(ce->ce_mode)))
- return 0;
+ return checkout_submodule(path, ce, state);
if (!state->force)
return error("%s is a directory", path);
remove_subtree(path);
--
1.5.2.rc3.783.gc7476-dirty
next prev parent reply other threads:[~2007-05-18 19:25 UTC|newest]
Thread overview: 63+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-05-18 19:24 Second round of support for cloning submodules skimo
2007-05-18 19:24 ` [PATCH 01/16] Add dump-config skimo
2007-05-18 19:24 ` [PATCH 02/16] git-config: add --remote option for reading config from remote repo skimo
2007-05-18 19:24 ` [PATCH 03/16] http.h: make fill_active_slots a function pointer skimo
2007-05-18 19:24 ` [PATCH 04/16] git-config: read remote config files over HTTP skimo
2007-05-18 19:24 ` [PATCH 05/16] unpack-trees.c: verify_uptodate: remove dead code skimo
2007-05-18 22:33 ` Junio C Hamano
2007-05-18 19:24 ` [PATCH 06/16] unpack-trees.c: pass cache_entry * to verify_absent rather than just the name skimo
2007-05-18 19:24 ` [PATCH 07/16] git-read-tree: take --submodules option skimo
2007-05-18 21:53 ` Alex Riesen
2007-05-18 22:08 ` Sven Verdoolaege
2007-05-18 22:42 ` Alex Riesen
2007-05-19 3:59 ` Junio C Hamano
2007-05-19 4:27 ` Shawn O. Pearce
2007-05-19 9:19 ` Alex Riesen
2007-05-19 13:05 ` Sven Verdoolaege
2007-05-19 18:20 ` Junio C Hamano
2007-05-20 15:54 ` Jan Hudec
2007-05-20 18:33 ` Junio C Hamano
2007-05-20 20:22 ` Sven Verdoolaege
2007-05-21 16:59 ` Jan Hudec
2007-05-21 18:05 ` Sven Verdoolaege
2007-05-21 19:01 ` Junio C Hamano
2007-05-21 20:02 ` Jan Hudec
2007-05-21 21:11 ` Martin Waitz
2007-05-22 19:37 ` Jan Hudec
2007-05-24 15:48 ` Martin Waitz
2007-05-25 10:06 ` Jakub Narebski
2007-05-25 20:15 ` Jan Hudec
2007-05-24 18:26 ` Junio C Hamano
2007-05-24 18:45 ` Sven Verdoolaege
2007-05-24 18:58 ` Junio C Hamano
2007-05-24 19:14 ` Sven Verdoolaege
2007-05-24 20:32 ` Junio C Hamano
2007-05-24 20:55 ` Petr Baudis
2007-05-24 20:59 ` Junio C Hamano
2007-05-24 19:43 ` Junio C Hamano
2007-05-24 20:57 ` Petr Baudis
2007-05-25 20:35 ` Jan Hudec
2007-05-25 21:05 ` Junio C Hamano
2007-05-25 21:16 ` Steven Grimm
2007-05-25 22:11 ` Junio C Hamano
2007-05-19 0:34 ` Petr Baudis
2007-05-18 19:24 ` [PATCH 08/16] unpack-trees.c: assume submodules are clean skimo
2007-05-18 19:24 ` skimo [this message]
2007-05-18 21:56 ` [PATCH 09/16] entry.c: optionally checkout submodules Alex Riesen
2007-05-18 22:03 ` Sven Verdoolaege
2007-05-18 22:33 ` Alex Riesen
2007-05-18 22:00 ` Alex Riesen
2007-05-18 22:20 ` [PATCH] Add run_command_v_opt_cd: chdir into a directory before exec Alex Riesen
2007-05-18 22:48 ` [PATCH] Use run_command_v_opt_cd when checking out a submodule Alex Riesen
2007-05-18 19:24 ` [PATCH 10/16] git-checkout: pass --submodules option to git-read-tree skimo
2007-05-19 0:36 ` Petr Baudis
2007-05-18 19:25 ` [PATCH 11/16] git-fetch: skip empty arguments skimo
2007-05-18 22:33 ` Junio C Hamano
2007-05-18 19:25 ` [PATCH 12/16] builtin-fetch--tool: extend "native-store" for use in cloning skimo
2007-05-18 22:52 ` Alex Riesen
2007-05-19 12:17 ` Sven Verdoolaege
2007-05-18 19:25 ` [PATCH 13/16] git-clone: rely on git-fetch for fetching for most protocols skimo
2007-05-18 19:25 ` [PATCH 14/16] git-clone: rely on git-fetch for non-bare fetching over http skimo
2007-05-18 19:25 ` [PATCH 15/16] git-read-tree: treat null commit as empty tree skimo
2007-05-18 19:25 ` [PATCH 16/16] git-clone: add --submodules for cloning submodules skimo
2007-05-18 19:34 ` Second round of support " Sven Verdoolaege
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=1179516307425-git-send-email-skimo@liacs.nl \
--to=skimo@liacs.nl \
--cc=git@vger.kernel.org \
--cc=junkio@cox.net \
/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.