Merge pull request #975 from github/fix-track-patterns
pass gitattributes patterns (mostly) unchanged
This commit is contained in:
commit
5a37cf552b
@ -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
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user