<feed xmlns='http://www.w3.org/2005/Atom'>
<title>git/advice.c, branch v2.21.3</title>
<subtitle>Mirror of https://git.kernel.org/pub/scm/git/git.git/
</subtitle>
<id>https://git.shady.money/git/atom?h=v2.21.3</id>
<link rel='self' href='https://git.shady.money/git/atom?h=v2.21.3'/>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/'/>
<updated>2018-11-14T06:27:55Z</updated>
<entry>
<title>push: add an advice on unqualified &lt;dst&gt; push</title>
<updated>2018-11-14T06:27:55Z</updated>
<author>
<name>Ævar Arnfjörð Bjarmason</name>
<email>avarab@gmail.com</email>
</author>
<published>2018-11-13T19:52:43Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=dd8dd300c636bf0a1352379aed88d9434a6ac7bb'/>
<id>urn:sha1:dd8dd300c636bf0a1352379aed88d9434a6ac7bb</id>
<content type='text'>
Add an advice to the recently improved error message added in
f8aae12034 ("push: allow unqualified dest refspecs to DWIM",
2008-04-23).

Now with advice.pushUnqualifiedRefName=true (on by default) we show a
hint about how to proceed:

    $ ./git-push avar v2.19.0^{commit}:newbranch -n
    error: The destination you provided is not a full refname (i.e.,
    starting with "refs/"). We tried to guess what you meant by:

    - Looking for a ref that matches 'newbranch' on the remote side.
    - Checking if the &lt;src&gt; being pushed ('v2.19.0^{commit}')
      is a ref in "refs/{heads,tags}/". If so we add a corresponding
      refs/{heads,tags}/ prefix on the remote side.

    Neither worked, so we gave up. You must fully qualify the ref.
    hint: The &lt;src&gt; part of the refspec is a commit object.
    hint: Did you mean to create a new branch by pushing to
    hint: 'v2.19.0^{commit}:refs/heads/newbranch'?
    error: failed to push some refs to 'git@github.com:avar/git.git'

When trying to push a tag, tree or a blob we suggest that perhaps the
user meant to push them to refs/tags/ instead.

The if/else duplication for all of OBJ_{COMMIT,TAG,TREE,BLOB} is
unfortunate, but is required to correctly mark the messages for
translation. See the discussion in
&lt;87r2gxebsi.fsf@evledraar.gmail.com&gt; about that.

Signed-off-by: Ævar Arnfjörð Bjarmason &lt;avarab@gmail.com&gt;
Signed-off-by: Junio C Hamano &lt;gitster@pobox.com&gt;
</content>
</entry>
<entry>
<title>reset: warn when refresh_index() takes more than 2 seconds</title>
<updated>2018-10-24T02:57:08Z</updated>
<author>
<name>Ben Peart</name>
<email>benpeart@microsoft.com</email>
</author>
<published>2018-10-23T19:04:23Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=649bf3a42f344e71b1b5a7f562576f911a1f7423'/>
<id>urn:sha1:649bf3a42f344e71b1b5a7f562576f911a1f7423</id>
<content type='text'>
refresh_index() is done after a reset command as an optimization.  Because
it can be an expensive call, warn the user if it takes more than 2 seconds
and tell them how to avoid it using the --quiet command line option or
reset.quiet config setting.

Signed-off-by: Ben Peart &lt;benpeart@microsoft.com&gt;
Signed-off-by: Junio C Hamano &lt;gitster@pobox.com&gt;
</content>
</entry>
<entry>
<title>Merge branch 'ab/checkout-default-remote'</title>
<updated>2018-08-02T22:30:41Z</updated>
<author>
<name>Junio C Hamano</name>
<email>gitster@pobox.com</email>
</author>
<published>2018-08-02T22:30:41Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=50858edd1aa063d3ee2ecb48672c43630cea9070'/>
<id>urn:sha1:50858edd1aa063d3ee2ecb48672c43630cea9070</id>
<content type='text'>
"git checkout" and "git worktree add" learned to honor
checkout.defaultRemote when auto-vivifying a local branch out of a
remote tracking branch in a repository with multiple remotes that
have tracking branches that share the same names.

* ab/checkout-default-remote:
  checkout &amp; worktree: introduce checkout.defaultRemote
  checkout: add advice for ambiguous "checkout &lt;branch&gt;"
  builtin/checkout.c: use "ret" variable for return
  checkout: pass the "num_matches" up to callers
  checkout.c: change "unique" member to "num_matches"
  checkout.c: introduce an *_INIT macro
  checkout.h: wrap the arguments to unique_tracking_name()
  checkout tests: index should be clean after dwim checkout
