threads / discuss / 3545

Producing tar file with 666/777 permissions

Subject: Producing tar file with 666/777 permissions

## tl;dr

3 messages between Mar 4, 2006 and Mar 4, 2006.

replies: 2people: 2as markdown or json

Matt McCutchen· Mar 4, 2006, 04:25 UTC · lore
Dear GIT people,

How do I package a git repository in a tar file with 666 and 777 embedded permissions? There's evidently some way to do it because the Linux kernel source packages have 666 and 777 embedded permissions, but git-tar-tree gives me a tar file with 644 and 755 permissions and there's no obvious way to tell it to do otherwise.

There was lots of discussion on the mailing list about what permissions to preserve when copying in and out of repositories (I obviously side with those who want a single execute bit), but I could not find any mention of permission issues in reference to git-tar-tree.

Please reply to me as I am off-list.
-- 
Matt McCutchen
hashproduct@verizon.net
http://hashproduct.metaesthetics.net/
Junio C Hamano· Mar 4, 2006, 05:03 UTC · re: Matt McCutchen · lore

Re: Producing tar file with 666/777 permissions

Matt McCutchen <hashproduct@verizon.net> writes:
Show 7 quoted lines
> Dear GIT people,
>
> How do I package a git repository in a tar file with 666 and 777
> embedded permissions?  There's evidently some way to do it because the
> Linux kernel source packages have 666 and 777 embedded permissions, but
> git-tar-tree gives me a tar file with 644 and 755 permissions and
> there's no obvious way to tell it to do otherwise.

Ouch, thanks for reporting this. You have spotted a recent regression.

Junio C Hamano· Mar 4, 2006, 05:35 UTC · re: Matt McCutchen · lore

[PATCH] tar-tree: file/dirmode fix.

This fixes two bugs introduced when we switched to generic tree traversal code.

 (1) directory mode recorded silently became 0755, not 0777
 (2) if passed a tree object (not a commit), it emitted an
     alarming error message (but proceeded anyway).
Signed-off-by: Junio C Hamano <junkio@cox.net>
---
 tar-tree.c |   10 ++++++----
 1 files changed, 6 insertions(+), 4 deletions(-)
815afaf1bd0ddf419231d2d9f129260ce1ddbecc
diff --git a/tar-tree.c b/tar-tree.c
index e85a1ed..e478e13 100644
--- a/tar-tree.c
+++ b/tar-tree.c
@@ -304,9 +304,11 @@ static void write_header(const unsigned 
 	}
 
 	if (S_ISDIR(mode))
-		mode |= 0755;	/* GIT doesn't store permissions of dirs */
-	if (S_ISLNK(mode))
-		mode |= 0777;   /* ... nor of symlinks */
+		mode |= 0777;
+	else if (S_ISREG(mode))
+		mode |= (mode & 0100) ? 0777 : 0666;
+	else if (S_ISLNK(mode))
+		mode |= 0777;
 	sprintf(&header[100], "%07o", mode & 07777);
 
 	/* XXX: should we provide more meaningful info here? */
@@ -391,7 +393,7 @@ int main(int argc, char **argv)
 		usage(tar_tree_usage);
 	}
 
-	commit = lookup_commit_reference(sha1);
+	commit = lookup_commit_reference_gently(sha1, 1);
 	if (commit) {
 		write_global_extended_header(commit->object.sha1);
 		archive_time = commit->date;
-- 
1.2.4.gfe04

← back to recent threads