Re: [PATCH] git-init: don't base core.filemode on the ability to chmod.
From: Andreas Ericsson <hidden>
Date: 2016-06-15 22:43:38
Junio C Hamano wrote:
Andreas Ericsson [off-list ref] writes:quoted
Johannes Schindelin wrote:quoted
Hi, On Thu, 4 Oct 2007, Martin Waitz wrote:quoted
- filemode = (!chmod(path, st1.st_mode ^ S_IXUSR) && + /* test that new files are not created with X bit */ + filemode = !(st1.st_mode & S_IXUSR); + /* test that we can modify the X bit */ + filemode &= (!chmod(path, st1.st_mode ^ S_IXUSR) &&Should that not be &&=?I should think |=Is it?
Nopes. I misread the first expression and simply assumed that "filemode" should be != 0 for FS not supporting the x bit. I'd rename the variable to bogus_fs and flip the logic, but I have no strong opinion either way.
So I think we can write it like this (indentation aside)...
filemode = !( (st1.st_mode & S_IXUSR)
/* we did not ask for x-bit -- bogus FS */
|| chmod(path, st1.st_mode & S_IXUSR)
/* it does not let us flip x-bit -- bogus FS */
|| lstat(path, &st2)
/* it does not let us read back -- bogus FS */
|| (st1.st_mode == st2.st_mode)
/* it forgets we flipped -- bogus FS */
);For "filemode=0 means FS doesn't support x-bit" it looks about right, but kinda cumbersome to read. -- Andreas Ericsson andreas.ericsson@op5.se OP5 AB www.op5.se Tel: +46 8-230225 Fax: +46 8-230231