All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH, RFC] checkout: Attempt to checkout submodules
@ 2015-03-18 12:27 Trevor Saunders
  2015-03-19 18:53 ` Junio C Hamano
  0 siblings, 1 reply; 8+ messages in thread
From: Trevor Saunders @ 2015-03-18 12:27 UTC (permalink / raw)
  To: git; +Cc: Trevor Saunders

If a user does git checkout HEAD -- path/to/submodule they'd expect the
submodule to be checked out to the commit that submodule is at in HEAD.
This is the most brute force possible way of try to do that, and so its
probably broken in some cases.  However I'm not terribly familiar with
git's internals and I'm not sure if this is even wanted so I'm starting
simple.  If people want this to work I can try and do something better.

Signed-off-by: Trevor Saunders <tbsaunde@tbsaunde.org>
---
 entry.c | 22 ++++++++++++++++++++--
 1 file changed, 20 insertions(+), 2 deletions(-)

diff --git a/entry.c b/entry.c
index 1eda8e9..2dbf5b9 100644
--- a/entry.c
+++ b/entry.c
@@ -1,6 +1,8 @@
 #include "cache.h"
+#include "argv-array.h"
 #include "blob.h"
 #include "dir.h"
+#include "run-command.h"
 #include "streaming.h"
 
 static void create_directories(const char *path, int path_len,
@@ -277,9 +279,25 @@ int checkout_entry(struct cache_entry *ce,
 		 * just do the right thing)
 		 */
 		if (S_ISDIR(st.st_mode)) {
-			/* If it is a gitlink, leave it alone! */
-			if (S_ISGITLINK(ce->ce_mode))
+			if (S_ISGITLINK(ce->ce_mode)) {
+				struct argv_array args = ARGV_ARRAY_INIT;
+				char sha1[41];
+
+				argv_array_push(&args, "checkout");
+
+				if (state->force)
+					argv_array_push(&args, "-f");
+
+				memcpy(sha1, sha1_to_hex(ce->sha1), 41);
+				argv_array_push(&args, sha1);
+				
+				run_command_v_opt_cd_env(args.argv,
+					       		 RUN_GIT_CMD, ce->name,
+							 NULL);
+				argv_array_clear(&args);
+
 				return 0;
+			}
 			if (!state->force)
 				return error("%s is a directory", path.buf);
 			remove_subtree(&path);
-- 
2.1.4

^ permalink raw reply related	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2015-03-25 20:16 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-03-18 12:27 [PATCH, RFC] checkout: Attempt to checkout submodules Trevor Saunders
2015-03-19 18:53 ` Junio C Hamano
2015-03-19 20:15   ` Trevor Saunders
2015-03-19 21:15     ` Junio C Hamano
2015-03-20  0:13       ` Trevor Saunders
2015-03-23 20:01         ` Jens Lehmann
2015-03-24 18:30           ` Trevor Saunders
2015-03-25 20:16             ` Jens Lehmann

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.