I'm sharing a git repository with a colleague, and because git does not propagate the full panoply of Unix file permissions, we have a "hook" that runs on update which sets the 'other' permissions as they need to be set. The problem? The hook uses chmod, and it turns out that when my colleague commits a file, he owns it, so I can't run chmod on it, and vice versa. The directories are all group writable, sticky, so I believe that either of us has the right to remove any file and replace it with one of the same name, same contents, but different ownership. Presumably then we could chmod it. But this seems like an awfully big hammer, and I'm a bit leery of screwing it up. So, two questions:
Can anybody think of another way to do it?
If not, what's the best design for a bulletproof shell script that implements "make this file belong to me"? No cross-filesystem moves, etc etc...
For those who may not have realized, write permission does not confer permission to chmod:
% ls -l value.c -rw-rw---- 1 agallant ta105 133 Feb 10 13:37 value.c % [ -w value.c ] && echo writeable writeable % chmod o+r value.c chmod: changing permissions of `value.c': Operation not permitted We are both in the ta105 group.
Notes:
We're using
gitnot only to coordinate changes but to publish the repo as a course web site. Publishing the web site is the primary purpose of the repo. The permissions script runs at every update using a git hook, and it ensures that students do not have permission to read solutions that have not yet been unveiled.Please do not suggest that I have the wrong umask. Not all files in the repo should have the same permissions, and whatever umask is chosen, permissions on some files will need to be changed. Not to mention that it would be discourteous for me to impose my umask preferences on my colleagues.
UPDATE: I've just learned that in our environment, root is quashed to
nobodyon all machines we have access to, so that a solution which relies on root privileges won't work.
drwxrwxr_xor something like that? You probably wantdrwxrwsr_x. Your current directory permissions would help to clarify.man 2 chmod, you need to be the owner or the superuser to change a file's permissions. The parent directory's permissions aren't mentioned, and seem like they should be irrelevant as the permissions are stored in the inode, not in the directory (otherwise two hard links to the same file could have different permissions).