Compare commits

...

2 Commits

4 changed files with 30 additions and 10 deletions

View File

@ -1,6 +1,6 @@
# Package # Package
version = "4.23.3" version = "4.24.0"
author = "Jonathan Bernard" author = "Jonathan Bernard"
description = "Personal issue tracker." description = "Personal issue tracker."
license = "MIT" license = "MIT"

View File

@ -226,7 +226,7 @@ proc edit(issue: Issue) =
# Try to parse the newly-edited issue to make sure it was successful. # Try to parse the newly-edited issue to make sure it was successful.
let editedIssue = loadIssue(issue.filepath) let editedIssue = loadIssue(issue.filepath)
editedIssue.store() editedIssue.store()
except: except CatchableError:
fatal "updated issue is invalid (ignoring edits): \n\t" & fatal "updated issue is invalid (ignoring edits): \n\t" &
getCurrentExceptionMsg() getCurrentExceptionMsg()
issue.store() issue.store()
@ -392,7 +392,7 @@ when isMainModule:
var stateOption = none(IssueState) var stateOption = none(IssueState)
try: stateOption = some(parseEnum[IssueState](editRef)) try: stateOption = some(parseEnum[IssueState](editRef))
except: discard except CatchableError: discard
if stateOption.isSome: if stateOption.isSome:
let state = stateOption.get let state = stateOption.get
@ -444,7 +444,7 @@ when isMainModule:
issue["completed"] = getTime().local.formatIso8601 issue["completed"] = getTime().local.formatIso8601
if issue.hasProp("recurrence") and issue.getRecurrence.isSome: if issue.hasProp("recurrence") and issue.getRecurrence.isSome:
let nextIssue = ctx.cfg.tasksDir.nextRecurrence(issue.getRecurrence.get, issue) let nextIssue = ctx.cfg.tasksDir.nextRecurrence(issue.getRecurrence.get, issue)
ctx.cfg.tasksDir.store(nextIssue, Todo) ctx.cfg.tasksDir.store(nextIssue, TodoToday)
info "created the next recurrence:" info "created the next recurrence:"
stdout.writeLine formatIssue(nextIssue) stdout.writeLine formatIssue(nextIssue)
@ -545,8 +545,12 @@ when isMainModule:
if args["contexts"]: listContexts = true if args["contexts"]: listContexts = true
elif args["<stateOrId>"]: elif args["<stateOrId>"]:
try: statesOption = some(args["<stateOrId>"].mapIt(parseEnum[IssueState]($it))) try:
except: issueIdsOption = some(args["<stateOrId>"].mapIt($it)) statesOption =
some(args["<stateOrId>"].
mapIt(parseEnum[IssueState]($it)))
except CatchableError:
issueIdsOption = some(args["<stateOrId>"].mapIt($it))
# List the known contexts # List the known contexts
if listContexts: if listContexts:
@ -610,7 +614,22 @@ when isMainModule:
try: write(propOut, decodeDataUri(issue[$(args["<propName>"])])) try: write(propOut, decodeDataUri(issue[$(args["<propName>"])]))
finally: close(propOut) finally: close(propOut)
except: 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")
except CatchableError:
fatal getCurrentExceptionMsg() fatal getCurrentExceptionMsg()
debug getCurrentException().getStackTrace() debug getCurrentException().getStackTrace()
#raise getCurrentException() #raise getCurrentException()

View File

@ -1,4 +1,4 @@
const PIT_VERSION* = "4.23.3" const PIT_VERSION* = "4.24.0"
const USAGE* = """Usage: const USAGE* = """Usage:
pit ( new | add) <summary> [<state>] [options] pit ( new | add) <summary> [<state>] [options]
@ -14,6 +14,7 @@ const USAGE* = """Usage:
pit ( delete | rm ) <id>... [options] pit ( delete | rm ) <id>... [options]
pit add-binary-property <id> <propName> <propSource> [options] pit add-binary-property <id> <propName> <propSource> [options]
pit get-binary-property <id> <propName> <propDest> [options] pit get-binary-property <id> <propName> <propDest> [options]
pit show-dupes
pit help [options] pit help [options]
Options: Options:

View File

@ -168,7 +168,7 @@ proc parseDate*(d: string): DateTime =
var errMsg = "" var errMsg = ""
for df in DATE_FORMATS: for df in DATE_FORMATS:
try: return d.parse(df) try: return d.parse(df)
except: except CatchableError:
errMsg &= "\n\tTried " & df & " with " & d errMsg &= "\n\tTried " & df & " with " & d
continue continue
raise newException(ValueError, "Unable to parse input as a date: " & d & errMsg) raise newException(ValueError, "Unable to parse input as a date: " & d & errMsg)
@ -426,7 +426,7 @@ proc loadConfig*(args: Table[string, Value] = initTable[string, Value]()): PitCo
try: try:
cfgFile = open(pitrcFilename, fmWrite) cfgFile = open(pitrcFilename, fmWrite)
cfgFile.write("{\"tasksDir\": \"/path/to/tasks\"}") cfgFile.write("{\"tasksDir\": \"/path/to/tasks\"}")
except: warn "could not write default .pitrc to " & pitrcFilename except CatchableError: warn "could not write default .pitrc to " & pitrcFilename
finally: close(cfgFile) finally: close(cfgFile)
debug "loading config from '$#'" % [pitrcFilename] debug "loading config from '$#'" % [pitrcFilename]