summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2014-11-22 20:47:00 +0200
committerLars Wirzenius <liw@liw.fi>2014-11-22 20:47:00 +0200
commit5beafac6b85acdb4c761d280fa58eb9fb0b36ab4 (patch)
treea8212be8ffb18d8cf0451273dbe81c98084d85d9
parentde3b41b647d6bafb92d0f368660c6ca92056d7f4 (diff)
parentc8d40b889cd8f4d5c92c42f51ed555c38591dffe (diff)
downloadjt-5beafac6b85acdb4c761d280fa58eb9fb0b36ab4.tar.gz
Merge topic page creation, using
-rwxr-xr-xjt49
-rw-r--r--yarns/030-topics.yarn17
-rw-r--r--yarns/900-implementations.yarn2
3 files changed, 66 insertions, 2 deletions
diff --git a/jt b/jt
index 02a9bb8..22f05a6 100755
--- a/jt
+++ b/jt
@@ -36,6 +36,8 @@ template = '''\
[[!tag ]]
[[!meta date="%(date)s"]]
+%(topiclink)s
+
'''
@@ -115,10 +117,12 @@ class NewCommand(Command):
raise cliapp.AppException('Usage: journal-note new TITLE')
self._app.settings.require('source')
+ topic = self._app.settings['topic']
values = {
'title': args[0],
- 'date': time.strftime('%Y-%m-%d %H:%M')
+ 'date': time.strftime('%Y-%m-%d %H:%M'),
+ 'topiclink': self._get_topic_link(topic),
}
drafts_dir = DraftsDirectory(self._app.drafts_dir())
@@ -126,6 +130,12 @@ class NewCommand(Command):
draft_id = drafts_dir.create_draft(template % values)
self._app.edit_file(drafts_dir.get_draft_pathname(draft_id))
+ def _get_topic_link(self, topic):
+ if topic:
+ return 'Part of [[%s]]' % topic
+ else:
+ return ''
+
class ListCommand(Command):
@@ -235,6 +245,34 @@ class FinishCommand(Command):
cwd=self._app.settings['source'])
+class NewTopicCommand(Command):
+
+ def run(self, args):
+ if len(args) != 2:
+ raise cliapp.AppException(
+ 'Must be given two args (page path, title) (%r)' % args)
+
+ pathname = self._topic_pathname(args[0])
+ self._create_topic_page(pathname, args[1])
+ self._app.edit_file(pathname)
+
+ def _topic_pathname(self, page_path):
+ return os.path.join(self._app.settings['source'], page_path + '.mdwn')
+
+ def _create_topic_page(self, pathname, title):
+ dirname = os.path.dirname(pathname)
+ if not os.path.exists(dirname):
+ os.makedirs(dirname)
+
+ with open(pathname, 'w') as f:
+ f.write('''\
+[[!meta title="%(title)s"]]
+[[!inline pages="link(.)" archive=yes reverse=yes trail=yes]]
+''' % {
+ 'title': title,
+})
+
+
class NewPersonCommand(Command):
def run(self, args):
@@ -301,6 +339,11 @@ class JournalTool(cliapp.Application):
'push finished articles with git?')
self.settings.string(
+ ['topic'],
+ 'new entry belongs to TOPIC',
+ metavar='TOPIC')
+
+ self.settings.string(
['pretend-time'],
'pretend that the time is NOW (form: YYYY-MM-DD HH:MM:DD form)',
metavar='NOW')
@@ -329,6 +372,10 @@ class JournalTool(cliapp.Application):
'''Publish a draft journal entry.'''
FinishCommand(self).run(args)
+ def cmd_new_topic(self, args):
+ '''Create a new topic page.'''
+ NewTopicCommand(self).run(args)
+
def cmd_new_person(self, args):
'''Create a page to list all notes referring to a person.
diff --git a/yarns/030-topics.yarn b/yarns/030-topics.yarn
new file mode 100644
index 0000000..e931ae3
--- /dev/null
+++ b/yarns/030-topics.yarn
@@ -0,0 +1,17 @@
+Using Topics
+============
+
+A topic is implemented as a wiki page to which journal entries link.
+First we create a topic page:
+
+ SCENARIO create and use topic page
+ GIVEN an empty journal in SRC
+ WHEN I run jt new-topic research/2014/dishwasher Dishwasher
+ THEN file SRC/research/2014/dishwasher.mdwn matches title="Dishwasher"
+
+After this, we can create a new journal entry that belongs to the
+topic.
+
+ GIVEN the time is 2014-11-20 20:04:08
+ WHEN I run jt new --topic=research/2014/dishwasher TITLE
+ THEN file SRC/drafts/0.mdwn matches research/2014/dishwasher
diff --git a/yarns/900-implementations.yarn b/yarns/900-implementations.yarn
index a2e149f..561b096 100644
--- a/yarns/900-implementations.yarn
+++ b/yarns/900-implementations.yarn
@@ -91,5 +91,5 @@ Checking file contents
Does a file match a regular expression?
- IMPLEMENTS THEN file (\S+) matches (\S+)
+ IMPLEMENTS THEN file (\S+) matches (.+)$
grep -e "$MATCH_2" "$DATADIR/$MATCH_1"