All of lore.kernel.org
 help / color / mirror / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: Yuki Kokubun <orga.chem.job@gmail.com>
Cc: git@vger.kernel.org
Subject: Re: [PATCH] filter-branch: consider refs can refer to an object other than commit or tag
Date: Thu, 22 Mar 2018 10:01:36 -0700	[thread overview]
Message-ID: <xmqq370sm4cv.fsf@gitster-ct.c.googlers.com> (raw)
In-Reply-To: <5ab3bd79.d14d650a.be5c0.8544@mx.google.com> (Yuki Kokubun's message of "Thu, 22 Mar 2018 14:26:10 +0000")

Yuki Kokubun <orga.chem.job@gmail.com> writes:

>> Yuki Kokubun <orga.chem.job@gmail.com> writes:
>> 
>> >> Yuki Kokubun <orga.chem.job@gmail.com> writes:
>> >> 
>> >> > "git filter-branch -- --all" can be confused when refs that refer to objects
>> >> > other than commits or tags exists.
>> ...
>
> I meant the confusion is abnormal messages from the output of "git filter-branch -- --all".

OK, so it is not that the program logic gets confused and ends up
performing a wrong rewrite, but mostly that it gives confusing
messages.

> For example, this is an output of "git filter-branch -- --all":
>
> Rewrite bcdbd016c77df3d5641a3cf820b2ed46ba7bf3b4 (5/5) (0 seconds passed, remaining 0 predicted)
> WARNING: Ref 'refs/heads/master' is unchanged
> WARNING: Ref 'refs/heads/no-newline' is unchanged
> WARNING: Ref 'refs/heads/original' is unchanged

These are worth keeping, as I think existing users expect to see
them.

> error: object 1bf53b49c26465454e4ac377f2ed3f91bb1d6ac1 is a tree, not a commit
> error: object 1bf53b49c26465454e4ac377f2ed3f91bb1d6ac1 is a tree, not a commit
> fatal: ambiguous argument 'refs/replace/8a2016f3730cad8309c110f819c855403ed0a5b9^0': unknown revision or path not in the working tree.
> Use '--' to separate paths from revisions, like this:
> 'git <command> [<revision>...] -- [<file>...]'
> WARNING: Ref 'refs/replace/8a2016f3730cad8309c110f819c855403ed0a5b9' is unchanged
> WARNING: Ref 'refs/tags/add-file' is unchanged
> WARNING: Ref 'refs/tags/file' is unchanged
> error: object 1bf53b49c26465454e4ac377f2ed3f91bb1d6ac1 is a tree, not a commit
> error: object 1bf53b49c26465454e4ac377f2ed3f91bb1d6ac1 is a tree, not a commit
> fatal: ambiguous argument 'refs/tags/treetag^0': unknown revision or path not in the working tree.
> Use '--' to separate paths from revisions, like this:
> 'git <command> [<revision>...] -- [<file>...]'
> WARNING: Ref 'refs/tags/treetag' is unchanged

I think these warning messages should be kept, especially if we are
to keep the warning messages for the unchanged branches.  However,
the internal error messages are unwanted--these are implementation
details that reach the conclusion, i.e. the ref we were asked to
rewrite ended up being unchanged hence we did not touch it.

However, if we pre-filter to limit the refs in "$tempdir/heads" to
those that are committish (i.e. those that pass "$ref^0") like the
patch and subsequent discussion suggests, wouldn't we lose the
warning for these replace refs and non-committish tags.  We perhaps
could do something like:

	git rev-parse --no-flags ... >"$tempdir/raw-heads" || exit

	while read ref
	do
		case "$ref" in ^?*) continue ;; esac
		if git rev-parse --verify "$ref^0" 2>/dev/null
                then
			echo "$ref"
		else
			warn "WARNING: not rewriting '$ref' (not a committish)"
		fi
	done >"$tempdir/heads" <"$tempdir/raw-heads"

(note: the else clause is new, relative to my earlier suggestion).

  reply	other threads:[~2018-03-22 17:01 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-03-21 10:35 [PATCH] filter-branch: consider refs/replace can refer to an object other than commit Yuki Kokubun
2018-03-21 15:31 ` [PATCH] filter-branch: consider refs can refer to an object other than commit or tag Yuki Kokubun
2018-03-21 17:21   ` Junio C Hamano
2018-03-21 20:00     ` Yuki Kokubun
2018-03-21 20:00       ` Junio C Hamano
2018-03-22 14:26         ` Yuki Kokubun
2018-03-22 17:01           ` Junio C Hamano [this message]
2018-03-23  2:15             ` Yuki Kokubun
2018-03-23  5:09               ` [PATCH v2] filter-branch: fix errors caused by refs that cannot be used with ^0 Yuki Kokubun
2018-03-23 20:20                 ` Junio C Hamano
2018-03-24 19:29                   ` [PATCH] filter-branch: consider refs can refer to an object other than commit or tag Yuki Kokubun
2018-03-24 19:41                   ` [PATCH v3] filter-branch: fix errors caused by refs that point at non-committish Yuki Kokubun
2018-03-25 16:25                     ` Junio C Hamano
2018-03-25 16:39                       ` Yuki Kokubun
2018-03-25 20:24                         ` Junio C Hamano
2018-03-25 16:54                       ` [PATCH v4] " Yuki Kokubun
2018-03-25 16:45                         ` Yuki Kokubun
2018-04-08 23:10                           ` Junio C Hamano
2018-03-25 17:01                         ` [PATCH v5] " Yuki Kokubun
2018-03-25 17:13                         ` [PATCH v4] " 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

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=xmqq370sm4cv.fsf@gitster-ct.c.googlers.com \
    --to=gitster@pobox.com \
    --cc=git@vger.kernel.org \
    --cc=orga.chem.job@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.