diff --git a/README.md b/README.md index c3bc9c1..21874d0 100644 --- a/README.md +++ b/README.md @@ -130,6 +130,8 @@ func main() { reviewDesign.Con(prepareInfra).Con(test) test.Con(release).Con(finish) + g.Done(design, reviewDesign, developFeature2, finish) + if err := g.GenerateCheckList(design); err != nil { panic(err) } @@ -137,29 +139,29 @@ func main() { ``` ``` -- [ ] 設計 -- [ ] レビュー対応 +- [x] 設計 +- [x] レビュー対応 - [ ] feature1開発 - [ ] レビュー対応 -- [ ] feature2開発 +- [x] feature2開発 - [ ] レビュー対応 - [ ] インフラ準備 - [ ] 結合テスト - [ ] リリース -- [ ] finish +- [x] finish ``` 2. share with members -- [ ] 設計 -- [ ] レビュー対応 +- [x] 設計 +- [x] レビュー対応 - [ ] feature1開発 - [ ] レビュー対応 -- [ ] feature2開発 +- [x] feature2開発 - [ ] レビュー対応 - [ ] インフラ準備 - [ ] 結合テスト - [ ] リリース -- [ ] finish +- [x] finish # Reference - [about DAG](https://nave-kazu.hatenablog.com/entry/2015/11/30/154810) diff --git a/gdag.go b/gdag.go index b5f944d..ebbf297 100644 --- a/gdag.go +++ b/gdag.go @@ -147,35 +147,39 @@ func GenerateCheckList(n *Node) error { sorted := sortComponentList(uniqAS) out := "" - for _, v := range sorted { - out += fmt.Sprintf("- [ ] %s\n", v) + for _, node := range sorted { + if node.color == "#DarkGray" { + out += fmt.Sprintf("- [x] %s\n", node.text) + } else { + out += fmt.Sprintf("- [ ] %s\n", node.text) + } } fmt.Print(out) return nil } -var uniqAS = make(map[int]string) +var uniqAS = make(map[int]*Node) func uniqAs(n *Node) { if _, ok := uniqAS[n.as]; ok { return } - uniqAS[n.as] = n.text + uniqAS[n.as] = n for _, d := range n.downstream { uniqAs(d) } } -func sortComponentList(uniq map[int]string) []string { +func sortComponentList(uniq map[int]*Node) []*Node { keys := make([]int, 0, len(uniq)) for k := range uniq { keys = append(keys, k) } sort.Ints(keys) - sorted := make([]string, 0, len(keys)) + sorted := make([]*Node, 0, len(keys)) for _, k := range keys { v := uniq[k] sorted = append(sorted, v) diff --git a/gdag_test.go b/gdag_test.go index 32fae4f..d63004a 100644 --- a/gdag_test.go +++ b/gdag_test.go @@ -100,18 +100,20 @@ func ExampleGenerateCheckList() { reviewDesign.Con(prepareInfra).Con(test) test.Con(release).Con(finish) + g.Done(design, reviewDesign, developFeature2, finish) + if err := g.GenerateCheckList(design); err != nil { panic(err) } // Output: - // - [ ] 設計 - // - [ ] レビュー対応 + // - [x] 設計 + // - [x] レビュー対応 // - [ ] feature1開発 // - [ ] レビュー対応 - // - [ ] feature2開発 + // - [x] feature2開発 // - [ ] レビュー対応 // - [ ] インフラ準備 // - [ ] 結合テスト // - [ ] リリース - // - [ ] finish + // - [x] finish }