1
0
Fork 0
mirror of https://github.com/git/git.git synced 2024-06-18 18:59:38 +02:00

--base-path-relaxed option

I switched git.kernel.dk to --base-path a few minutes ago, to get rid of
a /data/git postfix in the posted urls. But transitioning is tricky,
since now all old paths will fail miserably.

So I added this --base-path-relaxed option, that will make git-daemon
try the absolute path without prefixing --base-path before giving up.
With this in place and --base-path-relaxed added, both my new url of

    git://git.kernel.dk/linux-2.6-block.git

and the old

    git://git.kernel.dk/data/git/linux-2.6-block.git

work fine.

Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Jens Axboe 2007-07-27 14:00:29 -07:00 committed by Junio C Hamano
parent 12ace0b20d
commit 73a7a65663
2 changed files with 30 additions and 2 deletions

View File

@ -54,6 +54,12 @@ OPTIONS
'git://example.com/hello.git', `git-daemon` will interpret the path 'git://example.com/hello.git', `git-daemon` will interpret the path
as '/srv/git/hello.git'. as '/srv/git/hello.git'.
--base-path-relaxed::
If --base-path is enabled and repo lookup fails, with this option
`git-daemon` will attempt to lookup without prefixing the base path.
This is useful for switching to --base-path usage, while still
allowing the old paths.
--interpolated-path=pathtemplate:: --interpolated-path=pathtemplate::
To support virtual hosting, an interpolated path template can be To support virtual hosting, an interpolated path template can be
used to dynamically construct alternate paths. The template used to dynamically construct alternate paths. The template

View File

@ -16,7 +16,8 @@ static int reuseaddr;
static const char daemon_usage[] = static const char daemon_usage[] =
"git-daemon [--verbose] [--syslog] [--export-all]\n" "git-daemon [--verbose] [--syslog] [--export-all]\n"
" [--timeout=n] [--init-timeout=n] [--strict-paths]\n" " [--timeout=n] [--init-timeout=n] [--strict-paths]\n"
" [--base-path=path] [--user-path | --user-path=path]\n" " [--base-path=path] [--base-path-relaxed]\n"
" [--user-path | --user-path=path]\n"
" [--interpolated-path=path]\n" " [--interpolated-path=path]\n"
" [--reuseaddr] [--detach] [--pid-file=file]\n" " [--reuseaddr] [--detach] [--pid-file=file]\n"
" [--[enable|disable|allow-override|forbid-override]=service]\n" " [--[enable|disable|allow-override|forbid-override]=service]\n"
@ -34,6 +35,7 @@ static int export_all_trees;
/* Take all paths relative to this one if non-NULL */ /* Take all paths relative to this one if non-NULL */
static char *base_path; static char *base_path;
static char *interpolated_path; static char *interpolated_path;
static int base_path_relaxed;
/* Flag indicating client sent extra args. */ /* Flag indicating client sent extra args. */
static int saw_extended_args; static int saw_extended_args;
@ -180,6 +182,7 @@ static char *path_ok(struct interp *itable)
{ {
static char rpath[PATH_MAX]; static char rpath[PATH_MAX];
static char interp_path[PATH_MAX]; static char interp_path[PATH_MAX];
int retried_path = 0;
char *path; char *path;
char *dir; char *dir;
@ -235,7 +238,22 @@ static char *path_ok(struct interp *itable)
dir = rpath; dir = rpath;
} }
path = enter_repo(dir, strict_paths); do {
path = enter_repo(dir, strict_paths);
if (path)
break;
/*
* if we fail and base_path_relaxed is enabled, try without
* prefixing the base path
*/
if (base_path && base_path_relaxed && !retried_path) {
dir = itable[INTERP_SLOT_DIR].value;
retried_path = 1;
continue;
}
break;
} while (1);
if (!path) { if (!path) {
logerror("'%s': unable to chdir or not a git archive", dir); logerror("'%s': unable to chdir or not a git archive", dir);
@ -1061,6 +1079,10 @@ int main(int argc, char **argv)
base_path = arg+12; base_path = arg+12;
continue; continue;
} }
if (!strcmp(arg, "--base-path-relaxed")) {
base_path_relaxed = 1;
continue;
}
if (!prefixcmp(arg, "--interpolated-path=")) { if (!prefixcmp(arg, "--interpolated-path=")) {
interpolated_path = arg+20; interpolated_path = arg+20;
continue; continue;