Add support for a project view like virtual-status-board.probatem.com
This commit is contained in:
53
src/pit.nim
53
src/pit.nim
@@ -6,7 +6,7 @@ import data_uri, docopt, json, timeutils, uuids
|
||||
|
||||
from nre import re
|
||||
import strutils except alignLeft, capitalize, strip, toUpper, toLower
|
||||
import pit/[cliconstants, formatting, libpit, sync_pbm_vsb]
|
||||
import pit/[cliconstants, formatting, libpit, projects, sync_pbm_vsb]
|
||||
|
||||
export formatting, libpit
|
||||
|
||||
@@ -330,10 +330,14 @@ when isMainModule:
|
||||
|
||||
var listContexts = false
|
||||
var listTags = false
|
||||
var listProjects = false
|
||||
var listMilestones = false
|
||||
var statesOption = none(seq[IssueState])
|
||||
var issueIdsOption = none(seq[string])
|
||||
|
||||
if args["contexts"]: listContexts = true
|
||||
elif args["projects"]: listProjects = true
|
||||
elif args["milestones"]: listMilestones = true
|
||||
elif args["tags"]: listTags = true
|
||||
elif args["<stateOrId>"]:
|
||||
try:
|
||||
@@ -381,6 +385,12 @@ when isMainModule:
|
||||
let issue = ctx.cfg.tasksDir.loadIssueById(issueId)
|
||||
stdout.writeLine formatIssue(issue)
|
||||
|
||||
# List projects
|
||||
elif listProjects: ctx.listProjects(filterOption)
|
||||
|
||||
# List milestones
|
||||
elif listMilestones: ctx.listMilestones(filterOption)
|
||||
|
||||
# List all issues
|
||||
else:
|
||||
trace "listing all issues"
|
||||
@@ -393,6 +403,32 @@ when isMainModule:
|
||||
showHidden = args["--show-hidden"],
|
||||
verbose = ctx.verbose)
|
||||
|
||||
elif args["show"]:
|
||||
|
||||
if args["project-board"]:
|
||||
ctx.showProjectBoard(filterOption)
|
||||
discard
|
||||
|
||||
elif args["dupes"]:
|
||||
ctx.loadAllIssues()
|
||||
|
||||
var idsToPaths = newTable[string, var seq[string]]()
|
||||
for (state, issues) in pairs(ctx.issues):
|
||||
for issue in issues:
|
||||
let issueId = $issue.id
|
||||
|
||||
if idsToPaths.hasKey(issueId): idsToPaths[issueId].add(issue.filepath)
|
||||
else: idsToPaths[issueId] = @[issue.filepath]
|
||||
|
||||
for (issueId, issuePaths) in pairs(idsToPaths):
|
||||
if issuePaths.len < 2: continue
|
||||
stdout.writeLine(issueId & ":\p " & issuePaths.join("\p ") & "\p\p")
|
||||
|
||||
else: # list specific Issues
|
||||
for issueId in args["<id>"].mapIt($it):
|
||||
let issue = ctx.cfg.tasksDir.loadIssueById(issueId)
|
||||
stdout.writeLine formatIssue(issue)
|
||||
|
||||
elif args["add-binary-property"]:
|
||||
let issue = ctx.cfg.tasksDir.loadIssueById($(args["<id>"]))
|
||||
|
||||
@@ -421,21 +457,6 @@ when isMainModule:
|
||||
try: write(propOut, decodeDataUri(issue[$(args["<propName>"])]))
|
||||
finally: close(propOut)
|
||||
|
||||
elif args["show-dupes"]:
|
||||
ctx.loadAllIssues()
|
||||
|
||||
var idsToPaths = newTable[string, var seq[string]]()
|
||||
for (state, issues) in pairs(ctx.issues):
|
||||
for issue in issues:
|
||||
let issueId = $issue.id
|
||||
|
||||
if idsToPaths.hasKey(issueId): idsToPaths[issueId].add(issue.filepath)
|
||||
else: idsToPaths[issueId] = @[issue.filepath]
|
||||
|
||||
for (issueId, issuePaths) in pairs(idsToPaths):
|
||||
if issuePaths.len < 2: continue
|
||||
stdout.writeLine(issueId & ":\p " & issuePaths.join("\p ") & "\p\p")
|
||||
|
||||
elif args["sync"]:
|
||||
if ctx.cfg.syncTargets.len == 0:
|
||||
info "No sync targets configured"
|
||||
|
||||
Reference in New Issue
Block a user