post-checkout: don't modify permissions of untracked files
Git doesn't know about untracked files, so we should avoid modifying them when we adjust permissions in the post-checkout hook. Add an option to our invocation of git ls-files that controls the use of the --others flag (which controls listing untracked files), and disable it when we're looking for files to process with the post-checkout hook.
This commit is contained in:
parent
66d4b17609
commit
cd1577af24
@ -177,7 +177,7 @@ func findAttributeFiles(workingDir, gitDir string) []attrFile {
|
|||||||
paths = append(paths, attrFile{path: repoAttributes, readMacros: true})
|
paths = append(paths, attrFile{path: repoAttributes, readMacros: true})
|
||||||
}
|
}
|
||||||
|
|
||||||
lsFiles, err := NewLsFiles(workingDir, true)
|
lsFiles, err := NewLsFiles(workingDir, true, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
tracerx.Printf("Error finding .gitattributes: %v", err)
|
tracerx.Printf("Error finding .gitattributes: %v", err)
|
||||||
return paths
|
return paths
|
||||||
|
@ -20,18 +20,20 @@ type LsFiles struct {
|
|||||||
FilesByName map[string][]*lsFileInfo
|
FilesByName map[string][]*lsFileInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewLsFiles(workingDir string, standardExclude bool) (*LsFiles, error) {
|
func NewLsFiles(workingDir string, standardExclude bool, untracked bool) (*LsFiles, error) {
|
||||||
|
|
||||||
args := []string{
|
args := []string{
|
||||||
"ls-files",
|
"ls-files",
|
||||||
"-z", // Use a NUL separator. This also disables the escaping of special characters.
|
"-z", // Use a NUL separator. This also disables the escaping of special characters.
|
||||||
"--others",
|
|
||||||
"--cached",
|
"--cached",
|
||||||
}
|
}
|
||||||
|
|
||||||
if standardExclude {
|
if standardExclude {
|
||||||
args = append(args, "--exclude-standard")
|
args = append(args, "--exclude-standard")
|
||||||
}
|
}
|
||||||
|
if untracked {
|
||||||
|
args = append(args, "--others")
|
||||||
|
}
|
||||||
cmd := gitNoLFS(args...)
|
cmd := gitNoLFS(args...)
|
||||||
cmd.Dir = workingDir
|
cmd.Dir = workingDir
|
||||||
|
|
||||||
|
@ -113,7 +113,7 @@ func (c *Client) FixFileWriteFlagsInDir(dir string, lockablePatterns, unlockable
|
|||||||
func (c *Client) fixFileWriteFlags(absPath, workingDir string, lockable, unlockable *filepathfilter.Filter) error {
|
func (c *Client) fixFileWriteFlags(absPath, workingDir string, lockable, unlockable *filepathfilter.Filter) error {
|
||||||
|
|
||||||
// Build a list of files
|
// Build a list of files
|
||||||
lsFiles, err := git.NewLsFiles(workingDir, !c.ModifyIgnoredFiles)
|
lsFiles, err := git.NewLsFiles(workingDir, !c.ModifyIgnoredFiles, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -62,6 +62,8 @@ begin_test "post-checkout"
|
|||||||
|
|
||||||
# this will be main
|
# this will be main
|
||||||
|
|
||||||
|
touch untracked.dat
|
||||||
|
|
||||||
[ "$(cat file1.dat)" == "file 1 updated commit 2" ]
|
[ "$(cat file1.dat)" == "file 1 updated commit 2" ]
|
||||||
[ "$(cat file2.dat)" == "file 2 updated commit 3" ]
|
[ "$(cat file2.dat)" == "file 2 updated commit 3" ]
|
||||||
[ "$(cat file3.big)" == "file 3 creation" ]
|
[ "$(cat file3.big)" == "file 3 creation" ]
|
||||||
@ -71,6 +73,7 @@ begin_test "post-checkout"
|
|||||||
# without the post-checkout hook, any changed files would now be writeable
|
# without the post-checkout hook, any changed files would now be writeable
|
||||||
refute_file_writeable file1.dat
|
refute_file_writeable file1.dat
|
||||||
refute_file_writeable file2.dat
|
refute_file_writeable file2.dat
|
||||||
|
assert_file_writeable untracked.dat
|
||||||
assert_file_writeable file3.big
|
assert_file_writeable file3.big
|
||||||
assert_file_writeable file4.big
|
assert_file_writeable file4.big
|
||||||
|
|
||||||
@ -81,6 +84,7 @@ begin_test "post-checkout"
|
|||||||
refute_file_writeable file1.dat
|
refute_file_writeable file1.dat
|
||||||
refute_file_writeable file2.dat
|
refute_file_writeable file2.dat
|
||||||
refute_file_writeable file5.dat
|
refute_file_writeable file5.dat
|
||||||
|
assert_file_writeable untracked.dat
|
||||||
assert_file_writeable file3.big
|
assert_file_writeable file3.big
|
||||||
assert_file_writeable file4.big
|
assert_file_writeable file4.big
|
||||||
assert_file_writeable file6.big
|
assert_file_writeable file6.big
|
||||||
|
@ -446,6 +446,7 @@ begin_test "track lockable read-only/read-write"
|
|||||||
mkdir subfolder
|
mkdir subfolder
|
||||||
echo "sub blah blah" > subfolder/test.bin
|
echo "sub blah blah" > subfolder/test.bin
|
||||||
echo "sub foo bar" > subfolder/test.dat
|
echo "sub foo bar" > subfolder/test.dat
|
||||||
|
git add *.bin *.dat subfolder
|
||||||
# should start writeable
|
# should start writeable
|
||||||
assert_file_writeable test.bin
|
assert_file_writeable test.bin
|
||||||
assert_file_writeable test.dat
|
assert_file_writeable test.dat
|
||||||
|
Loading…
Reference in New Issue
Block a user