projects
/
git.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[PATCH] Require less in RPM spec
[git.git]
/
refs.c
diff --git
a/refs.c
b/refs.c
index
0a99dd1
..
1610180
100644
(file)
--- a/
refs.c
+++ b/
refs.c
@@
-3,10
+3,10
@@
#include <errno.h>
#include <errno.h>
-static int read_ref(const char *
path
, unsigned char *sha1)
+static int read_ref(const char *
refname
, unsigned char *sha1)
{
int ret = -1;
{
int ret = -1;
- int fd = open(
path
, O_RDONLY);
+ int fd = open(
git_path("%s", refname)
, O_RDONLY);
if (fd >= 0) {
char buffer[60];
if (fd >= 0) {
char buffer[60];
@@
-17,16
+17,23
@@
static int read_ref(const char *path, unsigned char *sha1)
return ret;
}
return ret;
}
-static int do_for_each_ref(const char *base, int (*fn)(const char *path, unsigned char *sha1))
+static int do_for_each_ref(const char *base, int (*fn)(const char *path,
const
unsigned char *sha1))
{
int retval = 0;
{
int retval = 0;
- DIR *dir = opendir(
base
);
+ DIR *dir = opendir(
git_path("%s", base)
);
if (dir) {
struct dirent *de;
int baselen = strlen(base);
char *path = xmalloc(baselen + 257);
if (dir) {
struct dirent *de;
int baselen = strlen(base);
char *path = xmalloc(baselen + 257);
+
+ if (!strncmp(base, "./", 2)) {
+ base += 2;
+ baselen -= 2;
+ }
memcpy(path, base, baselen);
memcpy(path, base, baselen);
+ if (baselen && base[baselen-1] != '/')
+ path[baselen++] = '/';
while ((de = readdir(dir)) != NULL) {
unsigned char sha1[20];
while ((de = readdir(dir)) != NULL) {
unsigned char sha1[20];
@@
-39,11
+46,9
@@
static int do_for_each_ref(const char *base, int (*fn)(const char *path, unsigne
if (namelen > 255)
continue;
memcpy(path + baselen, de->d_name, namelen+1);
if (namelen > 255)
continue;
memcpy(path + baselen, de->d_name, namelen+1);
- if (
lstat(path
, &st) < 0)
+ if (
stat(git_path("%s", path)
, &st) < 0)
continue;
if (S_ISDIR(st.st_mode)) {
continue;
if (S_ISDIR(st.st_mode)) {
- path[baselen + namelen] = '/';
- path[baselen + namelen + 1] = 0;
retval = do_for_each_ref(path, fn);
if (retval)
break;
retval = do_for_each_ref(path, fn);
if (retval)
break;
@@
-63,9
+68,17
@@
static int do_for_each_ref(const char *base, int (*fn)(const char *path, unsigne
return retval;
}
return retval;
}
-int for_each_ref(int (*fn)(const char *path, unsigned char *sha1))
+int head_ref(int (*fn)(const char *path, const unsigned char *sha1))
+{
+ unsigned char sha1[20];
+ if (!read_ref("HEAD", sha1))
+ return fn("HEAD", sha1);
+ return 0;
+}
+
+int for_each_ref(int (*fn)(const char *path, const unsigned char *sha1))
{
{
- return do_for_each_ref("refs
/
", fn);
+ return do_for_each_ref("refs", fn);
}
static char *ref_file_name(const char *ref)
}
static char *ref_file_name(const char *ref)