Please trim the replied mails a bit, snipping old and irrelevant parts. This is insane. :-) Dear diary, on Thu, Apr 14, 2005 at 10:38:25AM CEST, I got a letter where Martin Schlemmer <azarah@nosferatu.za.org> told me that... ..snip.. > Normalize show-diff output, add --update-modes target to update-cache, > and make sure we only show real changes after changing the tracked > branch, as well as update the file modes according to the cache. I'm lost. Why do you do --update-modes? That makes no sense to me. You introduce them to the cache out-of-order w.r.t. commits, that means in the normal git usage they are already unrevertable. What are you trying to do? Mode changes _are_ real changes. You _don't_ want to silence them. What you want is to even show them more explicitly in show-diff. The --refreshes are fine. > Signed-off-by: Martin Schlemmer <azarah@nosferatu.za.org> > > gitcancel.sh: ec58f7444a42cd3cbaae919fc68c70a3866420c0 > --- ec58f7444a42cd3cbaae919fc68c70a3866420c0/gitcancel.sh > +++ uncommitted/gitcancel.sh > @@ -12,7 +12,8 @@ > > # FIXME: Does not revert mode changes! > > -show-diff | patch -p0 -R > +show-diff | patch -p1 -R > rm -f .git/add-queue .git/rm-queue .git/merged > > -update-cache --refresh > +# --update-modes need to be before --refresh > +update-cache --update-modes --refresh Here, e.g., you should do the very opposite - change the modes back to how are they in the cache. > show-diff.c: a531ca4078525d1c8dcf84aae0bfa89fed6e5d96 > --- a531ca4078525d1c8dcf84aae0bfa89fed6e5d96/show-diff.c > +++ uncommitted/show-diff.c > @@ -5,13 +5,18 @@ > */ > #include "cache.h" > > -static void show_differences(char *name, > +static void show_differences(struct cache_entry *ce, > void *old_contents, unsigned long long old_size) > { > static char cmd[1000]; > + static char sha1[41]; > + int n; > FILE *f; > > - snprintf(cmd, sizeof(cmd), "diff -L %s -u -N - %s", name, name); > + for (n = 0; n < 20; n++) > + snprintf(&(sha1[n*2]), 3, "%02x", ce->sha1[n]); > + snprintf(cmd, sizeof(cmd), "diff -L %s/%s -L uncommitted/%s -u -N - %s", > + sha1, ce->name, ce->name, ce->name); The "directory" sha1 is the sha1 of the tree, not of the particular file - that one is in the "attributes" list (parentheses after the filename), together with mode. > f = popen(cmd, "w"); > if (old_size) > fwrite(old_contents, old_size, 1, f); > @@ -99,7 +104,7 @@ > continue; > > new = read_sha1_file(ce->sha1, type, &size); > - show_differences(ce->name, new, size); > + show_differences(ce, new, size); > free(new); > } > return 0; > update-cache.c: 62d0a6c41560d40863c44599355af10d9e089312 > --- 62d0a6c41560d40863c44599355af10d9e089312/update-cache.c > +++ uncommitted/update-cache.c > @@ -210,6 +210,39 @@ > } > } > > +static struct cache_entry *update_file_mode(struct cache_entry *ce) > +{ > + struct stat st; > + int changed; > + > + if (stat(ce->name, &st) < 0) > + return NULL; > + > + changed = cache_match_stat(ce, &st); > + if (!changed) > + return ce; > + > + if (changed & MODE_CHANGED) > + if (chmod(ce->name, ce->st_mode)) > + return NULL; > + > + return ce; > +} > + > +static void update_modes(void) > +{ > + int i; > + > + for (i = 0; i < active_nr; i++) { > + struct cache_entry *ce = active_cache[i]; > + > + if (!update_file_mode(ce)) { > + printf("%s: needs update\n", ce->name); > + continue; > + } > + } > +} > + > /* > * We fundamentally don't like some paths: we don't want > * dot or dot-dot anywhere, and in fact, we don't even want Oh. So you are actually doing the _opposite_! But that's very wrong too. update-cache is for the direction tree -> index. For the opposite direction, you should use checkout-cache. > @@ -282,6 +315,10 @@ > refresh_cache(); > continue; > } > + if (!strcmp(path, "--update-modes")) { > + update_modes(); > + continue; > + } > die("unknown option %s", path); > } > if (!verify_path(path)) { > > > -- > Martin Schlemmer > -- Petr "Pasky" Baudis Stuff: http://pasky.or.cz/ C++: an octopus made by nailing extra legs onto a dog. -- Steve Taylor - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.htmlReceived on Thu Apr 14 19:11:37 2005
This archive was generated by hypermail 2.1.8 : 2005-04-15 11:38:20 EST