Browse Source

Merge branch 'jc/fetch-sorted'

* jc/fetch-sorted:
  fetch-pack: output refs in the order they were given on the command line.
maint
Junio C Hamano 19 years ago
parent
commit
2464294498
  1. 2
      connect.c
  2. 66
      fetch-pack.c

2
connect.c

@ -100,7 +100,7 @@ int path_match(const char *path, int nr, char **match) @@ -100,7 +100,7 @@ int path_match(const char *path, int nr, char **match)
if (pathlen > len && path[pathlen - len - 1] != '/')
continue;
*s = 0;
return 1;
return (i + 1);
}
return 0;
}

66
fetch-pack.c

@ -262,22 +262,58 @@ static void mark_recent_complete_commits(unsigned long cutoff) @@ -262,22 +262,58 @@ static void mark_recent_complete_commits(unsigned long cutoff)

static void filter_refs(struct ref **refs, int nr_match, char **match)
{
struct ref *prev, *current, *next;

for (prev = NULL, current = *refs; current; current = next) {
next = current->next;
if ((!memcmp(current->name, "refs/", 5) &&
check_ref_format(current->name + 5)) ||
(!fetch_all &&
!path_match(current->name, nr_match, match))) {
if (prev == NULL)
*refs = next;
else
prev->next = next;
free(current);
} else
prev = current;
struct ref **return_refs;
struct ref *newlist = NULL;
struct ref **newtail = &newlist;
struct ref *ref, *next;
struct ref *fastarray[32];

if (nr_match && !fetch_all) {
if (ARRAY_SIZE(fastarray) < nr_match)
return_refs = xcalloc(nr_match, sizeof(struct ref *));
else {
return_refs = fastarray;
memset(return_refs, 0, sizeof(struct ref *) * nr_match);
}
}
else
return_refs = NULL;

for (ref = *refs; ref; ref = next) {
next = ref->next;
if (!memcmp(ref->name, "refs/", 5) &&
check_ref_format(ref->name + 5))
; /* trash */
else if (fetch_all) {
*newtail = ref;
ref->next = NULL;
newtail = &ref->next;
continue;
}
else {
int order = path_match(ref->name, nr_match, match);
if (order) {
return_refs[order-1] = ref;
continue; /* we will link it later */
}
}
free(ref);
}

if (!fetch_all) {
int i;
for (i = 0; i < nr_match; i++) {
ref = return_refs[i];
if (ref) {
*newtail = ref;
ref->next = NULL;
newtail = &ref->next;
}
}
if (return_refs != fastarray)
free(return_refs);
}
*refs = newlist;
}

static int everything_local(struct ref **refs, int nr_match, char **match)

Loading…
Cancel
Save