2016-03-22 20:45:57 +03:00
|
|
|
# arcdiff.py - extension adding an option to the diff command to show changes
|
|
|
|
# since the last arcanist diff
|
|
|
|
#
|
|
|
|
# Copyright 2016 Facebook, Inc.
|
|
|
|
#
|
|
|
|
# This software may be used and distributed according to the terms of the
|
|
|
|
# GNU General Public License version 2 or any later version.
|
|
|
|
|
2017-01-20 11:24:45 +03:00
|
|
|
import os
|
|
|
|
|
2019-01-30 03:25:33 +03:00
|
|
|
from edenscm.mercurial import (
|
2018-07-17 03:43:12 +03:00
|
|
|
commands,
|
|
|
|
error,
|
|
|
|
extensions,
|
|
|
|
hintutil,
|
|
|
|
mdiff,
|
|
|
|
patch,
|
|
|
|
registrar,
|
2018-08-15 05:11:37 +03:00
|
|
|
revset,
|
2018-07-19 03:04:40 +03:00
|
|
|
scmutil,
|
2018-08-15 05:11:37 +03:00
|
|
|
smartset,
|
2018-07-17 03:43:12 +03:00
|
|
|
)
|
2019-01-30 03:25:33 +03:00
|
|
|
from edenscm.mercurial.i18n import _
|
|
|
|
from edenscm.mercurial.node import hex
|
2016-03-22 20:45:57 +03:00
|
|
|
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
from .extlib.phabricator import arcconfig, diffprops, graphql
|
|
|
|
|
2016-04-27 19:27:56 +03:00
|
|
|
|
2018-07-17 03:43:10 +03:00
|
|
|
hint = registrar.hint()
|
2018-08-15 05:11:37 +03:00
|
|
|
revsetpredicate = registrar.revsetpredicate()
|
2018-07-17 03:43:10 +03:00
|
|
|
|
|
|
|
|
|
|
|
@hint("since-last-arc-diff")
|
|
|
|
def sincelastarcdiff():
|
|
|
|
return _("--since-last-arc-diff is deprecated, use --since-last-submit")
|
|
|
|
|
|
|
|
|
2016-03-22 20:45:57 +03:00
|
|
|
def extsetup(ui):
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
entry = extensions.wrapcommand(commands.table, "diff", _diff)
|
2016-03-22 20:45:57 +03:00
|
|
|
options = entry[1]
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
options.append(
|
2018-07-17 03:43:10 +03:00
|
|
|
("", "since-last-arc-diff", None, _("Deprecated alias for --since-last-submit"))
|
|
|
|
)
|
|
|
|
options.append(
|
|
|
|
("", "since-last-submit", None, _("show changes since last Phabricator submit"))
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
)
|
2018-07-17 03:43:12 +03:00
|
|
|
options.append(
|
|
|
|
(
|
|
|
|
"",
|
|
|
|
"since-last-submit-2o",
|
|
|
|
None,
|
|
|
|
_("show diff of current diff and last Phabricator submit"),
|
|
|
|
)
|
|
|
|
)
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
|
2016-03-22 20:45:57 +03:00
|
|
|
|
2016-05-12 23:11:08 +03:00
|
|
|
def _differentialhash(ui, repo, phabrev):
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
timeout = repo.ui.configint("ssl", "timeout", 5)
|
|
|
|
ca_certs = repo.ui.configpath("web", "cacerts")
|
2016-03-22 20:45:57 +03:00
|
|
|
try:
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
client = graphql.Client(repodir=repo.root, ca_bundle=ca_certs, repo=repo)
|
2017-12-14 21:28:30 +03:00
|
|
|
info = client.getrevisioninfo(timeout, [phabrev]).get(str(phabrev))
|
|
|
|
if not info:
|
2016-05-12 23:11:08 +03:00
|
|
|
return None
|
2017-12-14 21:28:30 +03:00
|
|
|
return info
|
2016-05-12 23:11:08 +03:00
|
|
|
|
2017-12-14 21:28:30 +03:00
|
|
|
except graphql.ClientError as e:
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
ui.warn(_("Error calling graphql: %s\n") % str(e))
|
2016-03-22 20:45:57 +03:00
|
|
|
return None
|
2016-04-27 19:27:56 +03:00
|
|
|
except arcconfig.ArcConfigError as e:
|
|
|
|
raise error.Abort(str(e))
|
2016-03-22 20:45:57 +03:00
|
|
|
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
|
2018-07-17 03:43:12 +03:00
|
|
|
def _diff2o(ui, repo, rev1, rev2, *pats, **opts):
|
|
|
|
# Phabricator revs are often filtered (hidden)
|
|
|
|
repo = repo.unfiltered()
|
|
|
|
# First reconstruct textual diffs for rev1 and rev2 independently.
|
2018-07-19 03:04:40 +03:00
|
|
|
def changediff(node):
|
|
|
|
nodebase = repo[node].p1().node()
|
|
|
|
m = scmutil.matchall(repo)
|
2018-07-17 03:43:12 +03:00
|
|
|
diff = patch.diffhunks(repo, nodebase, node, m, opts=mdiff.diffopts(context=0))
|
|
|
|
filepatches = {}
|
|
|
|
for _fctx1, _fctx2, headerlines, hunks in diff:
|
|
|
|
difflines = []
|
|
|
|
for hunkrange, hunklines in hunks:
|
|
|
|
difflines += list(hunklines)
|
|
|
|
header = patch.header(headerlines)
|
|
|
|
filepatches[header.files()[0]] = "".join(difflines)
|
|
|
|
return (set(filepatches.keys()), filepatches, node)
|
|
|
|
|
|
|
|
rev1node = repo[rev1].node()
|
|
|
|
rev2node = repo[rev2].node()
|
2018-07-19 03:04:40 +03:00
|
|
|
files1, filepatches1, node1 = changediff(rev1node)
|
|
|
|
files2, filepatches2, node2 = changediff(rev2node)
|
2018-07-17 03:43:12 +03:00
|
|
|
|
|
|
|
ui.write(_("Phabricator rev: %s\n") % hex(node1)),
|
|
|
|
ui.write(_("Local rev: %s (%s)\n") % (hex(node2), rev2))
|
|
|
|
|
|
|
|
# For files have changed, produce a diff of the diffs first using a normal
|
|
|
|
# text diff of the input diffs, then fixing-up the output for readability.
|
|
|
|
changedfiles = files1 & files2
|
|
|
|
for f in changedfiles:
|
|
|
|
opts["context"] = 0
|
|
|
|
diffopts = mdiff.diffopts(**opts)
|
|
|
|
header, hunks = mdiff.unidiff(
|
|
|
|
filepatches1[f], "", filepatches2[f], "", f, f, opts=diffopts
|
|
|
|
)
|
|
|
|
hunklines = []
|
|
|
|
for hunk in hunks:
|
|
|
|
hunklines += hunk[1]
|
|
|
|
changelines = []
|
|
|
|
i = 0
|
|
|
|
while i < len(hunklines):
|
|
|
|
line = hunklines[i]
|
|
|
|
i += 1
|
|
|
|
if line[:2] == "++":
|
|
|
|
changelines.append("+" + line[2:])
|
|
|
|
elif line[:2] == "+-":
|
|
|
|
changelines.append("-" + line[2:])
|
|
|
|
elif line[:2] == "-+":
|
|
|
|
changelines.append("-" + line[2:])
|
|
|
|
elif line[:2] == "--":
|
|
|
|
changelines.append("+" + line[2:])
|
|
|
|
elif line[:2] == "@@" or line[1:3] == "@@":
|
|
|
|
if len(changelines) < 1 or changelines[-1] != "...\n":
|
|
|
|
changelines.append("...\n")
|
|
|
|
else:
|
|
|
|
changelines.append(line)
|
|
|
|
if len(changelines):
|
|
|
|
ui.write(_("Changed: %s\n") % f)
|
|
|
|
for line in changelines:
|
|
|
|
ui.write("| " + line)
|
|
|
|
wholefilechanges = files1 ^ files2
|
|
|
|
for f in wholefilechanges:
|
|
|
|
ui.write(_("Added/removed: %s\n") % f)
|
|
|
|
|
|
|
|
|
2018-08-24 15:44:19 +03:00
|
|
|
def _maybepull(repo, hexrev):
|
|
|
|
if extensions.enabled().get("commitcloud", False):
|
|
|
|
repo.revs("cloudremote(%s)" % hexrev)
|
|
|
|
|
|
|
|
|
2016-03-22 20:45:57 +03:00
|
|
|
def _diff(orig, ui, repo, *pats, **opts):
|
2018-07-17 03:43:12 +03:00
|
|
|
if (
|
|
|
|
not opts.get("since_last_submit")
|
|
|
|
and not opts.get("since_last_arc_diff")
|
|
|
|
and not opts.get("since_last_submit_2o")
|
|
|
|
):
|
2016-03-22 20:45:57 +03:00
|
|
|
return orig(ui, repo, *pats, **opts)
|
|
|
|
|
2018-07-17 03:43:10 +03:00
|
|
|
if opts.get("since_last_arc_diff"):
|
|
|
|
hintutil.trigger("since-last-arc-diff")
|
|
|
|
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
if len(opts["rev"]) > 1:
|
|
|
|
mess = _("cannot specify --since-last-arc-diff with multiple revisions")
|
2018-02-23 20:36:39 +03:00
|
|
|
raise error.Abort(mess)
|
|
|
|
try:
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
targetrev = opts["rev"][0]
|
2018-02-23 20:36:39 +03:00
|
|
|
except IndexError:
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
targetrev = "."
|
2018-02-23 20:36:39 +03:00
|
|
|
ctx = repo[targetrev]
|
2016-04-27 19:50:13 +03:00
|
|
|
phabrev = diffprops.parserevfromcommitmsg(ctx.description())
|
2016-03-22 20:45:57 +03:00
|
|
|
|
2016-04-27 19:50:13 +03:00
|
|
|
if phabrev is None:
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
mess = _("local changeset is not associated with a differential " "revision")
|
2016-03-22 20:45:57 +03:00
|
|
|
raise error.Abort(mess)
|
|
|
|
|
2016-05-12 23:11:08 +03:00
|
|
|
rev = _differentialhash(ui, repo, phabrev)
|
2017-12-14 21:28:30 +03:00
|
|
|
|
|
|
|
if rev is None or not isinstance(rev, dict) or "hash" not in rev:
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
mess = _("unable to determine previous changeset hash")
|
2016-03-22 20:45:57 +03:00
|
|
|
raise error.Abort(mess)
|
|
|
|
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
rev = str(rev["hash"])
|
2018-08-24 15:44:19 +03:00
|
|
|
_maybepull(repo, rev)
|
codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).
Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.
Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.
An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.
As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.
Reviewed By: wez, phillco, simpkins, pkaush, singhsrb
Differential Revision: D8173629
fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-26 07:34:37 +03:00
|
|
|
opts["rev"] = [rev, targetrev]
|
2016-03-22 20:45:57 +03:00
|
|
|
|
|
|
|
# if patterns aren't provided, restrict diff to files in both changesets
|
|
|
|
# this prevents performing a diff on rebased changes
|
|
|
|
if len(pats) == 0:
|
|
|
|
prev = set(repo.unfiltered()[rev].files())
|
2018-02-23 20:36:39 +03:00
|
|
|
curr = set(repo[targetrev].files())
|
2017-01-20 11:24:45 +03:00
|
|
|
pats = tuple(os.path.join(repo.root, p) for p in prev | curr)
|
2016-03-22 20:45:57 +03:00
|
|
|
|
2018-07-17 03:43:12 +03:00
|
|
|
if opts.get("since_last_submit_2o"):
|
2018-10-05 05:01:26 +03:00
|
|
|
return _diff2o(ui, repo, rev, targetrev, **opts)
|
2018-07-17 03:43:12 +03:00
|
|
|
else:
|
2018-08-24 15:44:19 +03:00
|
|
|
return orig(ui, repo.unfiltered(), *pats, **opts)
|
2018-08-15 05:11:37 +03:00
|
|
|
|
|
|
|
|
|
|
|
@revsetpredicate("lastsubmitted(set)")
|
|
|
|
def lastsubmitted(repo, subset, x):
|
|
|
|
revs = revset.getset(repo, revset.fullreposet(repo), x)
|
|
|
|
phabrevs = set()
|
|
|
|
for rev in revs:
|
|
|
|
phabrev = diffprops.parserevfromcommitmsg(repo[rev].description())
|
|
|
|
if phabrev is None:
|
|
|
|
mess = _("local changeset is not associated with a differential revision")
|
|
|
|
raise error.Abort(mess)
|
|
|
|
phabrevs.add(phabrev)
|
|
|
|
|
|
|
|
resultrevs = set()
|
|
|
|
for phabrev in phabrevs:
|
|
|
|
diffrev = _differentialhash(repo.ui, repo, phabrev)
|
|
|
|
if diffrev is None or not isinstance(diffrev, dict) or "hash" not in diffrev:
|
|
|
|
mess = _("unable to determine previous changeset hash")
|
|
|
|
raise error.Abort(mess)
|
|
|
|
|
|
|
|
lasthash = str(diffrev["hash"])
|
2018-08-24 15:44:19 +03:00
|
|
|
_maybepull(repo, lasthash)
|
2018-08-15 05:11:37 +03:00
|
|
|
resultrevs.add(repo.unfiltered()[lasthash])
|
|
|
|
|
|
|
|
return subset & smartset.baseset(sorted(resultrevs))
|