From: Jonathan Nieder <jrnieder@gmail.com>
To: "Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
Cc: git@vger.kernel.org
Subject: Re: [PATCH 07/10] checkout: add -S to update sparse checkout
Date: Mon, 15 Nov 2010 15:16:36 -0600 [thread overview]
Message-ID: <20101115211636.GH16385@burratino> (raw)
In-Reply-To: <1289817410-32470-8-git-send-email-pclouds@gmail.com>
Nguyễn Thái Ngọc Duy wrote:
> --- a/Documentation/git-checkout.txt
> +++ b/Documentation/git-checkout.txt
> @@ -12,6 +12,7 @@ SYNOPSIS
> 'git checkout' [-q] [-f] [-m] [[-b|-B|--orphan] <new_branch>] [<start_point>]
> 'git checkout' [-f|--ours|--theirs|-m|--conflict=<style>] [<tree-ish>] [--] <paths>...
> 'git checkout' --patch [<tree-ish>] [--] [<paths>...]
> +'git checkout' -S
>
> DESCRIPTION
> -----------
> @@ -176,6 +177,13 @@ the conflicted merge in the specified paths.
> This means that you can use `git checkout -p` to selectively discard
> edits from your current working tree.
>
> +-S::
> +--update-sparse-checkout::
> + An editor is invoked to let you update your sparse checkout
> + patterns. The updated patterns will be saved in
> + $GIT_DIR/info/sparse-checkout. The working directory is also
> + updated. An empty file will abort the process.
Wording nit: this doesn't make the worktree more up-to-date. How
about:
--edit-sparse-checkout
--define-work-area
--narrow-worktree
Hmph.
--edit-sparse-checkout seems best for consistency of the choices I can
think of.
[...]
> @@ -316,6 +324,14 @@ $ git add frotz
> ------------
>
>
> +ENVIRONMENT AND CONFIGURATION VARIABLES
> +---------------------------------------
> +The editor used to edit the commit log message will be chosen from the
^
patterns defining what subset of the tracked tree to work on
> +GIT_EDITOR environment variable, the core.editor configuration variable, the
Might be simpler to say:
CONFIGURATION
-------------
--edit-sparse-checkout uses the configured editor. See git-var(1) for
details.
[...]
> --- a/builtin/checkout.c
> +++ b/builtin/checkout.c
> @@ -675,6 +675,31 @@ static const char *unique_tracking_name(const char *name)
> return NULL;
> }
>
> +static void edit_info_sparse_checkout()
> +{
> + char *tmpfile = xstrdup(git_path("sparse-checkout"));
git_pathdup()?
> + struct exclude_list el;
> + int i;
> +
> + copy_file(tmpfile, git_path("info/sparse-checkout"), 0666);
> +
> + if (launch_editor(tmpfile, NULL, NULL))
> + exit(1);
> +
> + memset(&el, 0, sizeof(el));
> + if (add_excludes_from_file_to_list(tmpfile, "", 0, NULL, &el, 0) < 0 ||
> + el.nr == 0)
> + die("No valid sparse patterns. Abort.");
Perhaps the error message should mention the temp file.
> + for (i = 0; i < el.nr; i++)
> + free(el.excludes[i]);
> + free(el.excludes);
Neat.
> +
> + if (rename(tmpfile, git_path("info/sparse-checkout")) < 0)
> + die_errno("Can't update %s", git_path("info/sparse-checkout"));
Wouldn't git_path() clobber errno? Probably worth keeping a temporary
with the result from git_path before the rename.
> +
> + free(tmpfile);
> +}
> +
> int cmd_checkout(int argc, const char **argv, const char *prefix)
> {
> struct checkout_opts opts;
> @@ -685,6 +710,7 @@ int cmd_checkout(int argc, const char **argv, const char *prefix)
> char *conflict_style = NULL;
> int patch_mode = 0;
> int dwim_new_local_branch = 1;
> + int update_sparse_checkout = 0;
> struct option options[] = {
> OPT__QUIET(&opts.quiet),
> OPT_STRING('b', NULL, &opts.new_branch, "branch",
> @@ -704,6 +730,8 @@ int cmd_checkout(int argc, const char **argv, const char *prefix)
> OPT_STRING(0, "conflict", &conflict_style, "style",
> "conflict style (merge or diff3)"),
> OPT_BOOLEAN('p', "patch", &patch_mode, "select hunks interactively"),
> + OPT_BOOLEAN('S', "update-sparse-checkout", &update_sparse_checkout,
> + "open up editor to edit $GIT_DIR/info/sparse-checkout" ),
> { OPTION_BOOLEAN, 0, "guess", &dwim_new_local_branch, NULL,
> "second guess 'git checkout no-such-branch'",
> PARSE_OPT_NOARG | PARSE_OPT_HIDDEN },
> @@ -722,6 +750,9 @@ int cmd_checkout(int argc, const char **argv, const char *prefix)
> argc = parse_options(argc, argv, prefix, options, checkout_usage,
> PARSE_OPT_KEEP_DASHDASH);
>
> + if (update_sparse_checkout && !core_apply_sparse_checkout)
> + die("core.sparseCheckout needs to be turned on");
--%s requires core.sparsecheckout to be turned out
> +
> /* we can assume from now on new_branch = !new_branch_force */
> if (opts.new_branch && opts.new_branch_force)
> die("-B cannot be used with -b");
> @@ -874,6 +905,9 @@ no_reference:
> if (!pathspec)
> die("invalid path specification");
>
> + if (update_sparse_checkout)
> + die("git checkout: update paths is incompatible with updating sparse checkout.");
> +
"updating paths is incompatible", I think.
Maybe an area for future work. :)
> @@ -892,8 +926,11 @@ no_reference:
> return checkout_paths(source_tree, pathspec, &opts);
> }
>
> - if (patch_mode)
> + if (patch_mode) {
> + if (update_sparse_checkout)
> + die("git checkout: interactive checkout is incompatible with updating sparse checkout.");
Hmm, I'd put
if (patch_mode && update_sparse_checkout)
die(...
earlier as part of option validation.
[...]
> --- a/t/t1011-read-tree-sparse-checkout.sh
> +++ b/t/t1011-read-tree-sparse-checkout.sh
> @@ -184,4 +184,22 @@ test_expect_success 'read-tree --reset removes outside worktree' '
> test_cmp empty result
> '
>
> +test_expect_success 'git checkout -S fails to launch editor' '
> + GIT_EDITOR=/non-existent test_must_fail git checkout -S &&
Exporting envvars via a function is non-portable. The usual workaround:
(
GIT_EDITOR=... &&
export GIT_EDITOR &&
test_must_fail ...
) &&
Maybe it's time to introduce
eval_must_fail GIT_EDITOR=/non-existent git checkout -S
?
[...]
> +test_expect_success 'git checkout -S' '
> + git checkout -f top &&
> + cat >editor.sh <<\EOF &&
> +#!/bin/sh
> +echo sub > "$1"
> +EOF
Style: the git test scripts usually omit the space after >.
> --- a/templates/info--sparse-checkout
> +++ b/templates/info--sparse-checkout
> @@ -1,3 +1,4 @@
> # Specify what files are checked out in working directory
> # Run "git checkout" after updating this file to update working directory
> +# If this is opened by "git checkout -S", empty this file will abort it.
> *
Usage nits: s/if/when/; s/opened/edited/; s/will/to/; s/it//.
# When editing with "git checkout -S", empty this file to abort.
next prev parent reply other threads:[~2010-11-15 21:17 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-11-15 10:36 [PATCH 00/10] Sparse checkout fixes and improvements Nguyễn Thái Ngọc Duy
2010-11-15 10:36 ` [PATCH 01/10] add: do not rely on dtype being NULL behavior Nguyễn Thái Ngọc Duy
2010-11-15 12:14 ` Jonathan Nieder
2010-11-16 2:18 ` Nguyen Thai Ngoc Duy
2010-11-16 2:42 ` Jonathan Nieder
2010-11-16 18:58 ` Junio C Hamano
2010-11-17 6:38 ` Nguyen Thai Ngoc Duy
2010-11-15 10:36 ` [PATCH 02/10] unpack-trees: move all skip-worktree check back to unpack_trees() Nguyễn Thái Ngọc Duy
2010-11-15 12:34 ` Thiago Farina
2010-11-16 2:19 ` Nguyen Thai Ngoc Duy
2010-11-15 16:01 ` Jonathan Nieder
2010-11-16 2:39 ` Nguyen Thai Ngoc Duy
2010-11-15 10:36 ` [PATCH 03/10] unpack-trees: add function to update ce_flags based on sparse patterns Nguyễn Thái Ngọc Duy
2010-11-15 18:30 ` Jonathan Nieder
2010-11-15 20:19 ` Jonathan Nieder
2010-11-15 10:36 ` [PATCH 04/10] unpack-trees: fix sparse checkout's "unable to match directories" fault Nguyễn Thái Ngọc Duy
2010-11-15 19:10 ` Jonathan Nieder
2010-11-16 2:43 ` Nguyen Thai Ngoc Duy
2010-11-15 10:36 ` [PATCH 05/10] unpack-trees: optimize full checkout case Nguyễn Thái Ngọc Duy
2010-11-15 20:41 ` Jonathan Nieder
2010-11-15 10:36 ` [PATCH 06/10] templates: add info/sparse-checkout Nguyễn Thái Ngọc Duy
2010-11-15 10:36 ` [PATCH 07/10] checkout: add -S to update sparse checkout Nguyễn Thái Ngọc Duy
2010-11-15 21:16 ` Jonathan Nieder [this message]
2010-11-15 21:52 ` Miles Bader
2010-11-17 15:02 ` Nguyen Thai Ngoc Duy
2010-11-16 3:08 ` Nguyen Thai Ngoc Duy
2010-11-15 10:36 ` [PATCH 08/10] checkout: add --full to fully populate working directory Nguyễn Thái Ngọc Duy
2010-11-15 21:23 ` Jonathan Nieder
2010-11-16 2:50 ` Nguyen Thai Ngoc Duy
2010-11-15 10:36 ` [PATCH 09/10] git-checkout.txt: mention of sparse checkout Nguyễn Thái Ngọc Duy
2010-11-15 10:36 ` [PATCH 10/10] clean: support cleaning sparse checkout with -S Nguyễn Thái Ngọc Duy
2010-11-15 21:30 ` Jonathan Nieder
2010-11-16 2:53 ` Nguyen Thai Ngoc Duy
2010-11-16 3:07 ` Jonathan Nieder
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20101115211636.GH16385@burratino \
--to=jrnieder@gmail.com \
--cc=git@vger.kernel.org \
--cc=pclouds@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).