From: Petr Baudis <pasky@suse.cz>
To: git@vger.kernel.org
Subject: [PATCH 4/7] submodule.*: Introduce simple C interface for submodule lookup by path
Date: Wed, 16 Jul 2008 21:11:24 +0200 [thread overview]
Message-ID: <20080716191123.19772.67813.stgit@localhost> (raw)
In-Reply-To: <20080716190753.19772.93357.stgit@localhost>
The interface will be used for git-mv and git-rm submodule support.
So far, only the submodule_by_path() function is defined, however more
can be probably expected in the future if/when the git-submodule command
is ported from shell.
Signed-off-by: Petr Baudis <pasky@suse.cz>
---
Makefile | 2 ++
submodule.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++
submodule.h | 8 ++++++++
3 files changed, 60 insertions(+), 0 deletions(-)
create mode 100644 submodule.c
create mode 100644 submodule.h
diff --git a/Makefile b/Makefile
index 9b52071..742b5cb 100644
--- a/Makefile
+++ b/Makefile
@@ -368,6 +368,7 @@ LIB_H += run-command.h
LIB_H += sha1-lookup.h
LIB_H += sideband.h
LIB_H += strbuf.h
+LIB_H += submodule.h
LIB_H += tag.h
LIB_H += transport.h
LIB_H += tree.h
@@ -458,6 +459,7 @@ LIB_OBJS += sha1_name.o
LIB_OBJS += shallow.o
LIB_OBJS += sideband.o
LIB_OBJS += strbuf.o
+LIB_OBJS += submodule.o
LIB_OBJS += symlinks.o
LIB_OBJS += tag.o
LIB_OBJS += trace.o
diff --git a/submodule.c b/submodule.c
new file mode 100644
index 0000000..2883ae6
--- /dev/null
+++ b/submodule.c
@@ -0,0 +1,50 @@
+#include "cache.h"
+#include "submodule.h"
+
+
+struct gitmodules_info {
+ const char *path;
+ char *key;
+};
+
+static int gitmodules_worker(const char *key, const char *value, void *info_)
+{
+ struct gitmodules_info *info = info_;
+ const char *subkey;
+
+ if (prefixcmp(key, "submodule."))
+ return 0;
+
+ subkey = strrchr(key, '.');
+ if (!subkey)
+ return 0;
+
+ if (strcmp(subkey, ".path"))
+ return 0;
+
+ if (strcmp(value, info->path))
+ return 0;
+
+ /* Found the key to change. */
+ if (info->key) {
+ error("multiple submodules live at path `%s'", info->path);
+ /* The last one is supposed to win. */
+ free(info->key);
+ }
+ info->key = xstrdup(key);
+ return 0;
+}
+
+char *submodule_by_path(const char *path)
+{
+ struct gitmodules_info info = { path, NULL };
+
+ config_exclusive_filename = ".gitmodules";
+ if (git_config(gitmodules_worker, &info))
+ die("cannot process .gitmodules");
+ if (!info.key)
+ die("the submodule of `%s' not found in .gitmodules", path);
+ config_exclusive_filename = NULL;
+
+ return info.key;
+}
diff --git a/submodule.h b/submodule.h
new file mode 100644
index 0000000..bc74fa0
--- /dev/null
+++ b/submodule.h
@@ -0,0 +1,8 @@
+#ifndef SUBMODULE_H
+#define SUBMODULE_H
+
+/* Find submodule living at given path in .gitmodules and return the key
+ * of its path config variable (dynamically allocated). */
+extern char *submodule_by_path(const char *path);
+
+#endif
next prev parent reply other threads:[~2008-07-16 19:12 UTC|newest]
Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-07-16 19:11 [RFC][PATCH 0/7] Submodule support in git mv, git rm Petr Baudis
2008-07-16 19:11 ` [PATCH 1/7] git-mv: Remove dead code branch Petr Baudis
2008-07-16 19:11 ` [PATCH 2/7] t7400: Add short "git submodule add" testsuite Petr Baudis
2008-07-16 19:11 ` [PATCH 3/7] git submodule add: Fix naming clash handling Petr Baudis
2008-07-16 19:11 ` Petr Baudis [this message]
2008-07-16 19:11 ` [PATCH 5/7] git mv: Support moving submodules Petr Baudis
2008-07-17 2:37 ` Junio C Hamano
2008-07-17 13:06 ` Petr Baudis
2008-07-17 22:31 ` [PATCH] git-mv: Keep moved index entries inact Petr Baudis
2008-07-17 22:34 ` [PATCH] git mv: Support moving submodules Petr Baudis
2008-07-19 23:54 ` [PATCH] git-mv: Keep moved index entries inact Junio C Hamano
2008-07-21 0:23 ` Petr Baudis
2008-07-21 0:25 ` [PATCHv2] " Petr Baudis
2008-07-21 4:36 ` Junio C Hamano
2008-07-26 6:46 ` Junio C Hamano
2008-07-27 13:41 ` Petr Baudis
2008-07-27 13:47 ` [PATCH] t/t7001-mv.sh: Propose ability to use git-mv on conflicting entries Petr Baudis
2008-07-28 1:13 ` Junio C Hamano
2008-07-28 1:21 ` Junio C Hamano
2008-07-28 14:20 ` [PATCHv2] git-mv: Keep moved index entries inact SZEDER Gábor
2008-07-28 15:06 ` Johannes Schindelin
2008-07-28 15:14 ` Johannes Schindelin
2008-07-28 18:24 ` Johannes Schindelin
2008-07-28 19:19 ` Junio C Hamano
2008-07-28 23:41 ` Johannes Schindelin
2008-07-28 23:55 ` Johannes Schindelin
2008-07-29 0:17 ` Petr Baudis
2008-07-29 0:46 ` Junio C Hamano
2008-07-29 5:23 ` Junio C Hamano
2008-08-04 7:49 ` Not going beyond symbolic links Junio C Hamano
2008-08-04 7:51 ` [PATCH 1/2] update-index: refuse to add working tree items beyond symlinks Junio C Hamano
2008-08-04 7:52 ` [PATCH 2/2] add: " Junio C Hamano
2008-08-05 0:21 ` Not going beyond symbolic links Linus Torvalds
2008-08-05 0:54 ` Junio C Hamano
2008-08-05 1:43 ` Linus Torvalds
2008-08-05 1:59 ` Johannes Schindelin
2008-08-05 2:28 ` Linus Torvalds
2008-08-05 6:11 ` Junio C Hamano
2008-08-05 12:54 ` Dmitry Potapov
2008-08-05 23:57 ` Junio C Hamano
2008-08-05 17:15 ` Linus Torvalds
2008-08-05 4:44 ` Junio C Hamano
2008-08-05 11:23 ` Johannes Schindelin
2008-08-05 3:01 ` Junio C Hamano
2008-08-05 3:04 ` david
2008-08-07 6:52 ` Junio C Hamano
2008-08-08 1:45 ` [PATCH] powerpc: Do not ignore arch/powerpc/include Junio C Hamano
2008-08-08 3:13 ` Stephen Rothwell
2008-08-08 20:55 ` Not going beyond symbolic links Junio C Hamano
2008-08-08 23:45 ` Linus Torvalds
2008-07-21 1:20 ` [PATCH] git-mv: Keep moved index entries inact Johannes Schindelin
2008-07-21 7:18 ` Petr Baudis
2008-07-21 7:38 ` Junio C Hamano
2008-07-16 19:11 ` [PATCH 6/7] git rm: Support for removing submodules Petr Baudis
2008-07-16 22:41 ` Johannes Schindelin
2008-07-17 12:35 ` Petr Baudis
2008-07-17 12:59 ` Johannes Schindelin
2008-07-16 19:11 ` [PATCH 7/7] t7403: Submodule git mv, git rm testsuite Petr Baudis
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=20080716191123.19772.67813.stgit@localhost \
--to=pasky@suse.cz \
--cc=git@vger.kernel.org \
/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.