On Saturday 03 March 2007 01:12, Junio C Hamano wrote: > Junio C Hamano <junkio@xxxxxxx> writes: > > This code (I am the guilty one before your change above) always > > confused me. How about doing something like this instead? > > > > static inline unsigned int ce_mode_from_stat(struct cache_entry > > *ce,... { > > /* > > * A regular file that appears on the filesystem can have > > * a "wrong" st_mode information. A few repository config > > * variables can tell us to trust the mode recorded in the > > * index more than what we get from the filesystem. > > */ > > if (ce && S_ISREG(mode)) { > > extern int trust_executable_bit, has_symlinks; > > > > if (!has_symlinks && S_ISLNK(ntohl(ce->ce_mode))) > > return ce->ce_mode; > > Oops, these three lines > > > if (!trust_executable_bit && S_ISREG(ntohl(ce->ce_mode))) > > return ce->ce_mode; > > return create_ce_mode(0666); > > should be: > > if (!trust...) { > if (S_ISREG(...)) > return ce->ce_mode; > return create_ce_mode(0666); > } I think that's still not correct. Because in the case of !trust_executable_bit we want create_ce_mode(0666) regardless of whether a ce exists or not. Maybe this way: static inline unsigned int ce_mode_from_stat(struct cache_entry *ce,... { /* * A regular file that appears on the filesystem can have * a "wrong" st_mode information. A few repository config * variables can tell us to trust the mode recorded in the * index more than what we get from the filesystem. */ if (S_ISREG(mode)) { extern int trust_executable_bit, has_symlinks; if (!has_symlinks && ce && S_ISLNK(ntohl(ce->ce_mode))) return ce->ce_mode; if (!trust_executable_bit) { if (ce && S_ISREG(ntohl(ce->ce_mode))) return ce->ce_mode; return create_ce_mode(0666); } } return create_ce_mode(mode); } -- Hannes - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html