artemis.py
author Dmitriy Morozov <morozov@cs.duke.edu>
Thu, 27 Dec 2007 13:14:58 -0500
changeset 1 0bbf290d6f07
parent 0 c1b34481e50a
child 2 9e804a85c82c
permissions -rw-r--r--
Commit artemis before cleaning repository
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
c1b34481e50a Initial commit
Dmitriy Morozov <morozov@cs.duke.edu>
parents:
diff changeset
     1
#!/usr/bin/env python
c1b34481e50a Initial commit
Dmitriy Morozov <morozov@cs.duke.edu>
parents:
diff changeset
     2
c1b34481e50a Initial commit
Dmitriy Morozov <morozov@cs.duke.edu>
parents:
diff changeset
     3
from mercurial import hg
c1b34481e50a Initial commit
Dmitriy Morozov <morozov@cs.duke.edu>
parents:
diff changeset
     4
from mercurial.i18n import _
1
0bbf290d6f07 Commit artemis before cleaning repository
Dmitriy Morozov <morozov@cs.duke.edu>
parents: 0
diff changeset
     5
import os, time, random
0
c1b34481e50a Initial commit
Dmitriy Morozov <morozov@cs.duke.edu>
parents:
diff changeset
     6
1
0bbf290d6f07 Commit artemis before cleaning repository
Dmitriy Morozov <morozov@cs.duke.edu>
parents: 0
diff changeset
     7
def list(ui, repo, **opts):
0bbf290d6f07 Commit artemis before cleaning repository
Dmitriy Morozov <morozov@cs.duke.edu>
parents: 0
diff changeset
     8
	"""List issues associated with the project"""
0bbf290d6f07 Commit artemis before cleaning repository
Dmitriy Morozov <morozov@cs.duke.edu>
parents: 0
diff changeset
     9
0bbf290d6f07 Commit artemis before cleaning repository
Dmitriy Morozov <morozov@cs.duke.edu>
parents: 0
diff changeset
    10
def add(ui, repo):
0bbf290d6f07 Commit artemis before cleaning repository
Dmitriy Morozov <morozov@cs.duke.edu>
parents: 0
diff changeset
    11
	"""Adds a new issue"""
0bbf290d6f07 Commit artemis before cleaning repository
Dmitriy Morozov <morozov@cs.duke.edu>
parents: 0
diff changeset
    12
	
0bbf290d6f07 Commit artemis before cleaning repository
Dmitriy Morozov <morozov@cs.duke.edu>
parents: 0
diff changeset
    13
	# First, make sure issues have a directory
0bbf290d6f07 Commit artemis before cleaning repository
Dmitriy Morozov <morozov@cs.duke.edu>
parents: 0
diff changeset
    14
	issues_path = os.path.join(repo.root, '.issues')
0bbf290d6f07 Commit artemis before cleaning repository
Dmitriy Morozov <morozov@cs.duke.edu>
parents: 0
diff changeset
    15
	if not os.path.exists(issues_path): os.mkdir(issues_path)
0bbf290d6f07 Commit artemis before cleaning repository
Dmitriy Morozov <morozov@cs.duke.edu>
parents: 0
diff changeset
    16
	
0bbf290d6f07 Commit artemis before cleaning repository
Dmitriy Morozov <morozov@cs.duke.edu>
parents: 0
diff changeset
    17
	user = ui.username()
0bbf290d6f07 Commit artemis before cleaning repository
Dmitriy Morozov <morozov@cs.duke.edu>
parents: 0
diff changeset
    18
0bbf290d6f07 Commit artemis before cleaning repository
Dmitriy Morozov <morozov@cs.duke.edu>
parents: 0
diff changeset
    19
	default_issue_text = 	"From: %s\nDate: %s\n" % (user,
0bbf290d6f07 Commit artemis before cleaning repository
Dmitriy Morozov <morozov@cs.duke.edu>
parents: 0
diff changeset
    20
													  time.strftime('%a, %d %b %Y %H:%M:%S %Z'))
0bbf290d6f07 Commit artemis before cleaning repository
Dmitriy Morozov <morozov@cs.duke.edu>
parents: 0
diff changeset
    21
	default_issue_text += 	"Status: new\nSubject: brief description\n\n"
0bbf290d6f07 Commit artemis before cleaning repository
Dmitriy Morozov <morozov@cs.duke.edu>
parents: 0
diff changeset
    22
	default_issue_text += 	"Detailed description."
0bbf290d6f07 Commit artemis before cleaning repository
Dmitriy Morozov <morozov@cs.duke.edu>
parents: 0
diff changeset
    23
0bbf290d6f07 Commit artemis before cleaning repository
Dmitriy Morozov <morozov@cs.duke.edu>
parents: 0
diff changeset
    24
	issue = ui.edit(default_issue_text, user)
0bbf290d6f07 Commit artemis before cleaning repository
Dmitriy Morozov <morozov@cs.duke.edu>
parents: 0
diff changeset
    25
	if issue.strip() == '':
0bbf290d6f07 Commit artemis before cleaning repository
Dmitriy Morozov <morozov@cs.duke.edu>
parents: 0
diff changeset
    26
		ui.warn('Empty issue, ignoring\n')
0bbf290d6f07 Commit artemis before cleaning repository
Dmitriy Morozov <morozov@cs.duke.edu>
parents: 0
diff changeset
    27
		return
0bbf290d6f07 Commit artemis before cleaning repository
Dmitriy Morozov <morozov@cs.duke.edu>
parents: 0
diff changeset
    28
	if issue.strip() == default_issue_text:
0bbf290d6f07 Commit artemis before cleaning repository
Dmitriy Morozov <morozov@cs.duke.edu>
parents: 0
diff changeset
    29
		ui.warn('Unchanged issue text, ignoring\n')
0bbf290d6f07 Commit artemis before cleaning repository
Dmitriy Morozov <morozov@cs.duke.edu>
parents: 0
diff changeset
    30
		return
0bbf290d6f07 Commit artemis before cleaning repository
Dmitriy Morozov <morozov@cs.duke.edu>
parents: 0
diff changeset
    31
0bbf290d6f07 Commit artemis before cleaning repository
Dmitriy Morozov <morozov@cs.duke.edu>
parents: 0
diff changeset
    32
	# Pick random filename
0bbf290d6f07 Commit artemis before cleaning repository
Dmitriy Morozov <morozov@cs.duke.edu>
parents: 0
diff changeset
    33
	issue_fn = issues_path
0bbf290d6f07 Commit artemis before cleaning repository
Dmitriy Morozov <morozov@cs.duke.edu>
parents: 0
diff changeset
    34
	while os.path.exists(issue_fn):
0bbf290d6f07 Commit artemis before cleaning repository
Dmitriy Morozov <morozov@cs.duke.edu>
parents: 0
diff changeset
    35
		issue_fn = os.path.join(issues_path, "%x" % random.randint(2**32, 2**64-1))
0bbf290d6f07 Commit artemis before cleaning repository
Dmitriy Morozov <morozov@cs.duke.edu>
parents: 0
diff changeset
    36
0bbf290d6f07 Commit artemis before cleaning repository
Dmitriy Morozov <morozov@cs.duke.edu>
parents: 0
diff changeset
    37
	# FIXME: replace with creating a mailbox
0bbf290d6f07 Commit artemis before cleaning repository
Dmitriy Morozov <morozov@cs.duke.edu>
parents: 0
diff changeset
    38
	f =	file(issue_fn, "w")
0bbf290d6f07 Commit artemis before cleaning repository
Dmitriy Morozov <morozov@cs.duke.edu>
parents: 0
diff changeset
    39
	f.write(issue)
0bbf290d6f07 Commit artemis before cleaning repository
Dmitriy Morozov <morozov@cs.duke.edu>
parents: 0
diff changeset
    40
	f.close()
0bbf290d6f07 Commit artemis before cleaning repository
Dmitriy Morozov <morozov@cs.duke.edu>
parents: 0
diff changeset
    41
0bbf290d6f07 Commit artemis before cleaning repository
Dmitriy Morozov <morozov@cs.duke.edu>
parents: 0
diff changeset
    42
	repo.add([issue_fn[(len(repo.root)+1):]])			# +1 for the trailing /
0bbf290d6f07 Commit artemis before cleaning repository
Dmitriy Morozov <morozov@cs.duke.edu>
parents: 0
diff changeset
    43
0bbf290d6f07 Commit artemis before cleaning repository
Dmitriy Morozov <morozov@cs.duke.edu>
parents: 0
diff changeset
    44
def show(ui, repo, id):
0bbf290d6f07 Commit artemis before cleaning repository
Dmitriy Morozov <morozov@cs.duke.edu>
parents: 0
diff changeset
    45
	"""Shows issue ID"""
0
c1b34481e50a Initial commit
Dmitriy Morozov <morozov@cs.duke.edu>
parents:
diff changeset
    46
c1b34481e50a Initial commit
Dmitriy Morozov <morozov@cs.duke.edu>
parents:
diff changeset
    47
cmdtable = {
1
0bbf290d6f07 Commit artemis before cleaning repository
Dmitriy Morozov <morozov@cs.duke.edu>
parents: 0
diff changeset
    48
	'issues-list':	(list, 
0bbf290d6f07 Commit artemis before cleaning repository
Dmitriy Morozov <morozov@cs.duke.edu>
parents: 0
diff changeset
    49
					 [('s', 'status', None, 'restrict status')], 
0bbf290d6f07 Commit artemis before cleaning repository
Dmitriy Morozov <morozov@cs.duke.edu>
parents: 0
diff changeset
    50
					 _('hg issues-list')),
0bbf290d6f07 Commit artemis before cleaning repository
Dmitriy Morozov <morozov@cs.duke.edu>
parents: 0
diff changeset
    51
	'issues-add':   (add,  
0bbf290d6f07 Commit artemis before cleaning repository
Dmitriy Morozov <morozov@cs.duke.edu>
parents: 0
diff changeset
    52
					 [], 
0bbf290d6f07 Commit artemis before cleaning repository
Dmitriy Morozov <morozov@cs.duke.edu>
parents: 0
diff changeset
    53
					 _('hg issues-add')),
0bbf290d6f07 Commit artemis before cleaning repository
Dmitriy Morozov <morozov@cs.duke.edu>
parents: 0
diff changeset
    54
	'issues-show':  (show, 
0bbf290d6f07 Commit artemis before cleaning repository
Dmitriy Morozov <morozov@cs.duke.edu>
parents: 0
diff changeset
    55
					 [], 
0bbf290d6f07 Commit artemis before cleaning repository
Dmitriy Morozov <morozov@cs.duke.edu>
parents: 0
diff changeset
    56
					 _('hg issues-show ID'))
0
c1b34481e50a Initial commit
Dmitriy Morozov <morozov@cs.duke.edu>
parents:
diff changeset
    57
}