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:
parent
12ace0b20d
commit
73a7a65663
|
@ -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
|
||||||
|
|
26
daemon.c
26
daemon.c
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue