Add --json output for git lfs track
We want a machine readable output for git lfs track, so add a --json flag to add this.
This commit is contained in:
parent
c9e2a138b3
commit
6f37e98ae8
@ -3,6 +3,7 @@ package commands
|
||||
import (
|
||||
"bufio"
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
@ -29,6 +30,7 @@ var (
|
||||
trackNoModifyAttrsFlag bool
|
||||
trackNoExcludedFlag bool
|
||||
trackFilenameFlag bool
|
||||
trackJSONFlag bool
|
||||
)
|
||||
|
||||
func trackCommand(cmd *cobra.Command, args []string) {
|
||||
@ -44,6 +46,10 @@ func trackCommand(cmd *cobra.Command, args []string) {
|
||||
return
|
||||
}
|
||||
|
||||
if trackJSONFlag {
|
||||
Exit(tr.Tr.Get("--json option can't be combined with arguments"))
|
||||
}
|
||||
|
||||
mp := gitattr.NewMacroProcessor()
|
||||
|
||||
// Intentionally do _not_ consider global- and system-level
|
||||
@ -221,8 +227,36 @@ ArgsLoop:
|
||||
}
|
||||
}
|
||||
|
||||
type PatternData struct {
|
||||
Pattern string `json:"pattern"`
|
||||
Source string `json:"source"`
|
||||
Lockable bool `json:"lockable"`
|
||||
Tracked bool `json:"tracked"`
|
||||
}
|
||||
|
||||
func listPatterns() {
|
||||
knownPatterns := getAllKnownPatterns()
|
||||
if trackJSONFlag {
|
||||
patterns := struct {
|
||||
Patterns []PatternData `json:"patterns"`
|
||||
}{Patterns: make([]PatternData, 0, len(knownPatterns))}
|
||||
for _, p := range knownPatterns {
|
||||
patterns.Patterns = append(patterns.Patterns, PatternData{
|
||||
Pattern: p.Path,
|
||||
Source: p.Source.String(),
|
||||
Tracked: p.Tracked,
|
||||
Lockable: p.Lockable,
|
||||
})
|
||||
}
|
||||
encoder := json.NewEncoder(os.Stdout)
|
||||
encoder.SetIndent("", " ")
|
||||
err := encoder.Encode(patterns)
|
||||
if err != nil {
|
||||
ExitWithError(err)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
if len(knownPatterns) < 1 {
|
||||
return
|
||||
}
|
||||
@ -337,5 +371,6 @@ func init() {
|
||||
cmd.Flags().BoolVarP(&trackNoModifyAttrsFlag, "no-modify-attrs", "", false, "skip modifying .gitattributes file")
|
||||
cmd.Flags().BoolVarP(&trackNoExcludedFlag, "no-excluded", "", false, "skip listing excluded paths")
|
||||
cmd.Flags().BoolVarP(&trackFilenameFlag, "filename", "", false, "treat this pattern as a literal filename")
|
||||
cmd.Flags().BoolVarP(&trackJSONFlag, "json", "", false, "print output in JSON")
|
||||
})
|
||||
}
|
||||
|
41
t/t-track.sh
41
t/t-track.sh
@ -711,3 +711,44 @@ begin_test "track: escaped glob pattern with spaces in .gitattributes"
|
||||
assert_pointer "main" "$filename" "$contents_oid" 15
|
||||
)
|
||||
end_test
|
||||
|
||||
begin_test "--json output"
|
||||
(
|
||||
set -e
|
||||
|
||||
reponame="track-json"
|
||||
git init "$reponame"
|
||||
cd "$reponame"
|
||||
|
||||
git lfs track '*.dat'
|
||||
git lfs track --lockable '*.bin'
|
||||
echo 'a.dat !filter' >>.gitattributes
|
||||
|
||||
git lfs track --json > actual
|
||||
cat >expected <<-EOF
|
||||
{
|
||||
"patterns": [
|
||||
{
|
||||
"pattern": "*.dat",
|
||||
"source": ".gitattributes",
|
||||
"lockable": false,
|
||||
"tracked": true
|
||||
},
|
||||
{
|
||||
"pattern": "*.bin",
|
||||
"source": ".gitattributes",
|
||||
"lockable": true,
|
||||
"tracked": true
|
||||
},
|
||||
{
|
||||
"pattern": "a.dat",
|
||||
"source": ".gitattributes",
|
||||
"lockable": false,
|
||||
"tracked": false
|
||||
}
|
||||
]
|
||||
}
|
||||
EOF
|
||||
diff -u actual expected
|
||||
)
|
||||
end_test
|
||||
|
Loading…
Reference in New Issue
Block a user