Compare commits
6 Commits
Author | SHA1 | Date | |
---|---|---|---|
43f0930cf2 | |||
f95dc91707 | |||
2c8180d9b2 | |||
12f87afe63 | |||
3496e21af5 | |||
40906eebf8 |
10
build.xml
10
build.xml
@ -8,6 +8,16 @@
|
||||
<mkdir dir="${build.dir}/main/classes"/>
|
||||
</target>
|
||||
|
||||
<target name="jlp-docs">
|
||||
<exec executable="jlp">
|
||||
<arg value="--no-source"/>
|
||||
<arg value="--output-dir"/>
|
||||
<arg value="doc"/>
|
||||
<arg value="src"/>
|
||||
<arg value="README.md"/>
|
||||
</exec>
|
||||
</target>
|
||||
|
||||
<target name="ng-deploy" depends="build">
|
||||
<!-- Stop the Nailgun Server -->
|
||||
<exec executable="cmd" os="Windows XP">
|
||||
|
Binary file not shown.
BIN
lib/compile/jar/jdb-util-3.2.jar
Normal file
BIN
lib/compile/jar/jdb-util-3.2.jar
Normal file
Binary file not shown.
Binary file not shown.
BIN
lib/runtime/jar/jdb-util-3.2.jar
Normal file
BIN
lib/runtime/jar/jdb-util-3.2.jar
Normal file
Binary file not shown.
@ -1,8 +1,8 @@
|
||||
#Tue, 05 Nov 2013 08:44:25 -0600
|
||||
#Mon, 01 Dec 2014 12:36:42 -0600
|
||||
lib.local=true
|
||||
name=jdb-gtd
|
||||
version=1.9
|
||||
version=1.12
|
||||
nailgun.classpath.dir=/home/jdbernard/programs/nailgun/classpath
|
||||
executable.jar=true
|
||||
main.class=com.jdblabs.gtd.cli.GTDCLI
|
||||
build.number=5
|
||||
build.number=1
|
||||
|
@ -9,7 +9,7 @@
|
||||
|
||||
<init-param>
|
||||
<param-name>gtdRootDir</param-name>
|
||||
<param-value>/home/jdbernard/Dropbox/gtd</param-value>
|
||||
<param-value>/home/jdbernard/gtd</param-value>
|
||||
</init-param>
|
||||
</servlet>
|
||||
|
||||
|
@ -19,6 +19,7 @@ package com.jdblabs.gtd
|
||||
* calendar to "schedule" items, but only to represent items which must be
|
||||
* done by or on that day.
|
||||
* * `details`: more information related to this item.
|
||||
* * `project`: the name of the project with which this item is associated.
|
||||
* @org gtd.jdb-labs.com/Item
|
||||
*/
|
||||
public class Item {
|
||||
|
@ -104,7 +104,7 @@ public class Util {
|
||||
def gtdDirs = [:]
|
||||
|
||||
/// Start by considering the current directory as a candidate.
|
||||
File currentDir = givenDir
|
||||
File currentDir = givenDir.canonicalFile
|
||||
while (currentDir != null) {
|
||||
/// We recognize the GTD root directory when it contains all of the
|
||||
/// GTD top-level directories.
|
||||
|
@ -17,6 +17,9 @@ import com.jdblabs.gtd.Item
|
||||
import com.jdblabs.gtd.PropertyHelp
|
||||
import com.jdbernard.util.LightOptionParser
|
||||
import com.martiansoftware.nailgun.NGContext
|
||||
import java.io.FileFilter
|
||||
import java.nio.file.Files
|
||||
import java.nio.file.Path
|
||||
import java.security.MessageDigest
|
||||
import org.joda.time.DateMidnight
|
||||
import org.joda.time.DateTime
|
||||
@ -24,6 +27,7 @@ import org.slf4j.Logger as SFL4JLogger
|
||||
import org.slf4j.LoggerFactory
|
||||
|
||||
import static com.jdblabs.gtd.Util.*
|
||||
import static java.nio.file.StandardCopyOption.*
|
||||
|
||||
/**
|
||||
* Command-line helper for working with this implementation of the Getting
|
||||
@ -31,7 +35,7 @@ import static com.jdblabs.gtd.Util.*
|
||||
* @org gtd.jdb-labs.com/cli/GTDCLI */
|
||||
public class GTDCLI {
|
||||
|
||||
public static final String VERSION = "1.9"
|
||||
public static final String VERSION = "1.12"
|
||||
private static String EOL = System.getProperty("line.separator")
|
||||
|
||||
/// We have a persistent instance when we are in the context of a Nailgun
|
||||
@ -107,7 +111,7 @@ public class GTDCLI {
|
||||
/// read afresh the configuration file.
|
||||
nailgunInst = null
|
||||
nailgunInst = new GTDCLI(new File(
|
||||
System.getProperty("user.home"), ".gritterrc"))
|
||||
System.getProperty("user.home"), ".gtdclirc"))
|
||||
|
||||
nailgunInst.run(args) } }
|
||||
|
||||
@ -203,7 +207,7 @@ public class GTDCLI {
|
||||
|
||||
if (opts.h) { printUsage(null); return }
|
||||
if (opts.v) { println "GTD CLI v$VERSION"; return }
|
||||
if (opts.d) workingDir = new File(opts.d)
|
||||
if (opts.d) workingDir = new File(opts.d[0])
|
||||
|
||||
/// View the arguments as a [`LinkedList`][1] so we can use [`peek`][2]
|
||||
/// and [`poll`][3].
|
||||
@ -243,6 +247,7 @@ public class GTDCLI {
|
||||
case ~/ls|list/: ls(parsedArgs); break;
|
||||
case ~/debug/: debug(parsedArgs); break;
|
||||
case ~/delegate/: delegateAction(parsedArgs); break;
|
||||
case ~/rp|rename-project/: renameProject(parsedArgs); break;
|
||||
default:
|
||||
log.error "Unrecognized command: ${command}"
|
||||
break } } }
|
||||
@ -681,6 +686,15 @@ public class GTDCLI {
|
||||
else setLoggingThreshold(level) }
|
||||
else log.error "Unrecognized debug command: '${command}'." }
|
||||
|
||||
/** #### `delegate`
|
||||
* Implement the `delegate` command. This allows you to move an action
|
||||
* from the next action list to the delegate list, providing the name of
|
||||
* the responsible party and optionally renaming the item. For detailed
|
||||
* information see the [online help][help-delegate] by running
|
||||
* `gtd help delegate`.
|
||||
*
|
||||
* [help-delegate]: jlp://gtd.jdb-labs.com/cli/GTDCLI/help/delegate
|
||||
*/
|
||||
protected void delegateAction(LinkedList args) {
|
||||
def selectedFilePath
|
||||
|
||||
@ -778,6 +792,56 @@ public class GTDCLI {
|
||||
/// Delete the original file.
|
||||
oldFile.delete() } }
|
||||
|
||||
/** #### `rename-project`
|
||||
* Implement the `rename-project` command. This will rename the project
|
||||
* directory in TODO as well as change the project reference in any of the
|
||||
* items from the `next-actions` contexts.
|
||||
*
|
||||
* `gtd help rename-project`.
|
||||
*
|
||||
* [help-rename-project]: jlp://gtd.jdb-labs.com/cli/GTDCLI/help/rename-project
|
||||
*/
|
||||
protected void renameProject(LinkedList args) {
|
||||
def projectName = args.poll()
|
||||
def newName = args.poll()
|
||||
|
||||
if (!projectName || !newName) {
|
||||
log.error "The 'gtd rename-project' command requires two " +
|
||||
"parameters: <existing-project-name> and a <new-name>."
|
||||
return }
|
||||
|
||||
def projectDir = new File(gtdDirs.projects, projectName)
|
||||
if (!projectDir.exists() || !projectDir.isDirectory()) {
|
||||
log.error "There is no directory named '$projectName' in the " +
|
||||
"'projects' directory."
|
||||
return }
|
||||
|
||||
def newDir = new File(gtdDirs.projects, newName)
|
||||
if (newDir.exists()) {
|
||||
log.error "There is already a project named '$newName'."
|
||||
return }
|
||||
|
||||
// Perform the rename of the directory itself.
|
||||
try { Files.move(projectDir.toPath(), newDir.toPath(), REPLACE_EXISTING) }
|
||||
catch (Exception e) {
|
||||
log.error "Unable to rename the project: ${e.localizedMessage}."
|
||||
return }
|
||||
|
||||
// Update all of the items associated with this project.
|
||||
def projectFiles = newDir.
|
||||
listFiles({ File f ->
|
||||
f.exists() && !f.isHidden() &&
|
||||
f.isFile() && !f.name.startsWith('.') } as FileFilter)
|
||||
|
||||
def allProjectItems = projectFiles.collectMany { f ->
|
||||
findAllCopies(f, gtdDirs.root).collect { new Item(it) } }
|
||||
|
||||
allProjectItems.each {
|
||||
it.project = newName
|
||||
it.save() }
|
||||
|
||||
println "Project renamed. ${allProjectItems.size()} items updated." }
|
||||
|
||||
private void print(String msg) { log.info(msg) }
|
||||
private void println(String line) { log.info(line + EOL) }
|
||||
|
||||
@ -800,20 +864,41 @@ options are:
|
||||
top-level commands:
|
||||
|
||||
help <command> Print detailed help about a command.
|
||||
|
||||
process Process inbox items systematically.
|
||||
|
||||
done <action-file> Mark an action as done. This will automatically
|
||||
take care of duplicates of the action in project
|
||||
or next-actions sub-folders.
|
||||
|
||||
calendar Show the tasks with specific days assigned to
|
||||
them, sorted by date.
|
||||
|
||||
list-copies <action-file> Given an action item, list all the other places
|
||||
there the same item is filed (cross-reference
|
||||
with a project folder, for example).
|
||||
|
||||
new Interactively create a new action item in the
|
||||
current folder.
|
||||
|
||||
tickler Search the tickler file for items that need to be
|
||||
delivered and move them to the *next-actions*
|
||||
folder."""
|
||||
folder.
|
||||
|
||||
list, ls [<context> ...] List all the tasks for a given set of contexts
|
||||
projects.
|
||||
|
||||
debug n
|
||||
|
||||
delegate Move an item from a next-action context or a
|
||||
project folder to a waiting context and attach
|
||||
the name of the party now responsible for the
|
||||
item.
|
||||
|
||||
rename-project, rp <existing-project> <new-name>
|
||||
|
||||
Rename a project directory and update any task
|
||||
items that reference it."""
|
||||
} else {
|
||||
def command = args.poll()
|
||||
|
||||
@ -917,15 +1002,35 @@ file for any items that should become active (based on their <tickle> property)
|
||||
and moves them out of the tickler file and into the next-actions file."""
|
||||
break
|
||||
|
||||
/// Online help for the `ls`/`list-context` command.
|
||||
/// Online help for the `ls`/`list` command.
|
||||
/// @org gtd.jdb-labs.com/cli/GTDCLI/help/ls
|
||||
case ~/ls|list-context/: println """\
|
||||
usage gtd ls [<context> ...]
|
||||
case ~/ls|list/: println """\
|
||||
usage gtd list [<context> ...]
|
||||
or gtd ls [<context> ...]
|
||||
|
||||
This command lists all the tasks for a given context or project. The purpose is
|
||||
to list in one place items that are sitting in the next-actions folder or the
|
||||
waiting folder for a specific context or list items for a given project. If no
|
||||
context or project is named, all contexts are listed."""
|
||||
|
||||
/// Online help for the `delegate` command.
|
||||
/// @org gtd.jdb-labs.com/cli/GTDCLI/help/delegate
|
||||
case ~/delegate/: println """\
|
||||
usage gtd delegate [<action-file> ...]
|
||||
|
||||
This command moves an action item from a next-action context or project folder
|
||||
to the delegate folder. It allows the user to attach the name of the newly
|
||||
responsible party and optionally rename the item."""
|
||||
|
||||
/// Online help for the `rename-project` command.
|
||||
/// @org gtd.jdb-labs.com/cli/GTDCLI/help/rename-project
|
||||
case ~/delegate/: println """\
|
||||
usage gtd rename-project <existing-project> <new-name>
|
||||
or gtd rp <existing-project> <new-name>
|
||||
|
||||
This command renames a project directory and updates any items that reference
|
||||
the project."""
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user