MCPcopy
hub / github.com/git-lfs/git-lfs / parseListLockResponse

Method parseListLockResponse

locking/ssh.go:77–141  ·  view source on GitHub ↗
(status int, args []string, lines []string)

Source from the content-addressed store, hash-verified

75}
76
77func (c *sshLockClient) parseListLockResponse(status int, args []string, lines []string) (all []Lock, ours []Lock, theirs []Lock, nextCursor string, message string, err error) {
78 locks := make(map[string]*lockData)
79 var last *lockData
80 if status >= 200 && status <= 299 {
81 for _, entry := range args {
82 if strings.HasPrefix(entry, "next-cursor=") {
83 if len(nextCursor) > 0 {
84 return nil, nil, nil, "", "", errors.New(tr.Tr.Get("lock response: multiple next-cursor responses"))
85 }
86 nextCursor = entry[12:]
87 }
88 }
89 for _, entry := range lines {
90 values := strings.SplitN(entry, " ", 3)
91 var cmd string
92 if len(values) > 0 {
93 cmd = values[0]
94 }
95 if cmd == "lock" {
96 if len(values) != 2 {
97 return nil, nil, nil, "", "", errors.New(tr.Tr.Get("lock response: invalid response: %q", entry))
98 } else if last != nil && c.lockDataIsIncomplete(last) {
99 return nil, nil, nil, "", "", errors.New(tr.Tr.Get("lock response: incomplete lock data"))
100 }
101 id := values[1]
102 last = &lockData{who: ownerUnknown}
103 last.lock.Id = id
104 locks[id] = last
105 } else if len(values) != 3 {
106 return nil, nil, nil, "", "", errors.New(tr.Tr.Get("lock response: invalid response: %q", entry))
107 } else if last == nil || last.lock.Id != values[1] {
108 return nil, nil, nil, "", "", errors.New(tr.Tr.Get("lock response: interspersed response: %q", entry))
109 } else {
110 switch cmd {
111 case "path":
112 last.lock.Path = values[2]
113 case "owner":
114 last.who = owner(values[2])
115 case "ownername":
116 last.lock.Owner = &User{}
117 last.lock.Owner.Name = values[2]
118 case "locked-at":
119 last.lock.LockedAt, err = time.Parse(time.RFC3339, values[2])
120 if err != nil {
121 return nil, nil, nil, "", "", errors.New(tr.Tr.Get("lock response: invalid locked-at: %s", entry))
122 }
123 }
124 }
125 }
126 if last != nil && c.lockDataIsIncomplete(last) {
127 return nil, nil, nil, "", "", errors.New(tr.Tr.Get("lock response: incomplete lock data"))
128 }
129 for _, lock := range locks {
130 all = append(all, lock.lock)
131 if lock.who == ownerOurs {
132 ours = append(ours, lock.lock)
133 } else if lock.who == ownerTheirs {
134 theirs = append(theirs, lock.lock)

Callers 2

SearchMethod · 0.95
SearchVerifiableMethod · 0.95

Calls 4

lockDataIsIncompleteMethod · 0.95
NewFunction · 0.92
ownerTypeAlias · 0.85
GetMethod · 0.65

Tested by

no test coverage detected