(will be renamed 'tag' in next commit) 'git tag ref' returns the tags of the ref 'git tag tag1' return the refs which have tag1 as tag 'git tag ref tag1,tag2' add tag1 and tag2 to ref 'git tag ref :tag1,tag2' remove tag1 and add tag2 to refmain
parent
637eab1059
commit
a1895103fc
@ -1,13 +1,59 @@
|
||||
from ..repo import Repository
|
||||
"""
|
||||
This command is all about tags.
|
||||
The different use cases are :
|
||||
1. > papers tag
|
||||
Returns the list of all tags
|
||||
2. > papers tag citekey
|
||||
Return the list of tags of the given citekey
|
||||
3. > papers tag citekey math
|
||||
Add 'math' to the list of tags of the given citekey
|
||||
4. > papers tag citekey :math
|
||||
Remove 'math' for the list of tags of the given citekey
|
||||
5. > papers tag citekey math,romance,:war
|
||||
Add 'math' and 'romance' tags to the given citekey, and remove the 'war' tag
|
||||
6. > papers tag math
|
||||
If 'math' is not a citekey, then display all papers with the tag 'math'
|
||||
"""
|
||||
|
||||
from ..repo import Repository, InvalidReference
|
||||
from . import helpers
|
||||
|
||||
def parser(subparsers, config):
|
||||
parser = subparsers.add_parser('tags', help="list existing tags")
|
||||
parser = subparsers.add_parser('tags', help="add, remove and show tags")
|
||||
parser.add_argument('referenceOrTag', nargs='?', default = None,
|
||||
help='reference to the paper (citekey or number), or '
|
||||
'tag.')
|
||||
parser.add_argument('tags', nargs='?', default = None,
|
||||
help='If the previous argument was a reference, then '
|
||||
'then a list of tags separated by commas.')
|
||||
# TODO find a way to display clear help for multiple command semantics,
|
||||
# indistinguisable for argparse. (fabien, 201306)
|
||||
return parser
|
||||
|
||||
|
||||
def command(config, ui):
|
||||
"""List existing tags"""
|
||||
def command(config, ui, referenceOrTag, tags):
|
||||
"""Add, remove and show tags"""
|
||||
rp = Repository.from_directory(config)
|
||||
for tag in rp.get_tags():
|
||||
ui.print_(tag)
|
||||
|
||||
if referenceOrTag is None:
|
||||
for tag in rp.get_tags():
|
||||
ui.print_(tag)
|
||||
else:
|
||||
try:
|
||||
citekey = rp.citekey_from_ref(referenceOrTag)
|
||||
p = rp.get_paper(citekey)
|
||||
if tags is None:
|
||||
ui.print_(' '.join(p.tags))
|
||||
else:
|
||||
tags = tags.split(',')
|
||||
for tag in tags:
|
||||
if tag[0] == ':':
|
||||
p.remove_tag(tag[1:])
|
||||
else:
|
||||
p.add_tag(tag)
|
||||
rp.save_paper(p)
|
||||
except InvalidReference:
|
||||
tag = referenceOrTag
|
||||
papers_list = [(p, n) for n, p in enumerate(rp.all_papers())
|
||||
if tag in p.tags]
|
||||
ui.print_('\n'.join(helpers.paper_oneliner(p, n)
|
||||
for p, n in papers_list))
|
Loading…
Reference in new issue