</content>
</entry>
<entry>
<title>checkout: add advice for ambiguous "checkout &lt;branch&gt;"</title>
<updated>2018-06-11T16:41:01Z</updated>
<author>
<name>Ævar Arnfjörð Bjarmason</name>
<email>avarab@gmail.com</email>
</author>
<published>2018-06-05T14:40:48Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=ad8d5104b42108851b082d895018655ad5f9e4f3'/>
<id>urn:sha1:ad8d5104b42108851b082d895018655ad5f9e4f3</id>
<content type='text'>
As the "checkout" documentation describes:

    If &lt;branch&gt; is not found but there does exist a tracking branch in
    exactly one remote (call it &lt;remote&gt;) with a matching name, treat
    as equivalent to [...] &lt;remote&gt;/&lt;branch.

This is a really useful feature. The problem is that when you add
another remote (e.g. a fork), git won't find a unique branch name
anymore, and will instead print this unhelpful message:

    $ git checkout master
    error: pathspec 'master' did not match any file(s) known to git

Now it will, on my git.git checkout, print:

    $ ./git --exec-path=$PWD checkout master
    error: pathspec 'master' did not match any file(s) known to git.
    hint: 'master' matched more than one remote tracking branch.
    hint: We found 26 remotes with a reference that matched. So we fell back
    hint: on trying to resolve the argument as a path, but failed there too!
    hint:
    hint: If you meant to check out a remote tracking branch on, e.g. 'origin',
    hint: you can do so by fully qualifying the name with the --track option:
    hint:
    hint:     git checkout --track origin/&lt;name&gt;

Note that the "error: pathspec[...]" message is still printed. This is
because whatever else checkout may have tried earlier, its final
fallback is to try to resolve the argument as a path. E.g. in this
case:

    $ ./git --exec-path=$PWD checkout master pu
    error: pathspec 'master' did not match any file(s) known to git.
    error: pathspec 'pu' did not match any file(s) known to git.

There we don't print the "hint:" implicitly due to earlier logic
around the DWIM fallback. That fallback is only used if it looks like
we have one argument that might be a branch.

I can't think of an intrinsic reason for why we couldn't in some
future change skip printing the "error: pathspec[...]" error. However,
to do so we'd need to pass something down to checkout_paths() to make
it suppress printing an error on its own, and for us to be confident
that we're not silencing cases where those errors are meaningful.

I don't think that's worth it since determining whether that's the
case could easily change due to future changes in the checkout logic.

Signed-off-by: Ævar Arnfjörð Bjarmason &lt;avarab@gmail.com&gt;
Signed-off-by: Junio C Hamano &lt;gitster@pobox.com&gt;
</content>
</entry>
<entry>
<title>am: move advice.amWorkDir parsing back to advice.c</title>
<updated>2018-05-29T05:51:28Z</updated>
<author>
<name>Nguyễn Thái Ngọc Duy</name>
<email>pclouds@gmail.com</email>
</author>
<published>2018-05-26T13:55:27Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=431bb23a271ef45e22ad4a2def2e0ba0a1954e98'/>
<id>urn:sha1:431bb23a271ef45e22ad4a2def2e0ba0a1954e98</id>
<content type='text'>
The only benefit from this move (apart from cleaner code) is that
advice.amWorkDir should now show up in `git help --config`. There
should be no regression since advice config is always read by the
git_default_config().

While at there, use advise() like other code. We now get "hint: "
prefix and the output is stderr instead of stdout (which is also the
reason for the test update because stderr is checked in a following
test and the extra advice can fail it).

Signed-off-by: Nguyễn Thái Ngọc Duy &lt;pclouds@gmail.com&gt;
Signed-off-by: Junio C Hamano &lt;gitster@pobox.com&gt;
</content>
</entry>
<entry>
<title>advice: keep config name in camelCase in advice_config[]</title>
<updated>2018-05-29T05:51:28Z</updated>
<author>
<name>Nguyễn Thái Ngọc Duy</name>
<email>pclouds@gmail.com</email>
</author>
<published>2018-05-26T13:55:26Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=fb6fbffbdae719805fbf7a39ca268dad17696f82'/>
<id>urn:sha1:fb6fbffbdae719805fbf7a39ca268dad17696f82</id>
<content type='text'>
For parsing, we don't really need this because the main config parser
will lowercase everything so we can do exact matching. But this array
now is also used for printing in `git help --config`. Keep camelCase
so we have a nice printout.

Signed-off-by: Nguyễn Thái Ngọc Duy &lt;pclouds@gmail.com&gt;
Signed-off-by: Junio C Hamano &lt;gitster@pobox.com&gt;
</content>
</entry>
<entry>
<title>help: add --config to list all available config</title>
<updated>2018-05-29T05:51:28Z</updated>
<author>
<name>Nguyễn Thái Ngọc Duy</name>
<email>pclouds@gmail.com</email>
</author>
<published>2018-05-26T13:55:24Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=3ac68a93fd2b984e2a7e570217d2646a208ffcc3'/>
<id>urn:sha1:3ac68a93fd2b984e2a7e570217d2646a208ffcc3</id>
<content type='text'>
Sometimes it helps to list all available config vars so the user can
search for something they want. The config man page can also be used
but it's harder to search if you want to focus on the variable name,
for example.

