Merge pull request #975 from github/fix-track-patterns

pass gitattributes patterns (mostly) unchanged
This commit is contained in:
risk danger olson 2016-02-04 06:47:55 -09:00
commit 5a37cf552b
2 changed files with 22 additions and 56 deletions

@ -56,36 +56,27 @@ func trackCommand(cmd *cobra.Command, args []string) {
} }
wd, _ := os.Getwd() wd, _ := os.Getwd()
relpath, err := filepath.Rel(lfs.LocalWorkingDir, wd)
if err != nil {
Exit("Current directory %q outside of git working directory %q.", wd, lfs.LocalWorkingDir)
}
ArgsLoop: ArgsLoop:
for _, t := range args { for _, pattern := range args {
absT, relT := absRelPath(t, wd) for _, known := range knownPaths {
if known.Path == filepath.Join(relpath, pattern) {
if !filepath.HasPrefix(absT, lfs.LocalWorkingDir) { Print("%s already supported", pattern)
// check symlinks; LocalWorkingDir has symlinks resolved by rev-parse
// have to resolve dir without track pattern
actualDirT, err := filepath.EvalSymlinks(filepath.Dir(absT))
if err != nil || !filepath.HasPrefix(actualDirT, lfs.LocalWorkingDir) {
Print("%s is outside repository", t)
os.Exit(128)
}
}
for _, k := range knownPaths {
absK, _ := absRelPath(k.Path, filepath.Join(wd, filepath.Dir(k.Source)))
if absT == absK {
Print("%s already supported", t)
continue ArgsLoop continue ArgsLoop
} }
} }
encodedArg := strings.Replace(relT, " ", "[[:space:]]", -1) encodedArg := strings.Replace(pattern, " ", "[[:space:]]", -1)
_, err := attributesFile.WriteString(fmt.Sprintf("%s filter=lfs diff=lfs merge=lfs -text\n", encodedArg)) _, err := attributesFile.WriteString(fmt.Sprintf("%s filter=lfs diff=lfs merge=lfs -text\n", encodedArg))
if err != nil { if err != nil {
Print("Error adding path %s", t) Print("Error adding path %s", pattern)
continue continue
} }
Print("Tracking %s", t) Print("Tracking %s", pattern)
} }
} }
@ -96,7 +87,6 @@ type mediaPath struct {
func findPaths() []mediaPath { func findPaths() []mediaPath {
paths := make([]mediaPath, 0) paths := make([]mediaPath, 0)
wd, _ := os.Getwd()
for _, path := range findAttributeFiles() { for _, path := range findAttributeFiles() {
attributes, err := os.Open(path) attributes, err := os.Open(path)
@ -105,12 +95,18 @@ func findPaths() []mediaPath {
} }
scanner := bufio.NewScanner(attributes) scanner := bufio.NewScanner(attributes)
for scanner.Scan() { for scanner.Scan() {
line := scanner.Text() line := scanner.Text()
if strings.Contains(line, "filter=lfs") { if strings.Contains(line, "filter=lfs") {
fields := strings.Fields(line) fields := strings.Fields(line)
relPath, _ := filepath.Rel(wd, path) relfile, _ := filepath.Rel(lfs.LocalWorkingDir, path)
paths = append(paths, mediaPath{Path: fields[0], Source: relPath}) pattern := fields[0]
if reldir := filepath.Dir(relfile); len(reldir) > 0 {
pattern = filepath.Join(reldir, pattern)
}
paths = append(paths, mediaPath{Path: pattern, Source: relfile})
} }
} }
} }
@ -162,18 +158,6 @@ func needsTrailingLinebreak(filename string) bool {
return !strings.HasSuffix(string(buf[0:bytesRead]), "\n") return !strings.HasSuffix(string(buf[0:bytesRead]), "\n")
} }
// absRelPath takes a path and a working directory and
// returns an absolute and a relative representation of path based on the working directory
func absRelPath(path, wd string) (string, string) {
if filepath.IsAbs(path) {
relPath, _ := filepath.Rel(wd, path)
return path, relPath
}
absPath := filepath.Join(wd, path)
return absPath, path
}
func init() { func init() {
RootCmd.AddCommand(trackCmd) RootCmd.AddCommand(trackCmd)
} }

@ -134,21 +134,6 @@ begin_test "track representation"
cd track-representation cd track-representation
git lfs track "*.jpg" git lfs track "*.jpg"
out=$(git lfs track "$(native_path "$PWD/")*.jpg")
if [ "$out" != "$(native_path "$PWD/")*.jpg already supported" ]; then
echo "Track didn't recognize duplicate path"
cat .gitattributes
exit 1
fi
out2=$(git lfs track "a/../*.jpg")
if [ "$out2" != "a/../*.jpg already supported" ]; then
echo "Track didn't recognize duplicate path"
cat .gitattributes
exit 1
fi
mkdir a mkdir a
git lfs track "a/test.file" git lfs track "a/test.file"
@ -179,12 +164,9 @@ begin_test "track absolute"
git init track-absolute git init track-absolute
cd track-absolute cd track-absolute
git lfs track "$(native_path "$PWD/")*.jpg" git lfs track "/images"
grep "^*.jpg" .gitattributes || { cat .gitattributes
echo ".gitattributes doesn't contain the expected relative path *.jpg:" grep "^/images" .gitattributes
cat .gitattributes
exit 1
}
) )
end_test end_test