def process(args): conduit = phlsys_makeconduit.make_conduit() if args.act_as_user: conduit.set_act_as_user(args.act_as_user) d = { 'message': args.message, 'silent': args.silent, 'action': phlcon_differential.USER_ACTIONS[args.action] } if args.message_file: d['message'] += args.message_file.read() ids = args.ids if args.ids_file: ids.extend([int(i) for i in args.ids_file.read().split()]) if not ids: print "error: you have not specified any revision ids" sys.exit(1) for i in ids: d["revision_id"] = i result = conduit.call("differential.createcomment", d) print result
def process(args): conduit = phlsys_makeconduit.make_conduit(args.uri, args.user, args.cert, args.act_as_user) if args.revision: result = phlcon_differential.get_revision_diff(conduit, args.revision) else: assert args.diff result = phlcon_differential.get_diff(conduit, args.diff) if args.format_python: pprint.pprint(result) elif args.format_json: print(json.dumps(result, sort_keys=True, indent=2)) elif args.format_unified: print(unified_diff(result)) elif args.format_files: phlcon_differential.write_diff_files(result, args.format_files) elif args.format_strings: fmt = args.format_strings[0] fmt_change = args.format_strings[1] if fmt: print(fmt.format(**result)) if fmt_change: for change in result["changes"]: print(fmt_change.format(**change)) else: # args.list_files: paths = set() for change in result.changes: paths.add(change["currentPath"]) paths.add(change["oldPath"]) for path in paths: print(path)
def process(args): _validate_args(args) conduit = phlsys_makeconduit.make_conduit( args.uri, args.user, args.cert, args.act_as_user) me = conduit.get_user() d = _process_user_fields(me, conduit, args) _set_options(args, d) d["order"] = 'order-' + args.order # perform the query results = conduit("differential.query", d) if args.statuses: results = [r for r in results if r["statusName"] in args.statuses] if args.update_min_age or args.update_max_age: results = _exclude_on_update_age(args, results) if args.translate: # gather user PHIDs _translate_user_phids(conduit, results) _set_human_times(results) _output_results(args, results)
def process(args): conduit = phlsys_makeconduit.make_conduit(args.uri, args.user, args.cert) d = {'diff': args.infile.read()} result = conduit.call("differential.createrawdiff", d) print result["id"]
def process(args): conduit = phlsys_makeconduit.make_conduit( args.uri, args.user, args.cert, args.act_as_user) if args.revision: result = phlcon_differential.get_revision_diff(conduit, args.revision) else: assert args.diff result = phlcon_differential.get_diff(conduit, args.diff) if args.format_python: pprint.pprint(result) elif args.format_json: print json.dumps(result, sort_keys=True, indent=2) elif args.format_unified: print unified_diff(result) elif args.format_files: phlcon_differential.write_diff_files(result, args.format_files) elif args.format_strings: fmt = args.format_strings[0] fmt_change = args.format_strings[1] if fmt: print fmt.format(**result) if fmt_change: for change in result["changes"]: print fmt_change.format(**change) else: # args.list_files: paths = set() for change in result.changes: paths.add(change["currentPath"]) paths.add(change["oldPath"]) for path in paths: print path
def process(args): conduit = phlsys_makeconduit.make_conduit(args.uri, args.user, args.cert) d = {} if args.revision: d["revision_id"] = args.revision if args.diff: d["diff_id"] = args.diff result = conduit.call("differential.getdiff", d) if args.format_python: pprint.pprint(result) elif args.format_json: print json.dumps(result, sort_keys=True, indent=2) elif args.format_unified: print unified_diff(result) elif args.format_strings: fmt = args.format_strings[0] fmt_change = args.format_strings[1] if fmt: print fmt.format(**result) if fmt_change: for change in result["changes"]: print fmt_change.format(**change) else: # args.list_files: paths = set() for change in result["changes"]: paths.add(change["currentPath"]) paths.add(change["oldPath"]) for path in paths: print path
def process(args): conduit = phlsys_makeconduit.make_conduit( args.uri, args.user, args.cert, args.act_as_user) # create a new diff if we need to if args.diff_id: diff_id = args.diff_id else: d = {'diff': args.raw_diff_file.read()} diff_id = conduit("differential.createrawdiff", d)["id"] fields = {} d = { 'id': args.revision_id, 'diffid': diff_id, 'fields': fields, 'message': args.message } result = conduit("differential.updaterevision", d) if args.format_id: print result["revisionid"] elif args.format_url: print result["uri"] else: # args.format_summary: print ( "Updated revision '{rev_id}', you can view it at this URL:\n" " {url}" ).format( rev_id=result["revisionid"], url=result["uri"])
def process(args): conduit = phlsys_makeconduit.make_conduit(args.uri, args.user, args.cert, args.act_as_user) d = {'diff': args.infile.read()} result = conduit("differential.createrawdiff", d) print(result["id"])
def process(args): conduit = phlsys_makeconduit.make_conduit( args.uri, args.user, args.cert, args.act_as_user) # conduit expects PHIDs not plain usernames user_phids = phlcon_user.UserPhidCache(conduit) user_phids.add_hint_list( _combine_lists_if_not_none(args.owners, args.ccs)) authors = [user_phids.get_phid(user) for user in args.authors] owners = [user_phids.get_phid(user) for user in args.owners] ccs = [user_phids.get_phid(user) for user in args.ccs] # conduit expects PHIDs not plain project names projects = None if args.projects: project_to_phid = phlcon_project.make_project_to_phid_dict(conduit) projects = [project_to_phid[p] for p in args.projects] filters = phlcon_maniphest.STATUS_FILTERS status = filters[args.status] if args.status is not None else None orderings = phlcon_maniphest.ORDERS order = orderings[args.order] if args.order is not None else None results = phlcon_maniphest.query( conduit, ids=args.ids, authors=authors, owners=owners, ccs=ccs, projects=projects, status=status, limit=args.max_results, offset=args.offset_results, order=order, text=args.text) results = [dict(r.__dict__) for r in results] for r in results: if r['statusName'] is None: r['statusName'] = phlcon_maniphest.STATUSES[int(r['status'])] # initialise to format for 'args.format_short' output_format = "{id} / {statusName} / {priority} / {title}" if args.format_ids: output_format = "{id}" elif args.format_string is not None: output_format = args.format_string if args.format_python: pprint.pprint(results) elif args.format_json: print(json.dumps(results, sort_keys=True, indent=2)) else: for r in results: print(output_format.format(**r))
def process(args): if args.title and not args.title.strip(): print('you must supply a non-empty title', file=sys.stderr) return 1 conduit = phlsys_makeconduit.make_conduit( args.uri, args.user, args.cert, args.act_as_user) # create_task expects an integer priority = None if args.priority is not None: priority = phlcon_maniphest.PRIORITIES[args.priority] # conduit expects PHIDs not plain usernames user_phids = phlcon_user.UserPhidCache(conduit) if args.owner: user_phids.add_hint(args.owner) if args.ccs: user_phids.add_hint_list(args.ccs) owner = user_phids.get_phid(args.owner) if args.owner else None ccs = [user_phids.get_phid(u) for u in args.ccs] if args.ccs else None # conduit expects PHIDs not plain project names projects = None if args.projects: project_to_phid = phlcon_project.make_project_to_phid_dict(conduit) projects = [project_to_phid[p] for p in args.projects] result = phlcon_maniphest.update_task( conduit, args.id, args.title, args.description, priority, owner, ccs, projects, args.comment, args.status) if args.format_id: print(result.id) elif args.format_url: print(result.uri) else: # args.format_summary: message = ( "Updated task '{task_id}', you can view it at this URL:\n" " {url}" ).format( task_id=result.id, url=result.uri) print(message)
def process(args): conduit = phlsys_makeconduit.make_conduit(args.uri, args.user, args.cert, args.act_as_user) message = args.message if args.message_file: message += args.message_file.read() result = phlcon_differential.create_inline_comment( conduit, args.id, args.filepath, args.start_line, message, not args.left_side, args.end_line_offset) print(result)
def process(args): conduit = phlsys_makeconduit.make_conduit( args.uri, args.user, args.cert, args.act_as_user) # create a new diff if we need to if args.diff_id: diff_id = args.diff_id else: d = {'diff': args.raw_diff_file.read()} diff_id = conduit("differential.createrawdiff", d)["id"] fields = {} d = { 'id': args.revision_id, 'diffid': diff_id, 'fields': fields, 'message': args.message } MessageFields = phlcon_differential.MessageFields args.ccs = _get_set_or_none(args.ccs) args.reviewers = _get_set_or_none(args.reviewers) if args.reviewers: fields[MessageFields.reviewer_phids] = args.reviewers if args.ccs: fields[MessageFields.cc_phids] = args.ccs # conduit expects PHIDs not plain usernames user_phids = phlcon_user.UserPhidCache(conduit) for users in fields.itervalues(): user_phids.add_hint_list(users) for key in fields.iterkeys(): fields[key] = [user_phids.get_phid(u) for u in fields[key]] result = conduit("differential.updaterevision", d) if args.format_id: print(result["revisionid"]) elif args.format_url: print(result["uri"]) else: # args.format_summary: print(( "Updated revision '{rev_id}', you can view it at this URL:\n" " {url}" ).format( rev_id=result["revisionid"], url=result["uri"]))
def __init__(self, conduitproxy_args, *args): # setup the long-running conduit for the proxy self.__conduitproxy_args = conduitproxy_args self.__conduit = phlsys_makeconduit.make_conduit( self.__conduitproxy_args.uri, self.__conduitproxy_args.user, self.__conduitproxy_args.cert) self.path = None # for pychecker self.rfile = None # for pychecker self.wfile = None # for pychecker self.headers = None # for pychecker BaseHTTPServer.BaseHTTPRequestHandler.__init__(self, *args)
def process(args): conduit = phlsys_makeconduit.make_conduit( args.uri, args.user, args.cert, args.act_as_user) if args.text: text = args.text elif args.text_file: text = args.text_file.read() else: print "error: you have not specified any content for the paste" sys.exit(1) result = phlcon_paste.create_paste( conduit, text, args.title, args.language) print result.uri if not args.format_id else result.id
def process(args): conduit = phlsys_makeconduit.make_conduit(args.uri, args.user, args.cert, args.act_as_user) if args.text: text = args.text elif args.text_file: text = args.text_file.read() else: print("error: you have not specified any content for the paste") sys.exit(1) result = phlcon_paste.create_paste(conduit, text, args.title, args.language) print(result.uri if not args.format_id else result.id)
def process(args): conduit = phlsys_makeconduit.make_conduit( args.uri, args.user, args.cert, args.act_as_user) # create a new diff if we need to if args.diff_id: diff_id = args.diff_id else: d = {'diff': args.raw_diff_file.read()} diff_id = conduit("differential.createrawdiff", d)["id"] fields = {} MessageFields = phlcon_differential.MessageFields if args.reviewers: fields[MessageFields.reviewer_phids] = args.reviewers if args.ccs: fields[MessageFields.cc_phids] = args.ccs # conduit expects PHIDs not plain usernames user_phids = phlcon_user.UserPhidCache(conduit) for users in fields.itervalues(): user_phids.add_hint_list(users) for key in fields.iterkeys(): fields[key] = [user_phids.get_phid(u) for u in fields[key]] fields[MessageFields.title] = args.title fields[MessageFields.test_plan] = args.test_plan if args.summary: fields[MessageFields.summary] = args.summary d = {'diffid': diff_id, 'fields': fields} result = conduit("differential.createrevision", d) if args.format_id: print(result["revisionid"]) elif args.format_url: print(result["uri"]) else: # args.format_summary: print(( "Created a new revision '{rev_id}', you can view it at this URL:\n" " {url}" ).format( rev_id=result["revisionid"], url=result["uri"]))
def process(args): conduit = phlsys_makeconduit.make_conduit(args.uri, args.user, args.cert) # create a new diff if we need to if args.diff_id: diff_id = args.diff_id else: d = {'diff': args.raw_diff_file.read()} diff_id = conduit.call("differential.createrawdiff", d)["id"] fields = {} MessageFields = phlcon_differential.MessageFields if args.reviewers: fields[MessageFields.reviewer_phids] = args.reviewers if args.ccs: fields[MessageFields.cc_phids] = args.ccs # conduit expects PHIDs not plain usernames user_phids = phlcon_user.UserPhidCache(conduit) for users in fields.itervalues(): user_phids.add_hint_list(users) for key in fields.iterkeys(): fields[key] = [user_phids.get_phid(u) for u in fields[key]] fields[MessageFields.title] = args.title fields[MessageFields.test_plan] = args.test_plan if args.summary: fields[MessageFields.summary] = args.summary d = {'diffid': diff_id, 'fields': fields} result = conduit.call("differential.createrevision", d) if args.format_id: print result["revisionid"] elif args.format_url: print result["uri"] else: # args.format_summary: print ( "Created a new revision '{rev_id}', you can view it at this URL:\n" " {url}" ).format( rev_id=result["revisionid"], url=result["uri"])
def process(args): conduit = phlsys_makeconduit.make_conduit( args.uri, args.user, args.cert, args.act_as_user) message = args.message if args.message_file: message += args.message_file.read() result = phlcon_differential.create_inline_comment( conduit, args.id, args.filepath, args.start_line, message, not args.left_side, args.end_line_offset) print result
def process(args): conduit = phlsys_makeconduit.make_conduit(args.uri, args.user, args.cert, args.act_as_user) d = {"message": args.message, "silent": args.silent, "action": phlcon_differential.USER_ACTIONS[args.action]} if args.message_file: d["message"] += args.message_file.read() ids = args.ids if args.ids_file: ids.extend([int(i) for i in args.ids_file.read().split()]) if not ids: print "error: you have not specified any revision ids" sys.exit(1) for i in ids: d["revision_id"] = i result = conduit("differential.createcomment", d) print result
def process(args): conduit = phlsys_makeconduit.make_conduit(args.uri, args.user, args.cert) # create a new diff if we need to if args.diff_id: diff_id = args.diff_id else: d = {'diff': args.raw_diff_file.read()} diff_id = conduit.call("differential.createrawdiff", d)["id"] fields = {} d = { 'id': args.revision_id, 'diffid': diff_id, 'fields': fields, 'message': args.message } result = conduit.call("differential.updaterevision", d) print result["revisionid"]
def process(args): if args.title and not args.title.strip(): print('you must supply a non-empty title', file=sys.stderr) return 1 conduit = phlsys_makeconduit.make_conduit(args.uri, args.user, args.cert, args.act_as_user) # create_task expects an integer priority = None if args.priority is not None: priority = phlcon_maniphest.PRIORITIES[args.priority] # conduit expects PHIDs not plain usernames user_phids = phlcon_user.UserPhidCache(conduit) if args.owner: user_phids.add_hint(args.owner) if args.ccs: user_phids.add_hint_list(args.ccs) owner = user_phids.get_phid(args.owner) if args.owner else None ccs = [user_phids.get_phid(u) for u in args.ccs] if args.ccs else None # conduit expects PHIDs not plain project names projects = None if args.projects: project_to_phid = phlcon_project.make_project_to_phid_dict(conduit) projects = [project_to_phid[p] for p in args.projects] result = phlcon_maniphest.update_task(conduit, args.id, args.title, args.description, priority, owner, ccs, projects, args.comment) if args.format_id: print(result.id) elif args.format_url: print(result.uri) else: # args.format_summary: message = ("Updated task '{task_id}', you can view it at this URL:\n" " {url}").format(task_id=result.id, url=result.uri) print(message)
def main(): args = parse_args() conduit = phlsys_makeconduit.make_conduit(args.uri, args.user, args.cert) error_revisions = [] novel_filter = NovelFileErrorFilter() error_filter = CompositeErrorFilter( BoringErrorFilter(), novel_filter) try: for revision in yield_revisions(conduit, args): linterate(args, conduit, revision, error_revisions, error_filter) # write new 'seen' errors after linterating, to give a chance for # the user to ctrl+c and prevent it being recorded # # it's pretty slow to write this out, we're doing it every time # that we've linted files we've downloaded from a webserver though, # so on balance it might not be so bad. novel_filter.write_seen() except phlsys_makeconduit.InsufficientInfoException as e: print("ERROR - insufficient information") print(e) print() print("N.B. you may also specify uri, user or cert directly like so:") print(" --uri URI address of phabricator instance") print(" --user USERNAME username of user to connect as") print(" --cert CERTIFICATE certificate for user Phabrictor account") return 1 if error_revisions: print('revisions with errors:', ' '.join(error_revisions)) else: print('no revisions had errors')
def process(args): conduit = phlsys_makeconduit.make_conduit(args.uri, args.user, args.cert) # create a new diff if we need to if args.diff_id: diff_id = args.diff_id else: d = {'diff': args.raw_diff_file.read()} diff_id = conduit.call("differential.createrawdiff", d)["id"] fields = {} MessageFields = phlcon_differential.MessageFields if args.reviewers: fields[MessageFields.reviewer_phids] = args.reviewers if args.ccs: fields[MessageFields.cc_phids] = args.ccs # convert all the usernames to userPHIDs # TODO: extract function and share with 'query' users = [u for users in fields.itervalues() for u in users] users = list(set(users)) userToPhid = {} if users: userToPhid = phlcon_user.make_username_phid_dict(conduit, users) for key in fields.iterkeys(): fields[key] = [userToPhid[u] for u in fields[key]] fields[MessageFields.title] = args.title fields[MessageFields.test_plan] = args.test_plan if args.summary: d[MessageFields.summary] = args.summary d = {'diffid': diff_id, 'fields': fields} result = conduit.call("differential.createrevision", d) print result["revisionid"]
def main(): args = parse_args() conduit = phlsys_makeconduit.make_conduit(args.uri, args.user, args.cert) error_revisions = [] novel_filter = NovelFileErrorFilter() error_filter = CompositeErrorFilter(BoringErrorFilter(), novel_filter) try: for revision in yield_revisions(conduit, args): linterate(args, conduit, revision, error_revisions, error_filter) # write new 'seen' errors after linterating, to give a chance for # the user to ctrl+c and prevent it being recorded # # it's pretty slow to write this out, we're doing it every time # that we've linted files we've downloaded from a webserver though, # so on balance it might not be so bad. novel_filter.write_seen() except phlsys_makeconduit.InsufficientInfoException as e: print("ERROR - insufficient information") print(e) print() print("N.B. you may also specify uri, user or cert directly like so:") print(" --uri URI address of phabricator instance") print(" --user USERNAME username of user to connect as") print(" --cert CERTIFICATE certificate for user Phabrictor account") return 1 if error_revisions: print('revisions with errors:', ' '.join(error_revisions)) else: print('no revisions had errors')
def process(args): conduit = phlsys_makeconduit.make_conduit( args.uri, args.user, args.cert, args.act_as_user) d = { 'message': args.message, 'silent': args.silent, 'action': phlcon_differential.USER_ACTIONS[args.action], 'attach_inlines': args.attach_inlines } if args.message_file: d['message'] += args.message_file.read() ids = args.ids if args.ids_file: ids.extend([int(i) for i in args.ids_file.read().split()]) if not ids: print("error: you have not specified any revision ids") sys.exit(1) for i in ids: phlcon_differential.create_comment(conduit, i, **d)
def process(args): conduit = phlsys_makeconduit.make_conduit(args.uri, args.user, args.cert, args.act_as_user) d = { 'message': args.message, 'silent': args.silent, 'action': phlcon_differential.USER_ACTIONS[args.action], 'attach_inlines': args.attach_inlines } if args.message_file: d['message'] += args.message_file.read() ids = args.ids if args.ids_file: ids.extend([int(i) for i in args.ids_file.read().split()]) if not ids: print("error: you have not specified any revision ids") sys.exit(1) for i in ids: phlcon_differential.create_comment(conduit, i, **d)
def process(args): conduit = phlsys_makeconduit.make_conduit(args.uri, args.user, args.cert) me = conduit.get_user() d = {} def processUserField(name, param, add_me): d[name] = param if add_me: d[name].append(me) processUserField("authors", args.authors, args.author_me) processUserField("reviewers", args.reviewers, args.reviewer_me) processUserField("ccs", args.ccs, args.cc_me) processUserField("subscribers", args.subscribers, args.subscriber_me) processUserField( "responsibleUsers", args.responsible_users, args.responsible_me) users = [u for users in d.itervalues() for u in users] users = list(set(users)) userToPhid = {} if users: userToPhid = phlcon_user.make_username_phid_dict(conduit, users) # XXX: check for duplicates in author and reviewer # XXX: check for bad userToPhid for key in d.iterkeys(): d[key] = [userToPhid[u] for u in d[key]] if args.ids: d["ids"] = args.ids if args.ids_stdin: ids = [int(i) for i in " ".join(sys.stdin.readlines()).split()] d["ids"] = args.ids + ids if args.status_type: d["status"] = "status-" + args.status_type if args.arcanist_projects: d["arcanistProjects"] = args.arcanist_projects if args.max_results: d["limit"] = args.max_results if args.offset_results: d["offset"] = args.offset_results # perform the query results = conduit.call("differential.query", d) # apply filters if args.statuses: new_results = [] for r in results: if r["statusName"] in args.statuses: new_results.append(r) results = new_results if args.update_min_age: now = datetime.datetime.now() new_results = [] for r in results: modified = datetime.datetime.fromtimestamp( float(r["dateModified"])) age = now - modified if age >= args.update_min_age: new_results.append(r) results = new_results if args.update_max_age: now = datetime.datetime.now() new_results = [] for r in results: modified = datetime.datetime.fromtimestamp( float(r["dateModified"])) age = now - modified if age <= args.update_max_age: new_results.append(r) results = new_results # apply transformations if args.translate: # gather user PHIDs user_phids = set() for r in results: user_phids.add(r["authorPHID"]) for u in r["ccs"]: user_phids.add(u) for u in r["reviewers"]: user_phids.add(u) # get the names back phidToUser = {} user_phids = list(user_phids) if user_phids: phidToUser = phlcon_user.make_phid_username_dict( conduit, user_phids) # do the translation for r in results: r[u"authorUsername"] = phidToUser[r["authorPHID"]] r[u"ccUsernames"] = [phidToUser[u] for u in r["ccs"]] r[u"reviewerUsernames"] = [phidToUser[u] for u in r["reviewers"]] for r in results: r[u"humanTimeSinceDateModified"] = humanTimeSince( datetime.datetime.fromtimestamp(float(r["dateModified"]))) r[u"humanTimeSinceDateCreated"] = humanTimeSince( datetime.datetime.fromtimestamp(float(r["dateCreated"]))) # output results if not args.format_type and not args.format_string: args.format_type = "short" if args.format_type: if args.format_type == "json": print json.dumps(results, sort_keys=True, indent=2) elif args.format_type == "python": pprint.pprint(results) elif args.format_type == "short": shortTemplate = string.Template("$id / $statusName / $title") for x in results: print shortTemplate.safe_substitute(x) elif args.format_type == "ids": shortTemplate = string.Template("$id") for x in results: print shortTemplate.safe_substitute(x) else: raise Exception("unsupported format") else: template = string.Template(args.format_string) for x in results: print template.safe_substitute(x)