Andrew's git
/
gitweb.git
/ diff
summary
|
log
|
commit
| diff |
tree
commit
grep
author
committer
pickaxe
?
re
Pass a (ref_cache *) to the resolve_gitlink_*() helper functions
author
Michael Haggerty
<mhagger@alum.mit.edu>
Mon, 12 Dec 2011 05:38:19 +0000
(06:38 +0100)
committer
Junio C Hamano
<gitster@pobox.com>
Mon, 12 Dec 2011 17:08:53 +0000
(09:08 -0800)
And remove some redundant arguments from resolve_gitlink_packed_ref().
Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
refs.c
patch
|
blob
|
history
raw
|
patch
|
inline
| side by side (parent:
7f820bd
)
diff --git
a/refs.c
b/refs.c
index 91ec3954b78d59000cad99fdeea2761d1f0831b4..bf1f1643383ffb4418078223a919ef62a9005c6e 100644
(file)
--- a/
refs.c
+++ b/
refs.c
@@
-413,30
+413,25
@@
static struct ref_array *get_loose_refs(struct ref_cache *refs)
/*
* Called by resolve_gitlink_ref_recursive() after it failed to read
/*
* Called by resolve_gitlink_ref_recursive() after it failed to read
- * from
"name", which is "module/.git/<refname>". Find <refname> in
- *
the
packed-refs file for the submodule.
+ * from
the loose refs in ref_cache refs. Find <refname> in the
+ * packed-refs file for the submodule.
*/
*/
-static int resolve_gitlink_packed_ref(
char *name, int pathlen
,
+static int resolve_gitlink_packed_ref(
struct ref_cache *refs
,
const char *refname, unsigned char *sha1)
{
const char *refname, unsigned char *sha1)
{
- int retval = -1;
struct ref_entry *ref;
struct ref_entry *ref;
- struct ref_array *array;
+ struct ref_array *array
= get_packed_refs(refs)
;
- /* being defensive: resolve_gitlink_ref() did this for us */
- if (pathlen < 6 || memcmp(name + pathlen - 6, "/.git/", 6))
- die("Oops");
- name[pathlen - 6] = '\0'; /* make it path to the submodule */
- array = get_packed_refs(get_ref_cache(name));
ref = search_ref_array(array, refname);
ref = search_ref_array(array, refname);
- if (ref
!= NULL) {
-
memcpy(sha1, ref->sha1, 20)
;
- retval = 0;
- }
- return
retval
;
+ if (ref
== NULL)
+
return -1
;
+
+ memcpy(sha1, ref->sha1, 20);
+ return
0
;
}
}
-static int resolve_gitlink_ref_recursive(char *name, int pathlen,
+static int resolve_gitlink_ref_recursive(struct ref_cache *refs,
+ char *name, int pathlen,
const char *refname, unsigned char *sha1,
int recursion)
{
const char *refname, unsigned char *sha1,
int recursion)
{
@@
-448,7
+443,7
@@
static int resolve_gitlink_ref_recursive(char *name, int pathlen,
memcpy(name + pathlen, refname, len+1);
fd = open(name, O_RDONLY);
if (fd < 0)
memcpy(name + pathlen, refname, len+1);
fd = open(name, O_RDONLY);
if (fd < 0)
- return resolve_gitlink_packed_ref(
name, pathlen
, refname, sha1);
+ return resolve_gitlink_packed_ref(
refs
, refname, sha1);
len = read(fd, buffer, sizeof(buffer)-1);
close(fd);
len = read(fd, buffer, sizeof(buffer)-1);
close(fd);
@@
-469,19
+464,24
@@
static int resolve_gitlink_ref_recursive(char *name, int pathlen,
while (isspace(*p))
p++;
while (isspace(*p))
p++;
- return resolve_gitlink_ref_recursive(name, pathlen, p, sha1, recursion+1);
+ return resolve_gitlink_ref_recursive(
refs,
name, pathlen, p, sha1, recursion+1);
}
int resolve_gitlink_ref(const char *path, const char *refname, unsigned char *sha1)
{
int len = strlen(path), retval;
}
int resolve_gitlink_ref(const char *path, const char *refname, unsigned char *sha1)
{
int len = strlen(path), retval;
- char *gitdir;
+ char *submodule, *gitdir;
+ struct ref_cache *refs;
const char *tmp;
while (len && path[len-1] == '/')
len--;
if (!len)
return -1;
const char *tmp;
while (len && path[len-1] == '/')
len--;
if (!len)
return -1;
+ submodule = xstrndup(path, len);
+ refs = get_ref_cache(submodule);
+ free(submodule);
+
gitdir = xmalloc(len + MAXREFLEN + 8);
memcpy(gitdir, path, len);
memcpy(gitdir + len, "/.git", 6);
gitdir = xmalloc(len + MAXREFLEN + 8);
memcpy(gitdir, path, len);
memcpy(gitdir + len, "/.git", 6);
@@
-496,7
+496,7
@@
int resolve_gitlink_ref(const char *path, const char *refname, unsigned char *sh
}
gitdir[len] = '/';
gitdir[++len] = '\0';
}
gitdir[len] = '/';
gitdir[++len] = '\0';
- retval = resolve_gitlink_ref_recursive(gitdir, len, refname, sha1, 0);
+ retval = resolve_gitlink_ref_recursive(
refs,
gitdir, len, refname, sha1, 0);
free(gitdir);
return retval;
}
free(gitdir);
return retval;
}