My git day this week hasn't started yet, but for people to base
their improvements on, here is a quick status before I go to
bed.
- Detached HEAD along with two patches to teach git-status and
git-branch about not being on any branch are in 'pu'; I
removed -d option from git-checkout from the previous round.
- Jürgen's git-status improvements are mostly in 'next' but
one of them is queued in 'pu', waiting for comments.
- I've queued my counterproposal to Shawn's lockfile fix in
'pu', waiting for comments.
On the 'master' front, I've merged Andy's xwrite() loop. I
think this is applicable to many other places after generalizing
it a bit more and perhaps merging it with safe_write in
pkt-line.c.
builtin-apply.c, builtin-unpack-objects.c, copy.c, csum-file.c,
index-pack.c, merge-recursive.c and pkt-line.c have
implementations of something very similar, with different policy
on error handling.
Also index-pack.c and upload-pack.c (in the status reporting
code path) also has unprotected xwrite() that can result in
short write.
Have fun.
Junio C Hamano writes:
> - Jürgen's git-status improvements are mostly in 'next' but
> one of them is queued in 'pu', waiting for comments.
Here is a more detailed breakdown of the reasoning behind the
remaining change in (slightly massaged) git-log format. Especially
the usage of 'cached' and 'unstage' might not be that helpful.
==========
Add "cached" to cached content header in status output
Since we direct the user to use git-rm --cached this might be a good way to
clarify it without loosing many words.
diff --git a/wt-status.c b/wt-status.c
index 8696e5b..e6355c6 100644
--- a/wt-status.c
+++ b/wt-status.c
@@ -56,7 +56,7 @@ void wt_status_prepare(struct wt_status *s)
static void wt_status_print_cached_header(const char *reference)
{
const char *c = color(WT_STATUS_HEADER);
- color_printf_ln(c, "# Changes to be committed:");
+ color_printf_ln(c, "# Cached changes to be committed:");
if (reference) {
color_printf_ln(c, "# (use \"git reset %s <file>...\" and \"git rm --cached <file>...\" to unstage)", reference);
} else {
==========
Add unstaging hint to status output
If reference commit name is provided advertise git-reset otherwise instruct the
user to use git-rm --cached. The latter case is needed to handle the initial
commit.
Note that git-rm --cached is currently needed even if we have a reference
commit, since git-reset cannot remove freshly added files from the index (yet).
diff --git a/wt-status.c b/wt-status.c
index 82b76d5..8696e5b 100644
--- a/wt-status.c
+++ b/wt-status.c
@@ -57,6 +57,11 @@ static void wt_status_print_cached_header(const char *reference)
{
const char *c = color(WT_STATUS_HEADER);
color_printf_ln(c, "# Changes to be committed:");
+ if (reference) {
+ color_printf_ln(c, "# (use \"git reset %s <file>...\" and \"git rm --cached <file>...\" to unstage)", reference);
+ } else {
+ color_printf_ln(c, "# (use \"git rm --cached <file>...\" to unstage)");
+ }
color_printf_ln(c, "#");
}
==========
Simplify cached content header in status output
Replace awkward "Added but not yet committed (will commit)" by a simple
"Changes to be committed".
diff --git a/wt-status.c b/wt-status.c
index 1959238..82b76d5 100644
--- a/wt-status.c
+++ b/wt-status.c
@@ -56,8 +56,7 @@ void wt_status_prepare(struct wt_status *s)
static void wt_status_print_cached_header(const char *reference)
{
const char *c = color(WT_STATUS_HEADER);
- color_printf_ln(c, "# Added but not yet committed:");
- color_printf_ln(c, "# (will commit):");
+ color_printf_ln(c, "# Changes to be committed:");
color_printf_ln(c, "#");
}
==========
Refactor printing of cached content header of status output
Since this header is printed in two different code paths and the name of the
reference commit will be needed for the future unstaging hint, provide a new
printing function.
diff --git a/wt-status.c b/wt-status.c
index db42738..1959238 100644
--- a/wt-status.c
+++ b/wt-status.c
@@ -53,6 +53,14 @@ void wt_status_prepare(struct wt_status *s)
s->untracked = 0;
}
+static void wt_status_print_cached_header(const char *reference)
+{
+ const char *c = color(WT_STATUS_HEADER);
+ color_printf_ln(c, "# Added but not yet committed:");
+ color_printf_ln(c, "# (will commit):");
+ color_printf_ln(c, "#");
+}
+
static void wt_status_print_header(const char *main, const char *sub)
{
const char *c = color(WT_STATUS_HEADER);@@ -147,8 +155,7 @@ static void wt_status_print_updated_cb(struct diff_queue_struct *q,
if (q->queue[i]->status == 'U')
continue;
if (!shown_header) {
- wt_status_print_header("Added but not yet committed",
- "will commit");
+ wt_status_print_cached_header(s->reference);
s->commitable = 1;
shown_header = 1;
}@@ -179,8 +186,7 @@ void wt_status_print_initial(struct wt_status *s)
read_cache();
if (active_nr) {
s->commitable = 1;
- wt_status_print_header("Added but not yet committed",
- "will commit");
+ wt_status_print_cached_header(NULL);
}
for (i = 0; i < active_nr; i++) {
color_printf(color(WT_STATUS_HEADER), "#\t");