From: Junio C Hamano Date: Mon, 21 Jan 2013 19:27:45 GMT Subject: Re: [PATCH 1/2] Update :/abc ambiguity check Message-ID: <7vsj5ufia6.fsf@alter.siamese.dyndns.org> In-Reply-To: <1358773249-24384-1-git-send-email-pclouds@gmail.com> Nguyễn Thái Ngọc Duy writes: > :/abc may mean two things: > > - as a revision, it means the revision that has "abc" in commit > message. > > - as a pathpec, it means "abc" from root. > > Currently we see ":/abc" as a rev (most of the time), but never see it > as a pathspec even if "abc" exists and "git log :/abc" will gladly > take ":/abc" as rev even it's ambiguous. This patch makes it: > > - ambiguous when "abc" exists on worktree > - a rev if abc does not exist on worktree > - a path if abc is not found in any commits (although better use The "any commits" above sounds very scary. Are you really going to check against all the commits? > "--" to avoid ambiguation because searching through commit DAG is > expensive) > > A plus from this patch is, because ":/" never matches anything as a > rev, it is never considered a valid rev and because root directory > always exists, ":/" is always unambiguously seen as a pathspec. That is the primary plus in practice, I think, and it is a big one. When naming a directory that belongs to a different subdirectory hierarchy, typing ":/that/directory/name" is not any easier than having your shell help you complete "../../that/directory/name"; I suspect nobody uses the relative-to-root notation to name anything but the root in real life.