This is not the best way to collect the available config since it's
not precise. Ideally we should have a centralized list of config in C
code (pretty much like 'struct option'), but that's a lot more work.
This will do for now.

Signed-off-by: Nguyễn Thái Ngọc Duy &lt;pclouds@gmail.com&gt;
Signed-off-by: Junio C Hamano &lt;gitster@pobox.com&gt;
</content>
</entry>
<entry>
<title>Merge branch 'js/deprecate-grafts'</title>
<updated>2018-05-23T05:38:17Z</updated>
<author>
<name>Junio C Hamano</name>
<email>gitster@pobox.com</email>
</author>
<published>2018-05-23T05:38:17Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=352cf6cfe138b1dbcf9c105c91ca793b67511d7b'/>
<id>urn:sha1:352cf6cfe138b1dbcf9c105c91ca793b67511d7b</id>
<content type='text'>
The functionality of "$GIT_DIR/info/grafts" has been superseded by
the "refs/replace/" mechanism for some time now, but the internal
code had support for it in many places, which has been cleaned up
in order to drop support of the "grafts" mechanism.

* js/deprecate-grafts:
  Remove obsolete script to convert grafts to replace refs
  technical/shallow: describe why shallow cannot use replace refs
  technical/shallow: stop referring to grafts
  filter-branch: stop suggesting to use grafts
  Deprecate support for .git/info/grafts
  Add a test for `git replace --convert-graft-file`
  replace: introduce --convert-graft-file
  replace: prepare create_graft() for converting graft files wholesale
  replace: "libify" create_graft() and callees
  replace: avoid using die() to indicate a bug
  commit: Let the callback of for_each_mergetag return on error
  argv_array: offer to split a string by whitespace
</content>
</entry>
<entry>
<title>Deprecate support for .git/info/grafts</title>
<updated>2018-04-30T02:12:31Z</updated>
<author>
<name>Johannes Schindelin</name>
<email>johannes.schindelin@gmx.de</email>
</author>
<published>2018-04-28T22:44:44Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=f9f99b3f7d06716336b239bcf122eb5a7348bfd5'/>
<id>urn:sha1:f9f99b3f7d06716336b239bcf122eb5a7348bfd5</id>
<content type='text'>
The grafts feature was a convenient way to "stitch together" ancient
history to the fresh start of linux.git.

Its implementation is, however, not up to Git's standards, as there are
too many ways where it can lead to surprising and unwelcome behavior.

For example, when pushing from a repository with active grafts, it is
possible to miss commits that have been "grafted out", resulting in a
broken state on the other side.

Also, the grafts feature is limited to "rewriting" commits' list of
parents, it cannot replace anything else.

The much younger feature implemented as `git replace` set out to remedy
those limitations and dangerous bugs.

Seeing as `git replace` is pretty mature by now (since 4228e8bc98
(replace: add --graft option, 2014-07-19) it can perform the graft
file's duties), it is time to deprecate support for the graft file, and
to retire it eventually.

Signed-off-by: Johannes Schindelin &lt;johannes.schindelin@gmx.de&gt;
Reviewed-by: Stefan Beller &lt;sbeller@google.com&gt;
Signed-off-by: Junio C Hamano &lt;gitster@pobox.com&gt;
</content>
</entry>
<entry>
<title>push: colorize errors</title>
<updated>2018-04-24T01:38:47Z</updated>
<author>
<name>Ryan Dammrose</name>
<email>ryandammrose@gmail.com</email>
</author>
<published>2018-04-21T10:10:00Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=960786e7618942357c45e7e4c234f113e0aea9b1'/>
<id>urn:sha1:960786e7618942357c45e7e4c234f113e0aea9b1</id>
<content type='text'>
This is an attempt to resolve an issue I experience with people that are
new to Git -- especially colleagues in a team setting -- where they miss
that their push to a remote location failed because the failure and
success both return a block of white text.

An example is if I push something to a remote repository and then a
colleague attempts to push to the same remote repository and the push
fails because it requires them to pull first, but they don't notice
because a success and failure both return a block of white text. They
then continue about their business, thinking it has been successfully
pushed.

This patch colorizes the errors and hints (in red and yellow,
respectively) so whenever there is a failure when pushing to a remote
repository that fails, it is more noticeable.

[jes: fixed a couple bugs, added the color.{advice,push,transport}
settings, refactored to use want_color_stderr().]

Signed-off-by: Ryan Dammrose ryandammrose@gmail.com
Signed-off-by: Johannes Schindelin &lt;johannes.schindelin@gmx.de&gt;
Signed-off-by: Junio C Hamano &lt;gitster@pobox.com&gt;
</content>
</entry>
</feed>
