1
0
Fork 0
mirror of https://github.com/git/git.git synced 2024-06-02 09:26:10 +02:00

scalar: add --[no-]src option

Some users have strong aversions to Scalar's opinion that the repository
should be in a 'src' directory, even though this creates a clean slate
for placing build artifacts in adjacent directories.

The new --no-src option allows users to opt out of the default behavior.

While adding options, make sure the usage output by 'scalar clone -h'
reports the same as the SYNOPSIS line in Documentation/scalar.txt.

Signed-off-by: Derrick Stolee <derrickstolee@github.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Derrick Stolee 2023-08-28 13:52:24 +00:00 committed by Junio C Hamano
parent fb7d80edca
commit 4527db8ff8
3 changed files with 28 additions and 3 deletions

View File

@ -8,7 +8,8 @@ scalar - A tool for managing large Git repositories
SYNOPSIS SYNOPSIS
-------- --------
[verse] [verse]
scalar clone [--single-branch] [--branch <main-branch>] [--full-clone] <url> [<enlistment>] scalar clone [--single-branch] [--branch <main-branch>] [--full-clone]
[--[no-]src] <url> [<enlistment>]
scalar list scalar list
scalar register [<enlistment>] scalar register [<enlistment>]
scalar unregister [<enlistment>] scalar unregister [<enlistment>]
@ -80,6 +81,11 @@ remote-tracking branch for the branch this option was used for the initial
cloning. If the HEAD at the remote did not point at any branch when cloning. If the HEAD at the remote did not point at any branch when
`--single-branch` clone was made, no remote-tracking branch is created. `--single-branch` clone was made, no remote-tracking branch is created.
--[no-]src::
By default, `scalar clone` places the cloned repository within a
`<entlistment>/src` directory. Use `--no-src` to place the cloned
repository directly in the `<enlistment>` directory.
--[no-]full-clone:: --[no-]full-clone::
A sparse-checkout is initialized by default. This behavior can be A sparse-checkout is initialized by default. This behavior can be
turned off via `--full-clone`. turned off via `--full-clone`.

View File

@ -409,6 +409,7 @@ static int cmd_clone(int argc, const char **argv)
{ {
const char *branch = NULL; const char *branch = NULL;
int full_clone = 0, single_branch = 0, show_progress = isatty(2); int full_clone = 0, single_branch = 0, show_progress = isatty(2);
int src = 1;
struct option clone_options[] = { struct option clone_options[] = {
OPT_STRING('b', "branch", &branch, N_("<branch>"), OPT_STRING('b', "branch", &branch, N_("<branch>"),
N_("branch to checkout after clone")), N_("branch to checkout after clone")),
@ -417,10 +418,13 @@ static int cmd_clone(int argc, const char **argv)
OPT_BOOL(0, "single-branch", &single_branch, OPT_BOOL(0, "single-branch", &single_branch,
N_("only download metadata for the branch that will " N_("only download metadata for the branch that will "
"be checked out")), "be checked out")),
OPT_BOOL(0, "src", &src,
N_("create repository within 'src' directory")),
OPT_END(), OPT_END(),
}; };
const char * const clone_usage[] = { const char * const clone_usage[] = {
N_("scalar clone [<options>] [--] <repo> [<dir>]"), N_("scalar clone [--single-branch] [--branch <main-branch>] [--full-clone]\n"
"\t[--[no-]src] <url> [<enlistment>]"),
NULL NULL
}; };
const char *url; const char *url;
@ -456,7 +460,10 @@ static int cmd_clone(int argc, const char **argv)
if (is_directory(enlistment)) if (is_directory(enlistment))
die(_("directory '%s' exists already"), enlistment); die(_("directory '%s' exists already"), enlistment);
dir = xstrfmt("%s/src", enlistment); if (src)
dir = xstrfmt("%s/src", enlistment);
else
dir = xstrdup(enlistment);
strbuf_reset(&buf); strbuf_reset(&buf);
if (branch) if (branch)

View File

@ -180,4 +180,16 @@ test_expect_success 'scalar clone warns when background maintenance fails' '
grep "could not turn on maintenance" err grep "could not turn on maintenance" err
' '
test_expect_success '`scalar clone --no-src`' '
scalar clone --src "file://$(pwd)/to-clone" with-src &&
scalar clone --no-src "file://$(pwd)/to-clone" without-src &&
test_path_is_dir with-src/src &&
test_path_is_missing without-src/src &&
(cd with-src/src && ls ?*) >with &&
(cd without-src && ls ?*) >without &&
test_cmp with without
'
test_done test_done