mirror of
https://git.zx2c4.com/cgit
synced 2024-11-22 16:38:42 +00:00
Add namespace support to dumb-clone
This requires namespacing the HEAD symbolic ref and the list of refs. Sending HEAD required some tweaking, since the file itself refers to a namespaced ref, but we want to provide the ref with its namespace stripped off. Signed-off-by: Richard Maw <richard.maw@gmail.com>
This commit is contained in:
parent
44efabfc5e
commit
c8d5732367
23
ui-clone.c
23
ui-clone.c
@ -86,6 +86,9 @@ void cgit_clone_info(void)
|
||||
ctx.page.filename = "info/refs";
|
||||
cgit_print_http_headers();
|
||||
for_each_ref(print_ref_info, NULL);
|
||||
/* NOTE: we pass an empty prefix because we want to enumerate everything
|
||||
not just all refs under $namespace/refs/ */
|
||||
cgit_for_each_namespaced_ref_in("", print_ref_info, NULL);
|
||||
}
|
||||
|
||||
void cgit_clone_objects(void)
|
||||
@ -105,5 +108,23 @@ void cgit_clone_objects(void)
|
||||
|
||||
void cgit_clone_head(void)
|
||||
{
|
||||
send_file(git_path("%s", "HEAD"));
|
||||
if (get_git_namespace()) {
|
||||
unsigned char unused[20];
|
||||
char *namespaced_head = NULL;
|
||||
const char *ref;
|
||||
namespaced_head = mkpathdup("%sHEAD", get_git_namespace());
|
||||
/* NOTE: RESOLVE_REF_NO_RECURSE is required to prevent it resolving HEAD
|
||||
into a ref outside of the namespace. */
|
||||
ref = resolve_ref_unsafe(namespaced_head, RESOLVE_REF_NO_RECURSE, unused, NULL);
|
||||
if (!ref) {
|
||||
cgit_print_error_page(404, "Not found", "Not found");
|
||||
free(namespaced_head);
|
||||
return;
|
||||
}
|
||||
cgit_print_http_headers();
|
||||
htmlf("ref: %s\n", strip_namespace(ref));
|
||||
free(namespaced_head);
|
||||
} else {
|
||||
send_file(git_path("%s", "HEAD"));
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user