git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: Nanako Shiraishi <nanako3@lavabit.com>
Cc: Jeff King <peff@peff.net>, Clemens Buchacher <drizzd@aon.at>,
	SZEDER Gbor <szeder@ira.uka.de>,
	git@vger.kernel.org
Subject: Re: [BUG] 'add -u' doesn't work from untracked subdir
Date: Thu, 10 Sep 2009 12:53:40 -0700	[thread overview]
Message-ID: <7vmy527f0b.fsf@alter.siamese.dyndns.org> (raw)
In-Reply-To: 20090910084653.6117@nanako3.lavabit.com

Nanako Shiraishi <nanako3@lavabit.com> writes:

> Quoting Junio C Hamano <gitster@pobox.com>
>
>> We could probably declare "In 1.X.0 everything will be relative to the
>> root and you have to give an explicit '.' if you mean the cwd".
>>
>> Three questions:
>>
>>  #1 What are the commands that will be affected, other than "add -u" and
>>     "grep"?  Are there others?
>>
>>  #2 Do all the commands in the answer to #1 currently behave exactly the
>>     same when run without any path parameter and when run with a single
>>     '.'?
>
> 'git-archive' behaves relative to your current directory.
>
>   http://thread.gmane.org/gmane.comp.version-control.git/41300/focus=44125
>
> You can limit it to the current directory with a dot.

Thanks.

If you want to make a tarball of the Documentation directory from your
work tree, you do this:

    $ cd Documentation
    $ tar cf - . >/tmp/docs.tar

If you want to do the same but from your committed content, you do this:

    $ cd Documentation
    $ git archive HEAD >/tmp/docs.tar

and you do not have to say:

    $ cd Documentation
    $ git archive HEAD . >/tmp/docs.tar

So in that sense it does make sense to archive the current directory.  It
matches what the users expect from their archivers.

The traditional archivers may not default to "." but we do.  That is about
giving a sensible default [*1*].  Perhaps defaulting to the cwd behaviour
for one command may seem a sensible thing when looking at that particular
command alone; archive and grep fall into that category.

But as this "add -u" discussion showed us [*2*], people may expect
different "sensible default", and as a suite of commands as the whole, it
becomes messy.  People have to remember which ones obey cwd, and to some
people the choice is not intuitive.

To avoid confusion, I am beginning to agree with people who said in the
thread that it is a good idea to consistently default to the root of the
contents.  When we use "everything" as the default due to lack of command
line pathspec, we would use "everything from root" no matter where you
are, regardless of what command we are talking about.  That would make the
rule easier to remember [*3*].

This changes the way how "git (add -u|grep|clean|archive)" without
pathspec and "git (add -u|grep|clean|archive) ." with an explicit dot
work.  The former (adds all changed files in, finds hits in, removes
untracked paths in, creates a tarball for) the whole tree, while the
latter limits the operation explicitly to the current directory.

If this were going to happen as a list concensus, I am very tempted to
suggest that we at least _consider_ applying the same rule even to
ls-files and ls-tree.  That would impact scripts, so we need to be extra
careful, though.

Also this takes us to a tangent.

If we try to give a sensible default to make it easier for the user,
perhaps we should also default to HEAD when the user did not specify which
tree-ish to archive from.  This is a topic in a separate thread.

[Footnote]

*1* Actually we don't allow "git archive HEAD ..", which I think is a
bug.  Also we do not have --full-tree workaround, which makes it slightly
cumbersome to use.

*2* And the thread you quoted shows us that the argument applies equally
to "git archive" as well; you see me complaining that it is unintuitive
for me to care about "archive", and the counterargument was that ls-tree
does so.  I however think it is more important for archive to behave in a
way that is easier for the users to understand, than mimick the historical
mistake in a plumbing command.

*3* Command line pathspec of course should honor cwd as before.  When you
say "git distim Makefile" inside t/ directory, we distim t/Makefile, not
the toplevel Makefile.  This discussion is only about the case where the
user didn't give us any pathspec.

  reply	other threads:[~2009-09-10 19:54 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-09-02  8:03 [BUG] 'add -u' doesn't work from untracked subdir SZEDER Gábor
2009-09-02  8:19 ` Jeff King
2009-09-04  7:02   ` Clemens Buchacher
2009-09-05  6:18     ` Jeff King
2009-09-05  7:02       ` Junio C Hamano
2009-09-05  7:20         ` Jeff King
2009-09-05  7:58           ` Junio C Hamano
2009-09-05  8:02             ` Jeff King
2009-09-05  8:23               ` Junio C Hamano
2009-09-06 18:28                 ` Clemens Buchacher
2009-09-09 23:46                 ` Nanako Shiraishi
2009-09-10 19:53                   ` Junio C Hamano [this message]
2009-09-10 20:32                     ` Clemens Buchacher
2009-09-05 12:31             ` [PATCH 1/2] grep: accept relative paths outside current working directory Clemens Buchacher
2009-09-05 12:33               ` [PATCH 2/2] add 'scope' config option Clemens Buchacher
2009-09-05 13:10                 ` [PATCH 2/2 v2] " Clemens Buchacher
2009-09-06 22:58               ` [PATCH 1/2] grep: accept relative paths outside current working directory Junio C Hamano
2009-09-07  8:48                 ` [PATCH] grep: fix exit status if external_grep() returns error Clemens Buchacher
2009-09-07 18:13                   ` Junio C Hamano
2009-09-05  8:19           ` [BUG] 'add -u' doesn't work from untracked subdir Jeff King
2009-09-05  7:25         ` Junio C Hamano
2009-09-05  8:46         ` Clemens Buchacher
2009-09-05 17:28           ` Junio C Hamano
2009-09-05 17:58             ` Jakub Narebski
2009-09-05 18:45             ` Clemens Buchacher
2009-09-05 21:46               ` 'add -u' without path is relative to cwd Junio C Hamano
2009-09-06 12:32           ` [BUG] 'add -u' doesn't work from untracked subdir Matthieu Moy
2009-09-06 18:16             ` Clemens Buchacher
2009-09-07  6:23               ` Matthieu Moy
2009-09-07  7:33                 ` SZEDER Gábor
2009-09-07  8:06                   ` Matthieu Moy
2009-09-07  0:07           ` Nanako Shiraishi
2009-09-07  5:07             ` Junio C Hamano
2009-09-07  7:50             ` Clemens Buchacher
2009-09-04  8:32   ` SZEDER Gábor

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=7vmy527f0b.fsf@alter.siamese.dyndns.org \
    --to=gitster@pobox.com \
    --cc=drizzd@aon.at \
    --cc=git@vger.kernel.org \
    --cc=nanako3@lavabit.com \
    --cc=peff@peff.net \
    --cc=szeder@ira.uka.de \
    /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).