Overview
Comment: | sync tbd |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
87e5dc43ffd3500a384c6a0f244d52f3 |
User & Date: | spaskalev on 2015-04-06 19:20:42 |
Other Links: | manifest | tags |
Context
2015-09-09
| ||
22:22 | initial imgui api ideas check-in: bc1a46b4d9 user: spaskalev tags: trunk | |
2015-04-06
| ||
19:20 | sync tbd check-in: 87e5dc43ff user: spaskalev tags: trunk | |
2015-03-19
| ||
20:51 | Added parse.Digit and a test check-in: 61937abf4c user: spaskalev tags: trunk | |
Changes
Modified src/0dev.org/commands/tbd/tbd.go from [2547f40cdb] to [015d525e31].
|
| | | 1 2 3 4 5 6 7 8 | // tbd, a #tag-based dependency tool for task tracking package main import ( "bufio" "bytes" "fmt" "io" |
︙ | ︙ | |||
23 24 25 26 27 28 29 | extract = regexp.MustCompile("(#)([^\\s]+?)(?:[,\\.\\s]|$)") } func main() { var ( exitCode int | | | 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | extract = regexp.MustCompile("(#)([^\\s]+?)(?:[,\\.\\s]|$)") } func main() { var ( exitCode int handlers = handlerChain{counting(), tracing()} ) // Parse command line elements and register handlers if len(os.Args) == 1 { handlers = append(handlers, cutoff()) } else { handlers = append(handlers, matching(os.Args[1:])) |
︙ | ︙ | |||
58 59 60 61 62 63 64 | exitCode = 1 } os.Exit(exitCode) } // Processes input through the provided handlers | | | | 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | exitCode = 1 } os.Exit(exitCode) } // Processes input through the provided handlers func process(input io.Reader, handlers handlerChain) int { reader := bufio.NewReader(input) for { line, err := reader.ReadString('\n') line = strings.TrimSpace(line) if len(line) > 0 { handlers.do(&task{tags: parse(line), value: line, depends: make(tasks, 0, 8)}) } // Process errors after handling as ReadString can return both data and error f if err != nil { if err == io.EOF { return 0 } |
︙ | ︙ | |||
147 148 149 150 151 152 153 154 | // Stop further processing of the task stop bool } // An alias interface for all task handler functions type handler func(*task) action // Execute handlers against a task | > > > | | | | 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 | // Stop further processing of the task stop bool } // An alias interface for all task handler functions type handler func(*task) action // A slice of handlers type handlerChain []handler // Execute handlers against a task func (handlers handlerChain) do(t *task) { for _, current := range handlers { act := current(t) if act.stop { return } } } // Returns a counting handler closure that sets the tasks' nth field |
︙ | ︙ | |||
214 215 216 217 218 219 220 | return action{} } } return action{stop: true} } } | | > | 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 | return action{} } } return action{stop: true} } } // Returns a handler that stores every seen task and its dependencies // along with an ancillary function to retrieve those in a sorted order func collecting() (handler, func() tasks) { var seen = make(map[*task]bool) return func(t *task) action { depth := tasks{t} for i := 0; i < len(depth); i++ { if !seen[depth[i]] { seen[depth[i]] = true |
︙ | ︙ |