Message ID | c1c7e2f049e762b9b60614a5732e4d41db1d0da5.1692025937.git.gitgitgadget@gmail.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | scalar: two downstream improvements | expand |
"Derrick Stolee via GitGitGadget" <gitgitgadget@gmail.com> writes: > From: Derrick Stolee <derrickstolee@github.com> > > Some users have strong aversions to Scalar's opinion that the repository > should be in a 'src' directory, even though it creates a clean slate for > placing build outputs in adjacent directories. > > The --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> > --- > Documentation/scalar.txt | 8 +++++++- > scalar.c | 11 +++++++++-- > t/t9211-scalar-clone.sh | 8 ++++++++ > 3 files changed, 24 insertions(+), 3 deletions(-) > > diff --git a/Documentation/scalar.txt b/Documentation/scalar.txt > index f33436c7f65..cd65b3e230d 100644 > --- a/Documentation/scalar.txt > +++ b/Documentation/scalar.txt > @@ -8,7 +8,8 @@ scalar - A tool for managing large Git repositories > SYNOPSIS > -------- > [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 register [<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 > `--single-branch` clone was made, no remote-tracking branch is created. > > +--[no-]src:: > + Specify if the repository should be created within a `src` directory > + within `<enlistment>`. This is the default behavior, so use > + `--no-src` to opt-out of the creation of the `src` directory. While there is nothing incorrect in the above per-se, and the first half of the description is perfectly good, but I find the latter half places too much stress on the existence of the "src" directory. As a mere mortal end-user, what is more important is not the presence of an extra directory, but the fact that everything I have is now moved one level down in the directory hierarchy to "src/" directory. This is the default behavior; use `--no-src` to place the root of the working tree of the repository directly at `<enlistment>`. or something along that line would have been easier to understand for me. It is not the creation of `src`, but that everything is moved into it, is what some users may find unusual. > +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 > +' And another thing that may be interesting, from the above point of view, is to compare these two: (cd with-src/src && ls ?*) >with && (cd without && ls ?*) >without && test_cmp with without Both output should look something like cron.txt first.t second.t third.t and the earlier confusion point I raised was that (cd with-src && ls ?*) would not look like cron.txt first.t second.t src/ third.t Thanks.
On 8/14/2023 12:02 PM, Junio C Hamano wrote: > "Derrick Stolee via GitGitGadget" <gitgitgadget@gmail.com> writes: >> +--[no-]src:: >> + Specify if the repository should be created within a `src` directory >> + within `<enlistment>`. This is the default behavior, so use >> + `--no-src` to opt-out of the creation of the `src` directory. > > While there is nothing incorrect in the above per-se, and the first > half of the description is perfectly good, but I find the latter > half places too much stress on the existence of the "src" directory. > As a mere mortal end-user, what is more important is not the > presence of an extra directory, but the fact that everything I have > is now moved one level down in the directory hierarchy to "src/" > directory. > > This is the default behavior; use `--no-src` to place the > root of the working tree of the repository directly at > `<enlistment>`. > > or something along that line would have been easier to understand > for me. It is not the creation of `src`, but that everything is > moved into it, is what some users may find unusual. Your confusion makes sense. Focusing on the location of the cloned repository is a good way to focus the option for the reader. >> +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 >> +' > > And another thing that may be interesting, from the above point of > view, is to compare these two: > > (cd with-src/src && ls ?*) >with && > (cd without && ls ?*) >without && > test_cmp with without Good idea. Thanks, -Stolee
diff --git a/Documentation/scalar.txt b/Documentation/scalar.txt index f33436c7f65..cd65b3e230d 100644 --- a/Documentation/scalar.txt +++ b/Documentation/scalar.txt @@ -8,7 +8,8 @@ scalar - A tool for managing large Git repositories SYNOPSIS -------- [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 register [<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 `--single-branch` clone was made, no remote-tracking branch is created. +--[no-]src:: + Specify if the repository should be created within a `src` directory + within `<enlistment>`. This is the default behavior, so use + `--no-src` to opt-out of the creation of the `src` directory. + --[no-]full-clone:: A sparse-checkout is initialized by default. This behavior can be turned off via `--full-clone`. diff --git a/scalar.c b/scalar.c index df7358f481c..938bb73f3ce 100644 --- a/scalar.c +++ b/scalar.c @@ -409,6 +409,7 @@ static int cmd_clone(int argc, const char **argv) { const char *branch = NULL; int full_clone = 0, single_branch = 0, show_progress = isatty(2); + int src = 1; struct option clone_options[] = { OPT_STRING('b', "branch", &branch, N_("<branch>"), 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, N_("only download metadata for the branch that will " "be checked out")), + OPT_BOOL(0, "src", &src, + N_("create repository within 'src' directory")), OPT_END(), }; 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 }; const char *url; @@ -456,7 +460,10 @@ static int cmd_clone(int argc, const char **argv) if (is_directory(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); if (branch) diff --git a/t/t9211-scalar-clone.sh b/t/t9211-scalar-clone.sh index 872ad1c9c2b..7ee73aba092 100755 --- a/t/t9211-scalar-clone.sh +++ b/t/t9211-scalar-clone.sh @@ -180,4 +180,12 @@ test_expect_success 'scalar clone warns when background maintenance fails' ' 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 +' + test_done