1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
|
package commands
import (
"bufio"
"os"
"strings"
"github.com/git-lfs/git-lfs/v3/tools"
"github.com/git-lfs/git-lfs/v3/tr"
"github.com/spf13/cobra"
)
// untrackCommand takes a list of paths as an argument, and removes each path from the
// default attributes file (.gitattributes), if it exists.
func untrackCommand(cmd *cobra.Command, args []string) {
setupWorkingCopy()
installHooks(false)
if len(args) < 1 {
Print("git lfs untrack <path> [path]*")
return
}
data, err := os.ReadFile(".gitattributes")
if err != nil {
return
}
attributes := strings.NewReader(string(data))
attributesFile, err := os.Create(".gitattributes")
if err != nil {
Print(tr.Tr.Get("Error opening '.gitattributes' for writing"))
return
}
defer attributesFile.Close()
scanner := bufio.NewScanner(attributes)
// Iterate through each line of the attributes file and rewrite it,
// if the path was meant to be untracked, omit it, and print a message instead.
for scanner.Scan() {
line := scanner.Text()
if !strings.Contains(line, "filter=lfs") {
attributesFile.WriteString(line + "\n")
continue
}
path := strings.Fields(line)[0]
if removePath(path, args) {
Print(tr.Tr.Get("Untracking %q", unescapeAttrPattern(path)))
} else {
attributesFile.WriteString(line + "\n")
}
}
}
func removePath(path string, args []string) bool {
withoutCurrentDir := tools.TrimCurrentPrefix(path)
for _, t := range args {
if withoutCurrentDir == escapeAttrPattern(tools.TrimCurrentPrefix(t)) {
return true
}
}
return false
}
func init() {
RegisterCommand("untrack", untrackCommand, nil)
}
|