From: "Elijah Newren via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: dstolee@microsoft.com, szeder.dev@gmail.com,
Elijah Newren <newren@gmail.com>
Subject: [PATCH v3 0/3] Sparse checkout status
Date: Sun, 21 Jun 2020 05:21:24 +0000 [thread overview]
Message-ID: <pull.808.v3.git.git.1592716887.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.808.v2.git.git.1592513398.gitgitgadget@gmail.com>
Some of the feedback of folks trying out sparse-checkouts at $dayjob is that
sparse checkouts can sometimes be disorienting; users can forget that they
had a sparse-checkout and then wonder where files went. This series adds
some output to 'git status' and modifies git-prompt slightly as an attempt
to help.
(As per discussion on v1, a "git sparse-checkout [status|info|status]" might
supplement the changes from this series later; this is just aimed at giving
users a simple reminder that they are in a sparse checkout.)
Changes since v2:
* Added an extra commit to document how git-prompt works with in-progress
state of operations (rebase/merge/cherry-pick/revert/bisect), since I
want to refer to it for comparison later in the docs.
* As requested by SZEDER, added the ability to shorten or remove the
information relating to sparsity state in the git-prompt.
* Since there are now three options for whether and how to show information
related to sparsity state, I put a fair amount of effort into reasoning
among the options about what is a good default and why; I included this
in the final commit message. (While I suspect that we can easily change
the default for the prompt in the future based on the big warning at the
top of git-sparse-checkout.txt, having the rationale up-front for the
original decision may help us out in the future.)
Elijah Newren (3):
wt-status: show sparse checkout status as well
git-prompt: document how in-progress operations affect the prompt
git-prompt: include sparsity state as well
contrib/completion/git-prompt.sh | 26 ++++++++++++++++++--
wt-status.c | 41 ++++++++++++++++++++++++++++++++
wt-status.h | 2 ++
3 files changed, 67 insertions(+), 2 deletions(-)
base-commit: b3d7a52fac39193503a0b6728771d1bf6a161464
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-808%2Fnewren%2Fsparse-checkout-status-v3
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-808/newren/sparse-checkout-status-v3
Pull-Request: https://github.com/git/git/pull/808
Range-diff vs v2:
1: e266bc39d99 = 1: e266bc39d99 wt-status: show sparse checkout status as well
-: ----------- > 2: 1fd1b919684 git-prompt: document how in-progress operations affect the prompt
2: 17254b30a5b ! 3: d99202f8e14 git-prompt: include sparsity state as well
@@ Metadata
## Commit message ##
git-prompt: include sparsity state as well
- The current git prompt includes a lot of possible state information from
- cherry-picks, merges, bisects, and various flavors of rebases. Add
- sparsity as another state flavor (though one which can be present
- simultaneously with any of rebase/cherry-pick/merge/bisect). This extra
- state is shown with an extra
+ git-prompt includes the current branch, a bunch of single character
+ mini-state displayers, and some much longer in-progress state
+ notifications. The current branch is always shown. The single
+ character mini-state displayers are all off by default (they are not
+ self explanatory) but each has an environment variable for turning it
+ on. The in-progress state notifications provide no configuration
+ options for turning them off, and can be up to 15 characters long (e.g.
+ "|REBASE (12/18)" or "|CHERRY-PICKING").
+
+ The single character mini-state tends to be used for things like "Do you
+ have any stashes in refs/stash?" or "Are you ahead or behind of
+ upstream?". These are things which users can take advantage of but do
+ not affect most normal git operations. The in-progress states, by
+ contrast, suggest the user needs to interact differently and may also
+ prevent some normal operations from succeeding (e.g. git switch may show
+ an error instead of switching branches).
+
+ Sparsity is like the in-progress states in that it suggests a
+ fundamental different interaction with the repository (many of the files
+ from the repository are not present in your working copy!). A few
+ commits ago added sparsity information to wt_longstatus_print_state(),
+ grouping it with other in-progress state displays. We do similarly here
+ with the prompt and show the extra state, by default, with an extra
|SPARSE
- substring before the other states, providing a prompt that looks like:
+ This state can be present simultaneously with the in-progress states, in
+ which case it will appear before the other states; for example,
(branchname|SPARSE|REBASE 6/10)
The reason for showing the "|SPARSE" substring before other states is to
@@ Commit message
make them appear closer to where the user types and make them more
likely to be noticed.
+ The fact that sparsity isn't just cached metadata or additional
+ information is what leads us to show it more similarly to the
+ in-progress states, but the fact that sparsity is not transient like the
+ in-progress states might cause some users to want an abbreviated
+ notification of sparsity state or perhaps even be able to turn it off.
+ Allow GIT_PS1_COMPRESSSPARSESTATE to be set to request that it be
+ shortened to a single character ('?'), and GIT_PS1_OMITSPARSESTATE to be
+ set to request that sparsity state be omitted from the prompt entirely.
+
Signed-off-by: Elijah Newren <newren@gmail.com>
## contrib/completion/git-prompt.sh ##
+@@
+ # revert, cherry-pick, or bisect, the prompt will include information
+ # related to the operation, often in the form "|<OPERATION-NAME>".
+ #
++# When the repository has a sparse-checkout, a notification of the form
++# "|SPARSE" will be included in the prompt. This can be shortened to a
++# single '?' character by setting GIT_PS1_COMPRESSSPARSESTATE, or omitted
++# by setting GIT_PS1_OMITSPARSESTATE.
++#
+ # By default, __git_ps1 will compare HEAD to your SVN upstream if it can
+ # find one, or @{upstream} otherwise. Once you have set
+ # GIT_PS1_SHOWUPSTREAM, you can override it on a per-repository basis by
@@ contrib/completion/git-prompt.sh: __git_ps1 ()
return $exit
fi
+ local sparse=""
-+ if [ "$(git config --bool core.sparseCheckout)" == "true" ]; then
-+ sparse="|SPARSE"
++ if [ -z "${GIT_PS1_COMPRESSSPARSESTATE}" ] &&
++ [ -z "${GIT_PS1_OMITSPARSESTATE}" ] &&
++ [ "$(git config --bool core.sparseCheckout)" == "true" ]; then
++ sparse="|SPARSE"
+ fi
+
local r=""
local b=""
local step=""
@@ contrib/completion/git-prompt.sh: __git_ps1 ()
+ local i=""
+ local s=""
+ local u=""
++ local h=""
+ local c=""
+ local p=""
+
+@@ contrib/completion/git-prompt.sh: __git_ps1 ()
+ u="%${ZSH_VERSION+%}"
+ fi
+
++ if [ -n "${GIT_PS1_COMPRESSSPARSESTATE}" ] &&
++ [ "$(git config --bool core.sparseCheckout)" == "true" ]; then
++ h="?"
++ fi
++
+ if [ -n "${GIT_PS1_SHOWUPSTREAM-}" ]; then
+ __git_ps1_show_upstream
+ fi
+@@ contrib/completion/git-prompt.sh: __git_ps1 ()
+ b="\${__git_ps1_branch_name}"
fi
- local f="$w$i$s$u"
+- local f="$w$i$s$u"
- local gitstring="$c$b${f:+$z$f}$r$p"
++ local f="$h$w$i$s$u"
+ local gitstring="$c$b${f:+$z$f}${sparse}$r$p"
if [ $pcmode = yes ]; then
--
gitgitgadget
next prev parent reply other threads:[~2020-06-21 5:22 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-06-16 23:33 [PATCH 0/2] Sparse checkout status Elijah Newren via GitGitGadget
2020-06-16 23:33 ` [PATCH 1/2] [RFC] wt-status: show sparse checkout status as well Elijah Newren via GitGitGadget
2020-06-17 14:50 ` Derrick Stolee
2020-06-17 15:46 ` Elijah Newren
2020-06-16 23:33 ` [PATCH 2/2] [RFC] git-prompt: include sparsity state " Elijah Newren via GitGitGadget
2020-06-18 20:49 ` [PATCH v2 0/2] Sparse checkout status Elijah Newren via GitGitGadget
2020-06-18 20:49 ` [PATCH v2 1/2] wt-status: show sparse checkout status as well Elijah Newren via GitGitGadget
2020-06-18 20:49 ` [PATCH v2 2/2] git-prompt: include sparsity state " Elijah Newren via GitGitGadget
2020-06-19 16:15 ` SZEDER Gábor
2020-06-19 16:33 ` Junio C Hamano
2020-06-19 16:35 ` Junio C Hamano
2020-06-18 21:45 ` [PATCH v2 0/2] Sparse checkout status Junio C Hamano
2020-06-18 23:18 ` Elijah Newren
2020-06-21 1:34 ` Elijah Newren
2020-06-21 5:21 ` Elijah Newren via GitGitGadget [this message]
2020-06-21 5:21 ` [PATCH v3 1/3] wt-status: show sparse checkout status as well Elijah Newren via GitGitGadget
2020-06-21 5:21 ` [PATCH v3 2/3] git-prompt: document how in-progress operations affect the prompt Elijah Newren via GitGitGadget
2020-06-21 5:21 ` [PATCH v3 3/3] git-prompt: include sparsity state as well Elijah Newren via GitGitGadget
2020-06-22 16:35 ` Junio C Hamano
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
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=pull.808.v3.git.git.1592716887.gitgitgadget@gmail.com \
--to=gitgitgadget@gmail.com \
--cc=dstolee@microsoft.com \
--cc=git@vger.kernel.org \
--cc=newren@gmail.com \
--cc=szeder.dev@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.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
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 read-only IMAP folder(s) and NNTP newsgroup(s).