Re: [PATCH] reset: trivial refactoring

2013-06-13 Thread Martin von Zweigbergk
On Thu, Jun 13, 2013 at 11:15 AM, Felipe Contreras
felipe.contre...@gmail.com wrote:
 @@ -82,7 +82,7 @@ static int reset_index(const unsigned char *sha1, int 
 reset_type, int quiet)
 if (unpack_trees(nr, desc, opts))
 return -1;

 -   if (reset_type == MIXED || reset_type == HARD) {
 +   if (reset_type == HARD) {

Are you sure that this can not be reached given that...

 @@ -323,8 +323,11 @@ int cmd_reset(int argc, const char **argv, const char 
 *prefix)
 struct lock_file *lock = xcalloc(1, sizeof(struct lock_file));
 int newfd = hold_locked_index(lock, 1);
 if (reset_type == MIXED) {
 +   int flags = quiet ? REFRESH_QUIET : 
 REFRESH_IN_PORCELAIN;
 if (read_from_tree(pathspec, sha1))
 return 1;
 +   refresh_index(the_index, flags, NULL, NULL,
 + _(Unstaged changes after reset:));
 } else {
 int err = reset_index(sha1, reset_type, quiet);
 if (reset_type == KEEP  !err)

...the line after this one reads

   err = reset_index(sha1, MIXED, quiet);

? I don't know what the consequence of not calling prime_cache_tree()
would be, though.

The merging of the two if blocks looks good. Thanks.
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] reset: trivial refactoring

2013-06-13 Thread Felipe Contreras
On Thu, Jun 13, 2013 at 4:13 PM, Martin von Zweigbergk
martinv...@gmail.com wrote:
 On Thu, Jun 13, 2013 at 11:15 AM, Felipe Contreras
 felipe.contre...@gmail.com wrote:
 @@ -82,7 +82,7 @@ static int reset_index(const unsigned char *sha1, int 
 reset_type, int quiet)
 if (unpack_trees(nr, desc, opts))
 return -1;

 -   if (reset_type == MIXED || reset_type == HARD) {
 +   if (reset_type == HARD) {

 Are you sure that this can not be reached given that...

 @@ -323,8 +323,11 @@ int cmd_reset(int argc, const char **argv, const char 
 *prefix)
 struct lock_file *lock = xcalloc(1, sizeof(struct 
 lock_file));
 int newfd = hold_locked_index(lock, 1);
 if (reset_type == MIXED) {
 +   int flags = quiet ? REFRESH_QUIET : 
 REFRESH_IN_PORCELAIN;
 if (read_from_tree(pathspec, sha1))
 return 1;
 +   refresh_index(the_index, flags, NULL, NULL,
 + _(Unstaged changes after reset:));
 } else {
 int err = reset_index(sha1, reset_type, quiet);
 if (reset_type == KEEP  !err)

 ...the line after this one reads

err = reset_index(sha1, MIXED, quiet);

That's true. Only the rest of the patch makes sense then. It seems
there should be a way to have a single call reset_index(KEEP), so we
don't have to call again with MIXED, but perhaps that's for later.

-- 
Felipe Contreras
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] reset: trivial refactoring

2013-06-13 Thread Junio C Hamano
Martin von Zweigbergk martinv...@gmail.com writes:

 ...the line after this one reads

err = reset_index(sha1, MIXED, quiet);

 ? I don't know what the consequence of not calling prime_cache_tree()
 would be, though.

It does not affect correctness, but makes the subsequent git
status, the part that internally computes diff-cache --index to
see what changes have been added to the index, more costly.

After doing reset --hard $commit or just reset $commit, we know
that the contents of the index must match $commit^{tree}, and
writing out any subpart of the index that corresponds to a directory
(including the top-level one, i.e. the whole index) must match the
corresponding subtree of $commit^{tree}.  And that is why we prime
the cache-tree that was discarded by unpack_trees() at the very end.
Then incremental git add to the resulting index after that can
invalidate only the parts of the index and cache-tree while
relieving the next write-tree (most often done by the next git
commit) from having to compute the tree objects for parts of the
index that have not been touched since the reset operation.

I do not use reset --keep $commit very often myself, but IIRC, it
is like checkout $commit (and not checkout -m $commit) in that
the resulting index matches $commit^{tree}, so I think priming the
cache-tree just like --hard/--mixed is the right thing to do.
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html