Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow --no-src during clones and git worktree after clones #536

Closed
Closed
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
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 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.

Signed-off-by: Derrick Stolee <derrickstolee@github.com>
  • Loading branch information
derrickstolee committed Oct 4, 2022
commit 39c6fe16f29a9d4d5185d839afe5460fbcaf0004
7 changes: 6 additions & 1 deletion Documentation/scalar.txt
Original file line number Diff line number Diff line change
@@ -9,7 +9,7 @@ SYNOPSIS
--------
[verse]
scalar clone [--single-branch] [--branch <main-branch>] [--full-clone]
[--local-cache-path <path>] [--cache-server-url <url>]
[--local-cache-path <path>] [--cache-server-url <url>] [--[no-]src]
<url> [<enlistment>]
scalar list
scalar register [<enlistment>]
@@ -84,6 +84,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`.
14 changes: 12 additions & 2 deletions scalar.c
Original file line number Diff line number Diff line change
@@ -817,6 +817,8 @@ static int cmd_clone(int argc, const char **argv)
int full_clone = 0, single_branch = 0, dummy = 0;
const char *cache_server_url = NULL, *local_cache_root = NULL;
char *default_cache_server_url = NULL, *local_cache_root_abs = NULL;
const char *enlistment_parent;
int src = 1;
struct option clone_options[] = {
OPT_STRING('b', "branch", &branch, N_("<branch>"),
N_("branch to checkout after clone")),
@@ -825,6 +827,8 @@ 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,
derrickstolee marked this conversation as resolved.
Show resolved Hide resolved
N_("create repository within 'src' directory")),
OPT_STRING(0, "cache-server-url", &cache_server_url,
N_("<url>"),
N_("the url or friendly name of the cache server")),
@@ -875,7 +879,13 @@ static int cmd_clone(int argc, const char **argv)

ensure_absolute_path(enlistment, &enlistment);

dir = xstrfmt("%s/src", enlistment);
if (src) {
dir = xstrfmt("%s/src", enlistment);
enlistment_parent = "../..";
} else {
dir = xstrdup(enlistment);
enlistment_parent = "..";
}

if (!local_cache_root)
local_cache_root = local_cache_root_abs =
@@ -916,7 +926,7 @@ static int cmd_clone(int argc, const char **argv)
struct strbuf path = STRBUF_INIT;

strbuf_addstr(&path, enlistment);
if (chdir("../..") < 0 ||
if (chdir(enlistment_parent) < 0 ||
remove_dir_recursively(&path, 0) < 0)
die(_("'--local-cache-path' cannot be inside the src "
"folder;\nCould not remove '%s'"), enlistment);
8 changes: 8 additions & 0 deletions t/t9099-scalar.sh
Original file line number Diff line number Diff line change
@@ -269,4 +269,12 @@ test_expect_success '`scalar delete` with existing repo' '
test_path_is_missing existing
'

test_expect_success '`scalar clone --no-src`' '
scalar clone --src "file://$(pwd)" with-src &&
derrickstolee marked this conversation as resolved.
Show resolved Hide resolved
scalar clone --no-src "file://$(pwd)" without-src &&

test_path_is_dir with-src/src &&
test_path_is_missing without-src/src
'

test_done