sapling/edenscm/hgext/fbconduit.py

271 lines
7.4 KiB
Python
Raw Normal View History

# fbconduit.py
#
# An extension to query remote servers for extra information via conduit RPC
#
# Copyright 2015 Facebook, Inc.
import json
import re
from urllib import urlencode
from edenscm.mercurial import error, namespaces, node, registrar, revset, templater
from edenscm.mercurial.i18n import _
from edenscm.mercurial.util import httplib
namespacepredicate = registrar.namespacepredicate()
conduit_host = None
conduit_path = None
conduit_protocol = None
connection = None
DEFAULT_TIMEOUT = 60
MAX_CONNECT_RETRIES = 3
flake8: enable F821 check Summary: This check is useful and detects real errors (ex. fbconduit). Unfortunately `arc lint` will run it with both py2 and py3 so a lot of py2 builtins will still be warned. I didn't find a clean way to disable py3 check. So this diff tries to fix them. For `xrange`, the change was done by a script: ``` import sys import redbaron headertypes = {'comment', 'endl', 'from_import', 'import', 'string', 'assignment', 'atomtrailers'} xrangefix = '''try: xrange(0) except NameError: xrange = range ''' def isxrange(x): try: return x[0].value == 'xrange' except Exception: return False def main(argv): for i, path in enumerate(argv): print('(%d/%d) scanning %s' % (i + 1, len(argv), path)) content = open(path).read() try: red = redbaron.RedBaron(content) except Exception: print(' warning: failed to parse') continue hasxrange = red.find('atomtrailersnode', value=isxrange) hasxrangefix = 'xrange = range' in content if hasxrangefix or not hasxrange: print(' no need to change') continue # find a place to insert the compatibility statement changed = False for node in red: if node.type in headertypes: continue # node.insert_before is an easier API, but it has bugs changing # other "finally" and "except" positions. So do the insert # manually. # # node.insert_before(xrangefix) line = node.absolute_bounding_box.top_left.line - 1 lines = content.splitlines(1) content = ''.join(lines[:line]) + xrangefix + ''.join(lines[line:]) changed = True break if changed: # "content" is faster than "red.dumps()" open(path, 'w').write(content) print(' updated') if __name__ == "__main__": sys.exit(main(sys.argv[1:])) ``` For other py2 builtins that do not have a py3 equivalent, some `# noqa` were added as a workaround for now. Reviewed By: DurhamG Differential Revision: D6934535 fbshipit-source-id: 546b62830af144bc8b46788d2e0fd00496838939
2018-02-10 04:31:44 +03:00
try:
xrange(0)
except NameError:
xrange = range
class ConduitError(Exception):
pass
class HttpError(Exception):
pass
githashre = re.compile("g([0-9a-f]{40})")
phabhashre = re.compile("^r([A-Z]+)([0-9a-f]{12,40})$")
def extsetup(ui):
Parallel callout to scmquery through conduit Summary: Parallel callout to scmquery through conduit This implements the special case of log on a single directory, preserving follow behavior. To do this, we backtrackfrom the current head to find all draft revisions along the path, then find the common public ancestor of those. Once we find that, we can begin paging in results from the scmquery service. Pretty much a working diff at this point. Limits and boundary conditions have not been fully tested. Every once in a while I run into a bum query, which I suspect to be either a bad proxy or a service router failure; still debugging that. Could also be an issue with conduit. Other than that, things seem to work. Test Plan: Testing log with fastest setting (no revsets), revsets (using -M), and with extension disabled (--sparse): [zamsden@devbig192.prn1 ~/local/fbcode] time hg log tao --config extensions.fbconduit=~/local/fb-hgext/hgext3rd/fbconduit.py --config fbconduit.host=our.zamsden.devbig192.prn1.facebook.com --config extensions.fastlog=~/local/fb-hgext/hgext3rd/fastlog.py --pager=off -l 100 -M > a real 0m1.895s user 0m0.003s sys 0m0.004s [zamsden@devbig192.prn1 ~/local/fbcode] time hg log tao --config extensions.fbconduit=~/local/fb-hgext/hgext3rd/fbconduit.py --config fbconduit.host=our.zamsden.devbig192.prn1.facebook.com --config extensions.fastlog=~/local/fb-hgext/hgext3rd/fastlog.py --pager=off -l 100 > b real 0m1.308s user 0m0.005s sys 0m0.001s [zamsden@devbig192.prn1 ~/local/fbcode] diff a b [zamsden@devbig192.prn1 ~/local/fbcode] time hg log tao --config extensions.fbconduit=~/local/fb-hgext/hgext3rd/fbconduit.py --config fbconduit.host=our.zamsden.devbig192.prn1.facebook.com --config extensions.fastlog=~/local/fb-hgext/hgext3rd/fastlog.py --pager=off -l 100 --sparse > c real 0m7.320s user 0m0.004s sys 0m0.003s [zamsden@devbig192.prn1 ~/local/fbcode] diff a c Testing --user option: [zamsden@devbig192.prn1 ~/local/fbsource] time hg log fbcode/dragon --config extensions.fbconduit=~/local/fb-hgext/hgext3rd/fbconduit.py --config fbconduit.host=our.zamsden.devbig192.prn1.facebook.com --config extensions.fastlog=~/local/fb-hgext/hgext3rd/fastlog.py --pager=off -l 5 -u dmitri > a real 0m2.765s user 0m0.002s sys 0m0.004s [zamsden@devbig192.prn1 ~/local/fbsource] time hg log fbcode/dragon --config extensions.fbconduit=~/local/fb-hgext/hgext3rd/fbconduit.py --config fbconduit.host=our.zamsden.devbig192.prn1.facebook.com --config extensions.fastlog=~/local/fb-hgext/hgext3rd/fastlog.py --pager=off -l 5 -u dmitri --sparse > b real 0m23.247s user 0m0.005s sys 0m0.001s [zamsden@devbig192.prn1 ~/local/fbsource] diff a b [zamsden@devbig192.prn1 ~/local/fbsource] Testing same output enabled / disabled for -X option: [zamsden@devbig192.prn1 ~/local/fbsource] time hg log fbcode/lithium/ --config extensions.fbconduit=~/local/fb-hgext/hgext3rd/fbconduit.py --config fbconduit.host=our.zamsden.devbig192.prn1.facebook.com --config extensions.fastlog=~/local/fb-hgext/hgext3rd/fastlog.py --pager=off -l 20 -X '**TARGETS' > a real 0m1.292s user 0m0.002s sys 0m0.003s [zamsden@devbig192.prn1 ~/local/fbsource] time hg log fbcode/lithium/ --config extensions.fbconduit=~/local/fb-hgext/hgext3rd/fbconduit.py --config fbconduit.host=our.zamsden.devbig192.prn1.facebook.com --config extensions.fastlog=~/local/fb-hgext/hgext3rd/fastlog.py --pager=off -l 20 -X '**TARGETS' --sparse > b real 0m2.697s user 0m0.002s sys 0m0.004s [zamsden@devbig192.prn1 ~/local/fbsource] diff a b [zamsden@devbig192.prn1 ~/local/fbsource] Testing -k option: [zamsden@devbig192.prn1 ~/local/fbsource] time hg log fbcode/lithium/ --config extensions.fbconduit=~/local/fb-hgext/hgext3rd/fbconduit.py --config fbconduit.host=our.zamsden.devbig192.prn1.facebook.com --config extensions.fastlog=~/local/fb-hgext/hgext3rd/fastlog.py --pager=off -k 'e' -X '**TARGETS' -l 10 > a real 0m1.174s user 0m0.003s sys 0m0.003s [zamsden@devbig192.prn1 ~/local/fbsource] time hg log fbcode/lithium/ --config extensions.fbconduit=~/local/fb-hgext/hgext3rd/fbconduit.py --config fbconduit.host=our.zamsden.devbig192.prn1.facebook.com --config extensions.fastlog=~/local/fb-hgext/hgext3rd/fastlog.py --pager=off -k 'e' -X '**TARGETS' -l 10 --sparse > b real 0m1.259s user 0m0.004s sys 0m0.002s [zamsden@devbig192.prn1 ~/local/fbsource] diff a b [zamsden@devbig192.prn1 ~/local/fbsource] Testing -I option: [zamsden@devbig192.prn1 ~/local/fbsource] time hg log fbcode/scm/ --config extensions.fbconduit=~/local/fb-hgext/hgext3rd/fbconduit.py --config fbconduit.host=our.zamsden.devbig192.prn1.facebook.com --config extensions.fastlog=~/local/fb-hgext/hgext3rd/fastlog.py --pager=off -l 20 -I '**.py' > a real 0m1.473s user 0m0.005s sys 0m0.003s [zamsden@devbig192.prn1 ~/local/fbsource] time hg log fbcode/scm/ --config extensions.fbconduit=~/local/fb-hgext/hgext3rd/fbconduit.py --config fbconduit.host=our.zamsden.devbig192.prn1.facebook.com --config extensions.fastlog=~/local/fb-hgext/hgext3rd/fastlog.py --pager=off -l 20 -I '**.py' --sparse > b real 0m2.911s user 0m0.003s sys 0m0.002s [zamsden@devbig192.prn1 ~/local/fbsource] diff a b [zamsden@devbig192.prn1 ~/local/fbsource] Testing multiple directory output in all three modes - revset, fast filtered, and forcing original fallback with --sparse [zamsden@devbig192.prn1 ~/local/fbsource] time hg log fbcode/hphp/hhvm fbcode/hphp/runtime/ --config extensions.fbconduit=~/local/fb-hgext/hgext3rd/fbconduit.py --config fbconduit.host=our.zamsden.devbig192.prn1.facebook.com --config extensions.fastlog=~/local/fb-hgext/hgext3rd/fastlog.py --pager=off -l 100 -M > a real 0m2.892s user 0m0.003s sys 0m0.006s [zamsden@devbig192.prn1 ~/local/fbsource] time hg log fbcode/hphp/hhvm fbcode/hphp/runtime/ --config extensions.fbconduit=~/local/fb-hgext/hgext3rd/fbconduit.py --config fbconduit.host=our.zamsden.devbig192.prn1.facebook.com --config extensions.fastlog=~/local/fb-hgext/hgext3rd/fastlog.py --pager=off -l 100 > b real 0m2.575s user 0m0.697s sys 0m0.077s [zamsden@devbig192.prn1 ~/local/fbsource] time hg log fbcode/hphp/hhvm fbcode/hphp/runtime/ --config extensions.fbconduit=~/local/fb-hgext/hgext3rd/fbconduit.py --config fbconduit.host=our.zamsden.devbig192.prn1.facebook.com --config extensions.fastlog=~/local/fb-hgext/hgext3rd/fastlog.py --pager=off -l 100 --sparse > c real 0m7.339s user 0m0.003s sys 0m0.004s [zamsden@devbig192.prn1 ~/local/fbsource] diff a b [zamsden@devbig192.prn1 ~/local/fbsource] diff a c [zamsden@devbig192.prn1 ~/local/fbsource] Reviewers: rmcelroy, #scmquery, #mercurial, ttung, lcharignon, durham, stash Reviewed By: stash Subscribers: cdykes, lcharignon, quark, stash, mjpieters, jeroenv Differential Revision: https://phabricator.intern.facebook.com/D3634075 Tasks: 12341014 Signature: t1:3634075:1471039212:0989839636847a8e5da6a0ef9150035fcf5bb797
2016-08-13 01:52:50 +03:00
if not conduit_config(ui):
ui.warn(_("No conduit host specified in config; disabling fbconduit\n"))
return
revset.symbols["gitnode"] = gitnode
gitnode._weight = 10
Parallel callout to scmquery through conduit Summary: Parallel callout to scmquery through conduit This implements the special case of log on a single directory, preserving follow behavior. To do this, we backtrackfrom the current head to find all draft revisions along the path, then find the common public ancestor of those. Once we find that, we can begin paging in results from the scmquery service. Pretty much a working diff at this point. Limits and boundary conditions have not been fully tested. Every once in a while I run into a bum query, which I suspect to be either a bad proxy or a service router failure; still debugging that. Could also be an issue with conduit. Other than that, things seem to work. Test Plan: Testing log with fastest setting (no revsets), revsets (using -M), and with extension disabled (--sparse): [zamsden@devbig192.prn1 ~/local/fbcode] time hg log tao --config extensions.fbconduit=~/local/fb-hgext/hgext3rd/fbconduit.py --config fbconduit.host=our.zamsden.devbig192.prn1.facebook.com --config extensions.fastlog=~/local/fb-hgext/hgext3rd/fastlog.py --pager=off -l 100 -M > a real 0m1.895s user 0m0.003s sys 0m0.004s [zamsden@devbig192.prn1 ~/local/fbcode] time hg log tao --config extensions.fbconduit=~/local/fb-hgext/hgext3rd/fbconduit.py --config fbconduit.host=our.zamsden.devbig192.prn1.facebook.com --config extensions.fastlog=~/local/fb-hgext/hgext3rd/fastlog.py --pager=off -l 100 > b real 0m1.308s user 0m0.005s sys 0m0.001s [zamsden@devbig192.prn1 ~/local/fbcode] diff a b [zamsden@devbig192.prn1 ~/local/fbcode] time hg log tao --config extensions.fbconduit=~/local/fb-hgext/hgext3rd/fbconduit.py --config fbconduit.host=our.zamsden.devbig192.prn1.facebook.com --config extensions.fastlog=~/local/fb-hgext/hgext3rd/fastlog.py --pager=off -l 100 --sparse > c real 0m7.320s user 0m0.004s sys 0m0.003s [zamsden@devbig192.prn1 ~/local/fbcode] diff a c Testing --user option: [zamsden@devbig192.prn1 ~/local/fbsource] time hg log fbcode/dragon --config extensions.fbconduit=~/local/fb-hgext/hgext3rd/fbconduit.py --config fbconduit.host=our.zamsden.devbig192.prn1.facebook.com --config extensions.fastlog=~/local/fb-hgext/hgext3rd/fastlog.py --pager=off -l 5 -u dmitri > a real 0m2.765s user 0m0.002s sys 0m0.004s [zamsden@devbig192.prn1 ~/local/fbsource] time hg log fbcode/dragon --config extensions.fbconduit=~/local/fb-hgext/hgext3rd/fbconduit.py --config fbconduit.host=our.zamsden.devbig192.prn1.facebook.com --config extensions.fastlog=~/local/fb-hgext/hgext3rd/fastlog.py --pager=off -l 5 -u dmitri --sparse > b real 0m23.247s user 0m0.005s sys 0m0.001s [zamsden@devbig192.prn1 ~/local/fbsource] diff a b [zamsden@devbig192.prn1 ~/local/fbsource] Testing same output enabled / disabled for -X option: [zamsden@devbig192.prn1 ~/local/fbsource] time hg log fbcode/lithium/ --config extensions.fbconduit=~/local/fb-hgext/hgext3rd/fbconduit.py --config fbconduit.host=our.zamsden.devbig192.prn1.facebook.com --config extensions.fastlog=~/local/fb-hgext/hgext3rd/fastlog.py --pager=off -l 20 -X '**TARGETS' > a real 0m1.292s user 0m0.002s sys 0m0.003s [zamsden@devbig192.prn1 ~/local/fbsource] time hg log fbcode/lithium/ --config extensions.fbconduit=~/local/fb-hgext/hgext3rd/fbconduit.py --config fbconduit.host=our.zamsden.devbig192.prn1.facebook.com --config extensions.fastlog=~/local/fb-hgext/hgext3rd/fastlog.py --pager=off -l 20 -X '**TARGETS' --sparse > b real 0m2.697s user 0m0.002s sys 0m0.004s [zamsden@devbig192.prn1 ~/local/fbsource] diff a b [zamsden@devbig192.prn1 ~/local/fbsource] Testing -k option: [zamsden@devbig192.prn1 ~/local/fbsource] time hg log fbcode/lithium/ --config extensions.fbconduit=~/local/fb-hgext/hgext3rd/fbconduit.py --config fbconduit.host=our.zamsden.devbig192.prn1.facebook.com --config extensions.fastlog=~/local/fb-hgext/hgext3rd/fastlog.py --pager=off -k 'e' -X '**TARGETS' -l 10 > a real 0m1.174s user 0m0.003s sys 0m0.003s [zamsden@devbig192.prn1 ~/local/fbsource] time hg log fbcode/lithium/ --config extensions.fbconduit=~/local/fb-hgext/hgext3rd/fbconduit.py --config fbconduit.host=our.zamsden.devbig192.prn1.facebook.com --config extensions.fastlog=~/local/fb-hgext/hgext3rd/fastlog.py --pager=off -k 'e' -X '**TARGETS' -l 10 --sparse > b real 0m1.259s user 0m0.004s sys 0m0.002s [zamsden@devbig192.prn1 ~/local/fbsource] diff a b [zamsden@devbig192.prn1 ~/local/fbsource] Testing -I option: [zamsden@devbig192.prn1 ~/local/fbsource] time hg log fbcode/scm/ --config extensions.fbconduit=~/local/fb-hgext/hgext3rd/fbconduit.py --config fbconduit.host=our.zamsden.devbig192.prn1.facebook.com --config extensions.fastlog=~/local/fb-hgext/hgext3rd/fastlog.py --pager=off -l 20 -I '**.py' > a real 0m1.473s user 0m0.005s sys 0m0.003s [zamsden@devbig192.prn1 ~/local/fbsource] time hg log fbcode/scm/ --config extensions.fbconduit=~/local/fb-hgext/hgext3rd/fbconduit.py --config fbconduit.host=our.zamsden.devbig192.prn1.facebook.com --config extensions.fastlog=~/local/fb-hgext/hgext3rd/fastlog.py --pager=off -l 20 -I '**.py' --sparse > b real 0m2.911s user 0m0.003s sys 0m0.002s [zamsden@devbig192.prn1 ~/local/fbsource] diff a b [zamsden@devbig192.prn1 ~/local/fbsource] Testing multiple directory output in all three modes - revset, fast filtered, and forcing original fallback with --sparse [zamsden@devbig192.prn1 ~/local/fbsource] time hg log fbcode/hphp/hhvm fbcode/hphp/runtime/ --config extensions.fbconduit=~/local/fb-hgext/hgext3rd/fbconduit.py --config fbconduit.host=our.zamsden.devbig192.prn1.facebook.com --config extensions.fastlog=~/local/fb-hgext/hgext3rd/fastlog.py --pager=off -l 100 -M > a real 0m2.892s user 0m0.003s sys 0m0.006s [zamsden@devbig192.prn1 ~/local/fbsource] time hg log fbcode/hphp/hhvm fbcode/hphp/runtime/ --config extensions.fbconduit=~/local/fb-hgext/hgext3rd/fbconduit.py --config fbconduit.host=our.zamsden.devbig192.prn1.facebook.com --config extensions.fastlog=~/local/fb-hgext/hgext3rd/fastlog.py --pager=off -l 100 > b real 0m2.575s user 0m0.697s sys 0m0.077s [zamsden@devbig192.prn1 ~/local/fbsource] time hg log fbcode/hphp/hhvm fbcode/hphp/runtime/ --config extensions.fbconduit=~/local/fb-hgext/hgext3rd/fbconduit.py --config fbconduit.host=our.zamsden.devbig192.prn1.facebook.com --config extensions.fastlog=~/local/fb-hgext/hgext3rd/fastlog.py --pager=off -l 100 --sparse > c real 0m7.339s user 0m0.003s sys 0m0.004s [zamsden@devbig192.prn1 ~/local/fbsource] diff a b [zamsden@devbig192.prn1 ~/local/fbsource] diff a c [zamsden@devbig192.prn1 ~/local/fbsource] Reviewers: rmcelroy, #scmquery, #mercurial, ttung, lcharignon, durham, stash Reviewed By: stash Subscribers: cdykes, lcharignon, quark, stash, mjpieters, jeroenv Differential Revision: https://phabricator.intern.facebook.com/D3634075 Tasks: 12341014 Signature: t1:3634075:1471039212:0989839636847a8e5da6a0ef9150035fcf5bb797
2016-08-13 01:52:50 +03:00
def conduit_config(ui, host=None, path=None, protocol=None):
global conduit_host, conduit_path, conduit_protocol
conduit_host = host or ui.config("fbconduit", "host")
conduit_path = path or ui.config("fbconduit", "path")
conduit_protocol = protocol or ui.config("fbconduit", "protocol")
Parallel callout to scmquery through conduit Summary: Parallel callout to scmquery through conduit This implements the special case of log on a single directory, preserving follow behavior. To do this, we backtrackfrom the current head to find all draft revisions along the path, then find the common public ancestor of those. Once we find that, we can begin paging in results from the scmquery service. Pretty much a working diff at this point. Limits and boundary conditions have not been fully tested. Every once in a while I run into a bum query, which I suspect to be either a bad proxy or a service router failure; still debugging that. Could also be an issue with conduit. Other than that, things seem to work. Test Plan: Testing log with fastest setting (no revsets), revsets (using -M), and with extension disabled (--sparse): [zamsden@devbig192.prn1 ~/local/fbcode] time hg log tao --config extensions.fbconduit=~/local/fb-hgext/hgext3rd/fbconduit.py --config fbconduit.host=our.zamsden.devbig192.prn1.facebook.com --config extensions.fastlog=~/local/fb-hgext/hgext3rd/fastlog.py --pager=off -l 100 -M > a real 0m1.895s user 0m0.003s sys 0m0.004s [zamsden@devbig192.prn1 ~/local/fbcode] time hg log tao --config extensions.fbconduit=~/local/fb-hgext/hgext3rd/fbconduit.py --config fbconduit.host=our.zamsden.devbig192.prn1.facebook.com --config extensions.fastlog=~/local/fb-hgext/hgext3rd/fastlog.py --pager=off -l 100 > b real 0m1.308s user 0m0.005s sys 0m0.001s [zamsden@devbig192.prn1 ~/local/fbcode] diff a b [zamsden@devbig192.prn1 ~/local/fbcode] time hg log tao --config extensions.fbconduit=~/local/fb-hgext/hgext3rd/fbconduit.py --config fbconduit.host=our.zamsden.devbig192.prn1.facebook.com --config extensions.fastlog=~/local/fb-hgext/hgext3rd/fastlog.py --pager=off -l 100 --sparse > c real 0m7.320s user 0m0.004s sys 0m0.003s [zamsden@devbig192.prn1 ~/local/fbcode] diff a c Testing --user option: [zamsden@devbig192.prn1 ~/local/fbsource] time hg log fbcode/dragon --config extensions.fbconduit=~/local/fb-hgext/hgext3rd/fbconduit.py --config fbconduit.host=our.zamsden.devbig192.prn1.facebook.com --config extensions.fastlog=~/local/fb-hgext/hgext3rd/fastlog.py --pager=off -l 5 -u dmitri > a real 0m2.765s user 0m0.002s sys 0m0.004s [zamsden@devbig192.prn1 ~/local/fbsource] time hg log fbcode/dragon --config extensions.fbconduit=~/local/fb-hgext/hgext3rd/fbconduit.py --config fbconduit.host=our.zamsden.devbig192.prn1.facebook.com --config extensions.fastlog=~/local/fb-hgext/hgext3rd/fastlog.py --pager=off -l 5 -u dmitri --sparse > b real 0m23.247s user 0m0.005s sys 0m0.001s [zamsden@devbig192.prn1 ~/local/fbsource] diff a b [zamsden@devbig192.prn1 ~/local/fbsource] Testing same output enabled / disabled for -X option: [zamsden@devbig192.prn1 ~/local/fbsource] time hg log fbcode/lithium/ --config extensions.fbconduit=~/local/fb-hgext/hgext3rd/fbconduit.py --config fbconduit.host=our.zamsden.devbig192.prn1.facebook.com --config extensions.fastlog=~/local/fb-hgext/hgext3rd/fastlog.py --pager=off -l 20 -X '**TARGETS' > a real 0m1.292s user 0m0.002s sys 0m0.003s [zamsden@devbig192.prn1 ~/local/fbsource] time hg log fbcode/lithium/ --config extensions.fbconduit=~/local/fb-hgext/hgext3rd/fbconduit.py --config fbconduit.host=our.zamsden.devbig192.prn1.facebook.com --config extensions.fastlog=~/local/fb-hgext/hgext3rd/fastlog.py --pager=off -l 20 -X '**TARGETS' --sparse > b real 0m2.697s user 0m0.002s sys 0m0.004s [zamsden@devbig192.prn1 ~/local/fbsource] diff a b [zamsden@devbig192.prn1 ~/local/fbsource] Testing -k option: [zamsden@devbig192.prn1 ~/local/fbsource] time hg log fbcode/lithium/ --config extensions.fbconduit=~/local/fb-hgext/hgext3rd/fbconduit.py --config fbconduit.host=our.zamsden.devbig192.prn1.facebook.com --config extensions.fastlog=~/local/fb-hgext/hgext3rd/fastlog.py --pager=off -k 'e' -X '**TARGETS' -l 10 > a real 0m1.174s user 0m0.003s sys 0m0.003s [zamsden@devbig192.prn1 ~/local/fbsource] time hg log fbcode/lithium/ --config extensions.fbconduit=~/local/fb-hgext/hgext3rd/fbconduit.py --config fbconduit.host=our.zamsden.devbig192.prn1.facebook.com --config extensions.fastlog=~/local/fb-hgext/hgext3rd/fastlog.py --pager=off -k 'e' -X '**TARGETS' -l 10 --sparse > b real 0m1.259s user 0m0.004s sys 0m0.002s [zamsden@devbig192.prn1 ~/local/fbsource] diff a b [zamsden@devbig192.prn1 ~/local/fbsource] Testing -I option: [zamsden@devbig192.prn1 ~/local/fbsource] time hg log fbcode/scm/ --config extensions.fbconduit=~/local/fb-hgext/hgext3rd/fbconduit.py --config fbconduit.host=our.zamsden.devbig192.prn1.facebook.com --config extensions.fastlog=~/local/fb-hgext/hgext3rd/fastlog.py --pager=off -l 20 -I '**.py' > a real 0m1.473s user 0m0.005s sys 0m0.003s [zamsden@devbig192.prn1 ~/local/fbsource] time hg log fbcode/scm/ --config extensions.fbconduit=~/local/fb-hgext/hgext3rd/fbconduit.py --config fbconduit.host=our.zamsden.devbig192.prn1.facebook.com --config extensions.fastlog=~/local/fb-hgext/hgext3rd/fastlog.py --pager=off -l 20 -I '**.py' --sparse > b real 0m2.911s user 0m0.003s sys 0m0.002s [zamsden@devbig192.prn1 ~/local/fbsource] diff a b [zamsden@devbig192.prn1 ~/local/fbsource] Testing multiple directory output in all three modes - revset, fast filtered, and forcing original fallback with --sparse [zamsden@devbig192.prn1 ~/local/fbsource] time hg log fbcode/hphp/hhvm fbcode/hphp/runtime/ --config extensions.fbconduit=~/local/fb-hgext/hgext3rd/fbconduit.py --config fbconduit.host=our.zamsden.devbig192.prn1.facebook.com --config extensions.fastlog=~/local/fb-hgext/hgext3rd/fastlog.py --pager=off -l 100 -M > a real 0m2.892s user 0m0.003s sys 0m0.006s [zamsden@devbig192.prn1 ~/local/fbsource] time hg log fbcode/hphp/hhvm fbcode/hphp/runtime/ --config extensions.fbconduit=~/local/fb-hgext/hgext3rd/fbconduit.py --config fbconduit.host=our.zamsden.devbig192.prn1.facebook.com --config extensions.fastlog=~/local/fb-hgext/hgext3rd/fastlog.py --pager=off -l 100 > b real 0m2.575s user 0m0.697s sys 0m0.077s [zamsden@devbig192.prn1 ~/local/fbsource] time hg log fbcode/hphp/hhvm fbcode/hphp/runtime/ --config extensions.fbconduit=~/local/fb-hgext/hgext3rd/fbconduit.py --config fbconduit.host=our.zamsden.devbig192.prn1.facebook.com --config extensions.fastlog=~/local/fb-hgext/hgext3rd/fastlog.py --pager=off -l 100 --sparse > c real 0m7.339s user 0m0.003s sys 0m0.004s [zamsden@devbig192.prn1 ~/local/fbsource] diff a b [zamsden@devbig192.prn1 ~/local/fbsource] diff a c [zamsden@devbig192.prn1 ~/local/fbsource] Reviewers: rmcelroy, #scmquery, #mercurial, ttung, lcharignon, durham, stash Reviewed By: stash Subscribers: cdykes, lcharignon, quark, stash, mjpieters, jeroenv Differential Revision: https://phabricator.intern.facebook.com/D3634075 Tasks: 12341014 Signature: t1:3634075:1471039212:0989839636847a8e5da6a0ef9150035fcf5bb797
2016-08-13 01:52:50 +03:00
if conduit_host is None:
return False
if conduit_protocol is None:
conduit_protocol = "https"
Parallel callout to scmquery through conduit Summary: Parallel callout to scmquery through conduit This implements the special case of log on a single directory, preserving follow behavior. To do this, we backtrackfrom the current head to find all draft revisions along the path, then find the common public ancestor of those. Once we find that, we can begin paging in results from the scmquery service. Pretty much a working diff at this point. Limits and boundary conditions have not been fully tested. Every once in a while I run into a bum query, which I suspect to be either a bad proxy or a service router failure; still debugging that. Could also be an issue with conduit. Other than that, things seem to work. Test Plan: Testing log with fastest setting (no revsets), revsets (using -M), and with extension disabled (--sparse): [zamsden@devbig192.prn1 ~/local/fbcode] time hg log tao --config extensions.fbconduit=~/local/fb-hgext/hgext3rd/fbconduit.py --config fbconduit.host=our.zamsden.devbig192.prn1.facebook.com --config extensions.fastlog=~/local/fb-hgext/hgext3rd/fastlog.py --pager=off -l 100 -M > a real 0m1.895s user 0m0.003s sys 0m0.004s [zamsden@devbig192.prn1 ~/local/fbcode] time hg log tao --config extensions.fbconduit=~/local/fb-hgext/hgext3rd/fbconduit.py --config fbconduit.host=our.zamsden.devbig192.prn1.facebook.com --config extensions.fastlog=~/local/fb-hgext/hgext3rd/fastlog.py --pager=off -l 100 > b real 0m1.308s user 0m0.005s sys 0m0.001s [zamsden@devbig192.prn1 ~/local/fbcode] diff a b [zamsden@devbig192.prn1 ~/local/fbcode] time hg log tao --config extensions.fbconduit=~/local/fb-hgext/hgext3rd/fbconduit.py --config fbconduit.host=our.zamsden.devbig192.prn1.facebook.com --config extensions.fastlog=~/local/fb-hgext/hgext3rd/fastlog.py --pager=off -l 100 --sparse > c real 0m7.320s user 0m0.004s sys 0m0.003s [zamsden@devbig192.prn1 ~/local/fbcode] diff a c Testing --user option: [zamsden@devbig192.prn1 ~/local/fbsource] time hg log fbcode/dragon --config extensions.fbconduit=~/local/fb-hgext/hgext3rd/fbconduit.py --config fbconduit.host=our.zamsden.devbig192.prn1.facebook.com --config extensions.fastlog=~/local/fb-hgext/hgext3rd/fastlog.py --pager=off -l 5 -u dmitri > a real 0m2.765s user 0m0.002s sys 0m0.004s [zamsden@devbig192.prn1 ~/local/fbsource] time hg log fbcode/dragon --config extensions.fbconduit=~/local/fb-hgext/hgext3rd/fbconduit.py --config fbconduit.host=our.zamsden.devbig192.prn1.facebook.com --config extensions.fastlog=~/local/fb-hgext/hgext3rd/fastlog.py --pager=off -l 5 -u dmitri --sparse > b real 0m23.247s user 0m0.005s sys 0m0.001s [zamsden@devbig192.prn1 ~/local/fbsource] diff a b [zamsden@devbig192.prn1 ~/local/fbsource] Testing same output enabled / disabled for -X option: [zamsden@devbig192.prn1 ~/local/fbsource] time hg log fbcode/lithium/ --config extensions.fbconduit=~/local/fb-hgext/hgext3rd/fbconduit.py --config fbconduit.host=our.zamsden.devbig192.prn1.facebook.com --config extensions.fastlog=~/local/fb-hgext/hgext3rd/fastlog.py --pager=off -l 20 -X '**TARGETS' > a real 0m1.292s user 0m0.002s sys 0m0.003s [zamsden@devbig192.prn1 ~/local/fbsource] time hg log fbcode/lithium/ --config extensions.fbconduit=~/local/fb-hgext/hgext3rd/fbconduit.py --config fbconduit.host=our.zamsden.devbig192.prn1.facebook.com --config extensions.fastlog=~/local/fb-hgext/hgext3rd/fastlog.py --pager=off -l 20 -X '**TARGETS' --sparse > b real 0m2.697s user 0m0.002s sys 0m0.004s [zamsden@devbig192.prn1 ~/local/fbsource] diff a b [zamsden@devbig192.prn1 ~/local/fbsource] Testing -k option: [zamsden@devbig192.prn1 ~/local/fbsource] time hg log fbcode/lithium/ --config extensions.fbconduit=~/local/fb-hgext/hgext3rd/fbconduit.py --config fbconduit.host=our.zamsden.devbig192.prn1.facebook.com --config extensions.fastlog=~/local/fb-hgext/hgext3rd/fastlog.py --pager=off -k 'e' -X '**TARGETS' -l 10 > a real 0m1.174s user 0m0.003s sys 0m0.003s [zamsden@devbig192.prn1 ~/local/fbsource] time hg log fbcode/lithium/ --config extensions.fbconduit=~/local/fb-hgext/hgext3rd/fbconduit.py --config fbconduit.host=our.zamsden.devbig192.prn1.facebook.com --config extensions.fastlog=~/local/fb-hgext/hgext3rd/fastlog.py --pager=off -k 'e' -X '**TARGETS' -l 10 --sparse > b real 0m1.259s user 0m0.004s sys 0m0.002s [zamsden@devbig192.prn1 ~/local/fbsource] diff a b [zamsden@devbig192.prn1 ~/local/fbsource] Testing -I option: [zamsden@devbig192.prn1 ~/local/fbsource] time hg log fbcode/scm/ --config extensions.fbconduit=~/local/fb-hgext/hgext3rd/fbconduit.py --config fbconduit.host=our.zamsden.devbig192.prn1.facebook.com --config extensions.fastlog=~/local/fb-hgext/hgext3rd/fastlog.py --pager=off -l 20 -I '**.py' > a real 0m1.473s user 0m0.005s sys 0m0.003s [zamsden@devbig192.prn1 ~/local/fbsource] time hg log fbcode/scm/ --config extensions.fbconduit=~/local/fb-hgext/hgext3rd/fbconduit.py --config fbconduit.host=our.zamsden.devbig192.prn1.facebook.com --config extensions.fastlog=~/local/fb-hgext/hgext3rd/fastlog.py --pager=off -l 20 -I '**.py' --sparse > b real 0m2.911s user 0m0.003s sys 0m0.002s [zamsden@devbig192.prn1 ~/local/fbsource] diff a b [zamsden@devbig192.prn1 ~/local/fbsource] Testing multiple directory output in all three modes - revset, fast filtered, and forcing original fallback with --sparse [zamsden@devbig192.prn1 ~/local/fbsource] time hg log fbcode/hphp/hhvm fbcode/hphp/runtime/ --config extensions.fbconduit=~/local/fb-hgext/hgext3rd/fbconduit.py --config fbconduit.host=our.zamsden.devbig192.prn1.facebook.com --config extensions.fastlog=~/local/fb-hgext/hgext3rd/fastlog.py --pager=off -l 100 -M > a real 0m2.892s user 0m0.003s sys 0m0.006s [zamsden@devbig192.prn1 ~/local/fbsource] time hg log fbcode/hphp/hhvm fbcode/hphp/runtime/ --config extensions.fbconduit=~/local/fb-hgext/hgext3rd/fbconduit.py --config fbconduit.host=our.zamsden.devbig192.prn1.facebook.com --config extensions.fastlog=~/local/fb-hgext/hgext3rd/fastlog.py --pager=off -l 100 > b real 0m2.575s user 0m0.697s sys 0m0.077s [zamsden@devbig192.prn1 ~/local/fbsource] time hg log fbcode/hphp/hhvm fbcode/hphp/runtime/ --config extensions.fbconduit=~/local/fb-hgext/hgext3rd/fbconduit.py --config fbconduit.host=our.zamsden.devbig192.prn1.facebook.com --config extensions.fastlog=~/local/fb-hgext/hgext3rd/fastlog.py --pager=off -l 100 --sparse > c real 0m7.339s user 0m0.003s sys 0m0.004s [zamsden@devbig192.prn1 ~/local/fbsource] diff a b [zamsden@devbig192.prn1 ~/local/fbsource] diff a c [zamsden@devbig192.prn1 ~/local/fbsource] Reviewers: rmcelroy, #scmquery, #mercurial, ttung, lcharignon, durham, stash Reviewed By: stash Subscribers: cdykes, lcharignon, quark, stash, mjpieters, jeroenv Differential Revision: https://phabricator.intern.facebook.com/D3634075 Tasks: 12341014 Signature: t1:3634075:1471039212:0989839636847a8e5da6a0ef9150035fcf5bb797
2016-08-13 01:52:50 +03:00
return True
def call_conduit(method, timeout=DEFAULT_TIMEOUT, **kwargs):
global connection, conduit_host, conduit_path, conduit_protocol
# start connection
# TODO: move to python-requests
if connection is None:
if conduit_protocol == "https":
connection = httplib.HTTPSConnection(conduit_host, timeout=timeout)
elif conduit_protocol == "http":
connection = httplib.HTTPConnection(conduit_host, timeout=timeout)
# send request
path = conduit_path + method
args = urlencode({"params": json.dumps(kwargs)})
headers = {
"Connection": "Keep-Alive",
"Content-Type": "application/x-www-form-urlencoded",
}
flake8: enable F821 check Summary: This check is useful and detects real errors (ex. fbconduit). Unfortunately `arc lint` will run it with both py2 and py3 so a lot of py2 builtins will still be warned. I didn't find a clean way to disable py3 check. So this diff tries to fix them. For `xrange`, the change was done by a script: ``` import sys import redbaron headertypes = {'comment', 'endl', 'from_import', 'import', 'string', 'assignment', 'atomtrailers'} xrangefix = '''try: xrange(0) except NameError: xrange = range ''' def isxrange(x): try: return x[0].value == 'xrange' except Exception: return False def main(argv): for i, path in enumerate(argv): print('(%d/%d) scanning %s' % (i + 1, len(argv), path)) content = open(path).read() try: red = redbaron.RedBaron(content) except Exception: print(' warning: failed to parse') continue hasxrange = red.find('atomtrailersnode', value=isxrange) hasxrangefix = 'xrange = range' in content if hasxrangefix or not hasxrange: print(' no need to change') continue # find a place to insert the compatibility statement changed = False for node in red: if node.type in headertypes: continue # node.insert_before is an easier API, but it has bugs changing # other "finally" and "except" positions. So do the insert # manually. # # node.insert_before(xrangefix) line = node.absolute_bounding_box.top_left.line - 1 lines = content.splitlines(1) content = ''.join(lines[:line]) + xrangefix + ''.join(lines[line:]) changed = True break if changed: # "content" is faster than "red.dumps()" open(path, 'w').write(content) print(' updated') if __name__ == "__main__": sys.exit(main(sys.argv[1:])) ``` For other py2 builtins that do not have a py3 equivalent, some `# noqa` were added as a workaround for now. Reviewed By: DurhamG Differential Revision: D6934535 fbshipit-source-id: 546b62830af144bc8b46788d2e0fd00496838939
2018-02-10 04:31:44 +03:00
e = None
for attempt in xrange(MAX_CONNECT_RETRIES):
try:
connection.request("POST", path, args, headers)
break
except httplib.HTTPException as e:
connection.connect()
flake8: enable F821 check Summary: This check is useful and detects real errors (ex. fbconduit). Unfortunately `arc lint` will run it with both py2 and py3 so a lot of py2 builtins will still be warned. I didn't find a clean way to disable py3 check. So this diff tries to fix them. For `xrange`, the change was done by a script: ``` import sys import redbaron headertypes = {'comment', 'endl', 'from_import', 'import', 'string', 'assignment', 'atomtrailers'} xrangefix = '''try: xrange(0) except NameError: xrange = range ''' def isxrange(x): try: return x[0].value == 'xrange' except Exception: return False def main(argv): for i, path in enumerate(argv): print('(%d/%d) scanning %s' % (i + 1, len(argv), path)) content = open(path).read() try: red = redbaron.RedBaron(content) except Exception: print(' warning: failed to parse') continue hasxrange = red.find('atomtrailersnode', value=isxrange) hasxrangefix = 'xrange = range' in content if hasxrangefix or not hasxrange: print(' no need to change') continue # find a place to insert the compatibility statement changed = False for node in red: if node.type in headertypes: continue # node.insert_before is an easier API, but it has bugs changing # other "finally" and "except" positions. So do the insert # manually. # # node.insert_before(xrangefix) line = node.absolute_bounding_box.top_left.line - 1 lines = content.splitlines(1) content = ''.join(lines[:line]) + xrangefix + ''.join(lines[line:]) changed = True break if changed: # "content" is faster than "red.dumps()" open(path, 'w').write(content) print(' updated') if __name__ == "__main__": sys.exit(main(sys.argv[1:])) ``` For other py2 builtins that do not have a py3 equivalent, some `# noqa` were added as a workaround for now. Reviewed By: DurhamG Differential Revision: D6934535 fbshipit-source-id: 546b62830af144bc8b46788d2e0fd00496838939
2018-02-10 04:31:44 +03:00
if e:
raise e
# read http response
response = connection.getresponse()
if response.status != 200:
raise HttpError(response.reason)
result = response.read()
# strip jsonp header and parse
assert result.startswith("for(;;);")
result = json.loads(result[8:])
# check for conduit errors
if result["error_code"]:
raise ConduitError(result["error_info"])
# return RPC result
return result["result"]
# don't close the connection b/c we want to avoid the connection overhead
@templater.templatefunc("mirrornode")
def mirrornode(ctx, mapping, args):
"""template: find this commit in other repositories"""
reponame = mapping["repo"].ui.config("fbconduit", "reponame")
if not reponame:
# We don't know who we are, so we can't ask for a translation
return ""
if mapping["ctx"].mutable():
# Local commits don't have translations
return ""
node = mapping["ctx"].hex()
args = [f(ctx, mapping, a) for f, a in args]
if len(args) == 1:
torepo, totype = reponame, args[0]
else:
torepo, totype = args
try:
result = call_conduit(
"scmquery.get.mirrored.revs",
from_repo=reponame,
from_scm="hg",
to_repo=torepo,
to_scm=totype,
revs=[node],
)
except ConduitError as e:
if "unknown revision" not in str(e.args):
mapping["repo"].ui.warn((str(e.args) + "\n"))
return ""
return result.get(node, "")
templatekeyword = registrar.templatekeyword()
@templatekeyword("gitnode")
def showgitnode(repo, ctx, templ, **args):
"""Return the git revision corresponding to a given hg rev"""
reponame = repo.ui.config("fbconduit", "reponame")
if not reponame:
# We don't know who we are, so we can't ask for a translation
return ""
backingrepos = repo.ui.configlist("fbconduit", "backingrepos", default=[reponame])
if ctx.mutable():
# Local commits don't have translations
return ""
matches = []
for backingrepo in backingrepos:
try:
result = call_conduit(
"scmquery.get.mirrored.revs",
from_repo=reponame,
from_scm="hg",
to_repo=backingrepo,
to_scm="git",
revs=[ctx.hex()],
)
githash = result[ctx.hex()]
if githash != "":
matches.append((backingrepo, githash))
except ConduitError:
pass
if len(matches) == 0:
return ""
elif len(backingrepos) == 1:
return matches[0][1]
else:
# in case it's not clear, the sort() is to ensure the output is in a
# deterministic order.
matches.sort()
return "; ".join(["{0}: {1}".format(*match) for match in matches])
def gitnode(repo, subset, x):
"""``gitnode(id)``
Return the hg revision corresponding to a given git rev."""
l = revset.getargs(x, 1, 1, _("id requires one argument"))
n = revset.getstring(l[0], _("id requires a string"))
reponame = repo.ui.config("fbconduit", "reponame")
if not reponame:
# We don't know who we are, so we can't ask for a translation
return subset.filter(lambda r: False)
backingrepos = repo.ui.configlist("fbconduit", "backingrepos", default=[reponame])
lasterror = None
hghash = None
for backingrepo in backingrepos:
try:
result = call_conduit(
"scmquery.get.mirrored.revs",
from_repo=backingrepo,
from_scm="git",
to_repo=reponame,
to_scm="hg",
revs=[n],
)
hghash = result[n]
if hghash != "":
break
except Exception as ex:
lasterror = ex
if not hghash:
if lasterror:
repo.ui.warn(
("Could not translate revision {0}: {1}\n".format(n, lasterror))
)
else:
repo.ui.warn(("Could not translate revision {0}\n".format(n)))
return subset.filter(lambda r: False)
rn = repo[node.bin(hghash)].rev()
return subset.filter(lambda r: r == rn)
@namespacepredicate("conduit", priority=70)
def _getnamespace(_repo):
return namespaces.namespace(
listnames=lambda repo: [], namemap=_phablookup, nodemap=lambda repo, node: []
)
def _phablookup(repo, phabrev):
fbconduit: de-phabricator-ize hg and git hashes Summary: Remove the need to ommit the rREPO prefix when copy pasting from phabricator and looking up a commit. Test Plan: Ran the following in phabricator enabled HG repos 11/13 12:15 cdelahousse@dev4253 ~/fbsource/fbcode $ hg log -r rFBS27aa00fb74d9a3b82756dad6ff26fe253f1e9a70 --config extensions.fbconduit=~/local/fb-hgext/fbconduit.py changeset: 992495:27aa00fb74d9 user: Peng Li <pengli@fb.com> date: Tue Nov 03 10:29:01 2015 -0800 summary: Add a simple root dir arc library 11/13 12:21 cdelahousse@dev4253 ~/fbjava $ hg log -r rFBA8f1335e6d588 --config extensions.fbconduit=~/local/fb-hgext/fbconduit.py changeset: 18654:8f1335e6d588 user: Ryan Menezes <ryandm@fb.com> date: Thu Oct 22 09:59:27 2015 -0700 summary: move jenkins hook into fbjava/arcanist (fbjava changes) Tried the same on a repo with a git mirror that exists in phabricator: 11/16 11:40 cdelahousse@dev4253 ~/fbsource/fbcode $ hg log -r rFBCODE8272d25d65869ce059024ff38c7051388ad7b802 --config extensions.fbconduit=~/local/fb-hgext/fbconduit.py changeset: 1027287:f26a9c32ae08 user: Oleksandr Kuvshynov <oleksandr@fb.com> date: Sun Nov 15 19:16:39 2015 -0800 summary: [mf] simple cleanup of feed story view If a git hash is too small, abort: $ hg log -r rFBCODE8272d25d65869ce059024f --config extensions.fbconduit=~/local/fb-hgext/fbconduit.py abort: git hash must be 40 characters The previous commands depends on a list of repos set in my hgrc. See (D2660070) [fbconduit] gitcallsigns=LK, CFPUMA, CFSV, CFGK, CFMF, CFGMON, CF, RSIGMA, FA,· WAWEBCLIENT, SKY, FBCODE, FBOBJC, WAWP, SV, OVRMOBILEMAIN, WAANDROID, IGSRV, CPE, MSS, ANDROIDSDK, BUCK, IT-CHEF, WABB, ITINFRA, SIGMA, IOSSDK Reviewers: #sourcecontrol, durham, ericsumner Reviewed By: durham, ericsumner Subscribers: rmcelroy, ericsumner Differential Revision: https://phabricator.fb.com/D2653497 Tasks: 8361368 Signature: t1:2653497:1447480768:295079a7793e182ddea3aeece9cfaead1bfc1a57
2015-11-18 02:22:08 +03:00
# Is the given revset a phabricator hg hash (ie: rHGEXTaaacb34aacb34aa)
cl = repo.changelog
tonode = cl.node
def gittohg(githash):
return [tonode(rev) for rev in repo.revs("gitnode(%s)" % githash)]
phabmatch = phabhashre.match(phabrev)
fbconduit: de-phabricator-ize hg and git hashes Summary: Remove the need to ommit the rREPO prefix when copy pasting from phabricator and looking up a commit. Test Plan: Ran the following in phabricator enabled HG repos 11/13 12:15 cdelahousse@dev4253 ~/fbsource/fbcode $ hg log -r rFBS27aa00fb74d9a3b82756dad6ff26fe253f1e9a70 --config extensions.fbconduit=~/local/fb-hgext/fbconduit.py changeset: 992495:27aa00fb74d9 user: Peng Li <pengli@fb.com> date: Tue Nov 03 10:29:01 2015 -0800 summary: Add a simple root dir arc library 11/13 12:21 cdelahousse@dev4253 ~/fbjava $ hg log -r rFBA8f1335e6d588 --config extensions.fbconduit=~/local/fb-hgext/fbconduit.py changeset: 18654:8f1335e6d588 user: Ryan Menezes <ryandm@fb.com> date: Thu Oct 22 09:59:27 2015 -0700 summary: move jenkins hook into fbjava/arcanist (fbjava changes) Tried the same on a repo with a git mirror that exists in phabricator: 11/16 11:40 cdelahousse@dev4253 ~/fbsource/fbcode $ hg log -r rFBCODE8272d25d65869ce059024ff38c7051388ad7b802 --config extensions.fbconduit=~/local/fb-hgext/fbconduit.py changeset: 1027287:f26a9c32ae08 user: Oleksandr Kuvshynov <oleksandr@fb.com> date: Sun Nov 15 19:16:39 2015 -0800 summary: [mf] simple cleanup of feed story view If a git hash is too small, abort: $ hg log -r rFBCODE8272d25d65869ce059024f --config extensions.fbconduit=~/local/fb-hgext/fbconduit.py abort: git hash must be 40 characters The previous commands depends on a list of repos set in my hgrc. See (D2660070) [fbconduit] gitcallsigns=LK, CFPUMA, CFSV, CFGK, CFMF, CFGMON, CF, RSIGMA, FA,· WAWEBCLIENT, SKY, FBCODE, FBOBJC, WAWP, SV, OVRMOBILEMAIN, WAANDROID, IGSRV, CPE, MSS, ANDROIDSDK, BUCK, IT-CHEF, WABB, ITINFRA, SIGMA, IOSSDK Reviewers: #sourcecontrol, durham, ericsumner Reviewed By: durham, ericsumner Subscribers: rmcelroy, ericsumner Differential Revision: https://phabricator.fb.com/D2653497 Tasks: 8361368 Signature: t1:2653497:1447480768:295079a7793e182ddea3aeece9cfaead1bfc1a57
2015-11-18 02:22:08 +03:00
if phabmatch:
phabrepo = phabmatch.group(1)
phabhash = phabmatch.group(2)
fbconduit: de-phabricator-ize hg and git hashes Summary: Remove the need to ommit the rREPO prefix when copy pasting from phabricator and looking up a commit. Test Plan: Ran the following in phabricator enabled HG repos 11/13 12:15 cdelahousse@dev4253 ~/fbsource/fbcode $ hg log -r rFBS27aa00fb74d9a3b82756dad6ff26fe253f1e9a70 --config extensions.fbconduit=~/local/fb-hgext/fbconduit.py changeset: 992495:27aa00fb74d9 user: Peng Li <pengli@fb.com> date: Tue Nov 03 10:29:01 2015 -0800 summary: Add a simple root dir arc library 11/13 12:21 cdelahousse@dev4253 ~/fbjava $ hg log -r rFBA8f1335e6d588 --config extensions.fbconduit=~/local/fb-hgext/fbconduit.py changeset: 18654:8f1335e6d588 user: Ryan Menezes <ryandm@fb.com> date: Thu Oct 22 09:59:27 2015 -0700 summary: move jenkins hook into fbjava/arcanist (fbjava changes) Tried the same on a repo with a git mirror that exists in phabricator: 11/16 11:40 cdelahousse@dev4253 ~/fbsource/fbcode $ hg log -r rFBCODE8272d25d65869ce059024ff38c7051388ad7b802 --config extensions.fbconduit=~/local/fb-hgext/fbconduit.py changeset: 1027287:f26a9c32ae08 user: Oleksandr Kuvshynov <oleksandr@fb.com> date: Sun Nov 15 19:16:39 2015 -0800 summary: [mf] simple cleanup of feed story view If a git hash is too small, abort: $ hg log -r rFBCODE8272d25d65869ce059024f --config extensions.fbconduit=~/local/fb-hgext/fbconduit.py abort: git hash must be 40 characters The previous commands depends on a list of repos set in my hgrc. See (D2660070) [fbconduit] gitcallsigns=LK, CFPUMA, CFSV, CFGK, CFMF, CFGMON, CF, RSIGMA, FA,· WAWEBCLIENT, SKY, FBCODE, FBOBJC, WAWP, SV, OVRMOBILEMAIN, WAANDROID, IGSRV, CPE, MSS, ANDROIDSDK, BUCK, IT-CHEF, WABB, ITINFRA, SIGMA, IOSSDK Reviewers: #sourcecontrol, durham, ericsumner Reviewed By: durham, ericsumner Subscribers: rmcelroy, ericsumner Differential Revision: https://phabricator.fb.com/D2653497 Tasks: 8361368 Signature: t1:2653497:1447480768:295079a7793e182ddea3aeece9cfaead1bfc1a57
2015-11-18 02:22:08 +03:00
# The hash may be a git hash
if phabrepo in repo.ui.configlist("fbconduit", "gitcallsigns", []):
return gittohg(phabhash)
fbconduit: de-phabricator-ize hg and git hashes Summary: Remove the need to ommit the rREPO prefix when copy pasting from phabricator and looking up a commit. Test Plan: Ran the following in phabricator enabled HG repos 11/13 12:15 cdelahousse@dev4253 ~/fbsource/fbcode $ hg log -r rFBS27aa00fb74d9a3b82756dad6ff26fe253f1e9a70 --config extensions.fbconduit=~/local/fb-hgext/fbconduit.py changeset: 992495:27aa00fb74d9 user: Peng Li <pengli@fb.com> date: Tue Nov 03 10:29:01 2015 -0800 summary: Add a simple root dir arc library 11/13 12:21 cdelahousse@dev4253 ~/fbjava $ hg log -r rFBA8f1335e6d588 --config extensions.fbconduit=~/local/fb-hgext/fbconduit.py changeset: 18654:8f1335e6d588 user: Ryan Menezes <ryandm@fb.com> date: Thu Oct 22 09:59:27 2015 -0700 summary: move jenkins hook into fbjava/arcanist (fbjava changes) Tried the same on a repo with a git mirror that exists in phabricator: 11/16 11:40 cdelahousse@dev4253 ~/fbsource/fbcode $ hg log -r rFBCODE8272d25d65869ce059024ff38c7051388ad7b802 --config extensions.fbconduit=~/local/fb-hgext/fbconduit.py changeset: 1027287:f26a9c32ae08 user: Oleksandr Kuvshynov <oleksandr@fb.com> date: Sun Nov 15 19:16:39 2015 -0800 summary: [mf] simple cleanup of feed story view If a git hash is too small, abort: $ hg log -r rFBCODE8272d25d65869ce059024f --config extensions.fbconduit=~/local/fb-hgext/fbconduit.py abort: git hash must be 40 characters The previous commands depends on a list of repos set in my hgrc. See (D2660070) [fbconduit] gitcallsigns=LK, CFPUMA, CFSV, CFGK, CFMF, CFGMON, CF, RSIGMA, FA,· WAWEBCLIENT, SKY, FBCODE, FBOBJC, WAWP, SV, OVRMOBILEMAIN, WAANDROID, IGSRV, CPE, MSS, ANDROIDSDK, BUCK, IT-CHEF, WABB, ITINFRA, SIGMA, IOSSDK Reviewers: #sourcecontrol, durham, ericsumner Reviewed By: durham, ericsumner Subscribers: rmcelroy, ericsumner Differential Revision: https://phabricator.fb.com/D2653497 Tasks: 8361368 Signature: t1:2653497:1447480768:295079a7793e182ddea3aeece9cfaead1bfc1a57
2015-11-18 02:22:08 +03:00
return [repo[phabhash].node()]
fbconduit: de-phabricator-ize hg and git hashes Summary: Remove the need to ommit the rREPO prefix when copy pasting from phabricator and looking up a commit. Test Plan: Ran the following in phabricator enabled HG repos 11/13 12:15 cdelahousse@dev4253 ~/fbsource/fbcode $ hg log -r rFBS27aa00fb74d9a3b82756dad6ff26fe253f1e9a70 --config extensions.fbconduit=~/local/fb-hgext/fbconduit.py changeset: 992495:27aa00fb74d9 user: Peng Li <pengli@fb.com> date: Tue Nov 03 10:29:01 2015 -0800 summary: Add a simple root dir arc library 11/13 12:21 cdelahousse@dev4253 ~/fbjava $ hg log -r rFBA8f1335e6d588 --config extensions.fbconduit=~/local/fb-hgext/fbconduit.py changeset: 18654:8f1335e6d588 user: Ryan Menezes <ryandm@fb.com> date: Thu Oct 22 09:59:27 2015 -0700 summary: move jenkins hook into fbjava/arcanist (fbjava changes) Tried the same on a repo with a git mirror that exists in phabricator: 11/16 11:40 cdelahousse@dev4253 ~/fbsource/fbcode $ hg log -r rFBCODE8272d25d65869ce059024ff38c7051388ad7b802 --config extensions.fbconduit=~/local/fb-hgext/fbconduit.py changeset: 1027287:f26a9c32ae08 user: Oleksandr Kuvshynov <oleksandr@fb.com> date: Sun Nov 15 19:16:39 2015 -0800 summary: [mf] simple cleanup of feed story view If a git hash is too small, abort: $ hg log -r rFBCODE8272d25d65869ce059024f --config extensions.fbconduit=~/local/fb-hgext/fbconduit.py abort: git hash must be 40 characters The previous commands depends on a list of repos set in my hgrc. See (D2660070) [fbconduit] gitcallsigns=LK, CFPUMA, CFSV, CFGK, CFMF, CFGMON, CF, RSIGMA, FA,· WAWEBCLIENT, SKY, FBCODE, FBOBJC, WAWP, SV, OVRMOBILEMAIN, WAANDROID, IGSRV, CPE, MSS, ANDROIDSDK, BUCK, IT-CHEF, WABB, ITINFRA, SIGMA, IOSSDK Reviewers: #sourcecontrol, durham, ericsumner Reviewed By: durham, ericsumner Subscribers: rmcelroy, ericsumner Differential Revision: https://phabricator.fb.com/D2653497 Tasks: 8361368 Signature: t1:2653497:1447480768:295079a7793e182ddea3aeece9cfaead1bfc1a57
2015-11-18 02:22:08 +03:00
m = githashre.match(phabrev)
if m is not None:
fbconduit: de-phabricator-ize hg and git hashes Summary: Remove the need to ommit the rREPO prefix when copy pasting from phabricator and looking up a commit. Test Plan: Ran the following in phabricator enabled HG repos 11/13 12:15 cdelahousse@dev4253 ~/fbsource/fbcode $ hg log -r rFBS27aa00fb74d9a3b82756dad6ff26fe253f1e9a70 --config extensions.fbconduit=~/local/fb-hgext/fbconduit.py changeset: 992495:27aa00fb74d9 user: Peng Li <pengli@fb.com> date: Tue Nov 03 10:29:01 2015 -0800 summary: Add a simple root dir arc library 11/13 12:21 cdelahousse@dev4253 ~/fbjava $ hg log -r rFBA8f1335e6d588 --config extensions.fbconduit=~/local/fb-hgext/fbconduit.py changeset: 18654:8f1335e6d588 user: Ryan Menezes <ryandm@fb.com> date: Thu Oct 22 09:59:27 2015 -0700 summary: move jenkins hook into fbjava/arcanist (fbjava changes) Tried the same on a repo with a git mirror that exists in phabricator: 11/16 11:40 cdelahousse@dev4253 ~/fbsource/fbcode $ hg log -r rFBCODE8272d25d65869ce059024ff38c7051388ad7b802 --config extensions.fbconduit=~/local/fb-hgext/fbconduit.py changeset: 1027287:f26a9c32ae08 user: Oleksandr Kuvshynov <oleksandr@fb.com> date: Sun Nov 15 19:16:39 2015 -0800 summary: [mf] simple cleanup of feed story view If a git hash is too small, abort: $ hg log -r rFBCODE8272d25d65869ce059024f --config extensions.fbconduit=~/local/fb-hgext/fbconduit.py abort: git hash must be 40 characters The previous commands depends on a list of repos set in my hgrc. See (D2660070) [fbconduit] gitcallsigns=LK, CFPUMA, CFSV, CFGK, CFMF, CFGMON, CF, RSIGMA, FA,· WAWEBCLIENT, SKY, FBCODE, FBOBJC, WAWP, SV, OVRMOBILEMAIN, WAANDROID, IGSRV, CPE, MSS, ANDROIDSDK, BUCK, IT-CHEF, WABB, ITINFRA, SIGMA, IOSSDK Reviewers: #sourcecontrol, durham, ericsumner Reviewed By: durham, ericsumner Subscribers: rmcelroy, ericsumner Differential Revision: https://phabricator.fb.com/D2653497 Tasks: 8361368 Signature: t1:2653497:1447480768:295079a7793e182ddea3aeece9cfaead1bfc1a57
2015-11-18 02:22:08 +03:00
githash = m.group(1)
if len(githash) == 40:
return gittohg(githash)
fbconduit: de-phabricator-ize hg and git hashes Summary: Remove the need to ommit the rREPO prefix when copy pasting from phabricator and looking up a commit. Test Plan: Ran the following in phabricator enabled HG repos 11/13 12:15 cdelahousse@dev4253 ~/fbsource/fbcode $ hg log -r rFBS27aa00fb74d9a3b82756dad6ff26fe253f1e9a70 --config extensions.fbconduit=~/local/fb-hgext/fbconduit.py changeset: 992495:27aa00fb74d9 user: Peng Li <pengli@fb.com> date: Tue Nov 03 10:29:01 2015 -0800 summary: Add a simple root dir arc library 11/13 12:21 cdelahousse@dev4253 ~/fbjava $ hg log -r rFBA8f1335e6d588 --config extensions.fbconduit=~/local/fb-hgext/fbconduit.py changeset: 18654:8f1335e6d588 user: Ryan Menezes <ryandm@fb.com> date: Thu Oct 22 09:59:27 2015 -0700 summary: move jenkins hook into fbjava/arcanist (fbjava changes) Tried the same on a repo with a git mirror that exists in phabricator: 11/16 11:40 cdelahousse@dev4253 ~/fbsource/fbcode $ hg log -r rFBCODE8272d25d65869ce059024ff38c7051388ad7b802 --config extensions.fbconduit=~/local/fb-hgext/fbconduit.py changeset: 1027287:f26a9c32ae08 user: Oleksandr Kuvshynov <oleksandr@fb.com> date: Sun Nov 15 19:16:39 2015 -0800 summary: [mf] simple cleanup of feed story view If a git hash is too small, abort: $ hg log -r rFBCODE8272d25d65869ce059024f --config extensions.fbconduit=~/local/fb-hgext/fbconduit.py abort: git hash must be 40 characters The previous commands depends on a list of repos set in my hgrc. See (D2660070) [fbconduit] gitcallsigns=LK, CFPUMA, CFSV, CFGK, CFMF, CFGMON, CF, RSIGMA, FA,· WAWEBCLIENT, SKY, FBCODE, FBOBJC, WAWP, SV, OVRMOBILEMAIN, WAANDROID, IGSRV, CPE, MSS, ANDROIDSDK, BUCK, IT-CHEF, WABB, ITINFRA, SIGMA, IOSSDK Reviewers: #sourcecontrol, durham, ericsumner Reviewed By: durham, ericsumner Subscribers: rmcelroy, ericsumner Differential Revision: https://phabricator.fb.com/D2653497 Tasks: 8361368 Signature: t1:2653497:1447480768:295079a7793e182ddea3aeece9cfaead1bfc1a57
2015-11-18 02:22:08 +03:00
else:
return []