-w <who> : Filter by submitter (name, e-mail substring search)
-d <who> : Filter by delegate (name, e-mail substring search)
-n <max #> : Restrict number of results\n""")
+ sys.stderr.write("""\nActions that take an ID argument can also be \
+invoked with:
+ -h <hash> : Lookup by patch hash\n""")
sys.exit(1)
def project_id_by_name(rpc, linkname):
"""Given a project short name, look up the Project ID."""
if len(linkname) == 0:
return 0
- # The search requires - instead of _
- search = linkname.replace("_", "-")
- projects = rpc.project_list(search, 0)
+ projects = rpc.project_list(linkname, 0)
for project in projects:
- if project['linkname'].replace("_", "-") == search:
+ if project['linkname'] == linkname:
return project['id']
return 0
print("%-5s %-24s %s" % ("--", "----", "-----------"))
for project in projects:
print("%-5d %-24s %s" % (project['id'], \
- project['linkname'].replace("_", "-"), \
+ project['linkname'], \
project['name']))
def action_states(rpc):
if not success:
sys.stderr.write("Patch not updated\n")
+def patch_id_from_hash(rpc, project, hash):
+ patch = rpc.patch_get_by_project_hash(project, hash)
+ if patch == {}:
+ return None
+
+ return patch['id']
+
auth_actions = ['update']
def main():
try:
- opts, args = getopt.getopt(sys.argv[2:], 's:p:w:d:n:c:')
+ opts, args = getopt.getopt(sys.argv[2:], 's:p:w:d:n:c:h:')
except getopt.GetoptError, err:
print str(err)
usage()
project_str = ""
commit_str = ""
state_str = ""
+ hash_str = ""
url = DEFAULT_URL
config = ConfigParser.ConfigParser()
delegate_str = value
elif name == '-c':
commit_str = value
+ elif name == '-h':
+ hash_str = value
elif name == '-n':
try:
filt.add("max_count", int(value))
sys.stderr.write("Unable to connect to %s\n" % url)
sys.exit(1)
+ patch_id = None
+ if hash_str:
+ patch_id = patch_id_from_hash(rpc, project_str, hash_str)
+ if patch_id is None:
+ sys.stderr.write("No patch has the hash provided\n")
+ sys.exit(1)
+
+
if action == 'list' or action == 'search':
if len(args) > 0:
filt.add("name__icontains", args[0])
elif action == 'view':
try:
- patch_id = int(args[0])
+ patch_id = patch_id or int(args[0])
except:
sys.stderr.write("Invalid patch ID given\n")
sys.exit(1)
s = rpc.patch_get_mbox(patch_id)
if len(s) > 0:
- print s
+ print unicode(s).encode("utf-8")
elif action == 'get' or action == 'save':
try:
- patch_id = int(args[0])
+ patch_id = patch_id or int(args[0])
except:
sys.stderr.write("Invalid patch ID given\n")
sys.exit(1)
elif action == 'apply':
try:
- patch_id = int(args[0])
+ patch_id = patch_id or int(args[0])
except:
sys.stderr.write("Invalid patch ID given\n")
sys.exit(1)
elif action == 'update':
try:
- patch_id = int(args[0])
+ patch_id = patch_id or int(args[0])
except:
sys.stderr.write("Invalid patch ID given\n")
sys.exit(1)