mirror of
https://github.com/Grasscutters/mitmproxy.git
synced 2024-11-29 11:03:13 +00:00
single-source version processing
This commit is contained in:
parent
937a849c93
commit
9dc3d16bf2
@ -1,42 +1,23 @@
|
|||||||
import gc
|
import gc
|
||||||
import os
|
import os
|
||||||
|
import platform
|
||||||
|
import re
|
||||||
|
import signal
|
||||||
import sys
|
import sys
|
||||||
import threading
|
import threading
|
||||||
import signal
|
|
||||||
import platform
|
|
||||||
import traceback
|
import traceback
|
||||||
import subprocess
|
|
||||||
|
|
||||||
from mitmproxy import version
|
|
||||||
|
|
||||||
from OpenSSL import SSL
|
from OpenSSL import SSL
|
||||||
|
|
||||||
|
from mitmproxy import version
|
||||||
|
|
||||||
|
|
||||||
def dump_system_info():
|
def dump_system_info():
|
||||||
mitmproxy_version = version.VERSION
|
mitmproxy_version = version.get_version(True, True)
|
||||||
here = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
|
mitmproxy_version = re.sub(
|
||||||
try:
|
r"-0x([0-9a-f]+)",
|
||||||
git_describe = subprocess.check_output(
|
r" (commit \1)",
|
||||||
['git', 'describe', '--tags', '--long'],
|
mitmproxy_version
|
||||||
stderr=subprocess.STDOUT,
|
|
||||||
cwd=here,
|
|
||||||
)
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
else:
|
|
||||||
last_tag, tag_dist, commit = git_describe.decode().strip().rsplit("-", 2)
|
|
||||||
|
|
||||||
commit = commit.lstrip("g") # remove the 'g' prefix added by recent git versions
|
|
||||||
tag_dist = int(tag_dist)
|
|
||||||
|
|
||||||
if tag_dist > 0:
|
|
||||||
tag_dist = "dev{:04}".format(tag_dist)
|
|
||||||
else:
|
|
||||||
tag_dist = ""
|
|
||||||
|
|
||||||
mitmproxy_version += "{tag_dist} ({commit})".format(
|
|
||||||
tag_dist=tag_dist,
|
|
||||||
commit=commit,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
# PyInstaller builds indicator, if using precompiled binary
|
# PyInstaller builds indicator, if using precompiled binary
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
import os
|
||||||
|
import subprocess
|
||||||
|
|
||||||
|
# The actual version string. For precompiled binaries, this will be changed to include the build
|
||||||
|
# tag, e.g. "3.0.0.dev0042-0xcafeabc"
|
||||||
VERSION = "3.0.0"
|
VERSION = "3.0.0"
|
||||||
PATHOD = "pathod " + VERSION
|
PATHOD = "pathod " + VERSION
|
||||||
MITMPROXY = "mitmproxy " + VERSION
|
MITMPROXY = "mitmproxy " + VERSION
|
||||||
@ -6,5 +11,54 @@ MITMPROXY = "mitmproxy " + VERSION
|
|||||||
# for each change in the file format.
|
# for each change in the file format.
|
||||||
FLOW_FORMAT_VERSION = 5
|
FLOW_FORMAT_VERSION = 5
|
||||||
|
|
||||||
|
|
||||||
|
def get_version(dev: bool = False, build: bool = False, refresh: bool = False) -> str:
|
||||||
|
"""
|
||||||
|
Return a detailed version string, sourced either from a hardcoded VERSION constant
|
||||||
|
or obtained dynamically using git.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
dev: If True, non-tagged releases will include a ".devXXXX" suffix, where XXXX is the number
|
||||||
|
of commits since the last tagged release.
|
||||||
|
build: If True, non-tagged releases will include a "-0xXXXXXXX" suffix, where XXXXXXX are
|
||||||
|
the first seven digits of the commit hash.
|
||||||
|
refresh: If True, always try to use git instead of a potentially hardcoded constant.
|
||||||
|
"""
|
||||||
|
|
||||||
|
mitmproxy_version = VERSION
|
||||||
|
|
||||||
|
if "dev" in VERSION and not refresh:
|
||||||
|
pass # There is a hardcoded build tag, so we just use what's there.
|
||||||
|
elif dev or build:
|
||||||
|
here = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
|
||||||
|
try:
|
||||||
|
git_describe = subprocess.check_output(
|
||||||
|
['git', 'describe', '--tags', '--long'],
|
||||||
|
stderr=subprocess.STDOUT,
|
||||||
|
cwd=here,
|
||||||
|
)
|
||||||
|
last_tag, tag_dist, commit = git_describe.decode().strip().rsplit("-", 2)
|
||||||
|
commit = commit.lstrip("g")[:7]
|
||||||
|
tag_dist = int(tag_dist)
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
# Remove current suffix
|
||||||
|
mitmproxy_version = mitmproxy_version.split(".dev")[0]
|
||||||
|
|
||||||
|
# Add suffix for non-tagged releases
|
||||||
|
if tag_dist > 0:
|
||||||
|
mitmproxy_version += ".dev{tag_dist:04}".format(tag_dist=tag_dist)
|
||||||
|
# The wheel build tag (we use the commit) must start with a digit, so we include "0x"
|
||||||
|
mitmproxy_version += "-0x{commit}".format(commit=commit)
|
||||||
|
|
||||||
|
if not dev:
|
||||||
|
mitmproxy_version = mitmproxy_version.split(".dev")[0]
|
||||||
|
elif not build:
|
||||||
|
mitmproxy_version = mitmproxy_version.split("-0x")[0]
|
||||||
|
|
||||||
|
return mitmproxy_version
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
print(VERSION)
|
print(VERSION)
|
||||||
|
@ -81,35 +81,18 @@ def git(args: str) -> str:
|
|||||||
|
|
||||||
|
|
||||||
def get_version(dev: bool = False, build: bool = False) -> str:
|
def get_version(dev: bool = False, build: bool = False) -> str:
|
||||||
version = runpy.run_path(VERSION_FILE)["VERSION"]
|
x = runpy.run_path(VERSION_FILE)
|
||||||
version = re.sub(r"\.dev.+?$", "", version) # replace dev suffix if present.
|
return x["get_version"](dev, build, True)
|
||||||
|
|
||||||
last_tag, tag_dist, commit = git("describe --tags --long").strip().rsplit("-", 2)
|
|
||||||
commit = commit.lstrip("g")[:7]
|
|
||||||
tag_dist = int(tag_dist)
|
|
||||||
|
|
||||||
if tag_dist > 0 and dev:
|
|
||||||
dev_tag = ".dev{tag_dist:04}".format(tag_dist=tag_dist)
|
|
||||||
else:
|
|
||||||
dev_tag = ""
|
|
||||||
|
|
||||||
if tag_dist > 0 and build:
|
|
||||||
# The wheel build tag (we use the commit) must start with a digit, so we include "0x"
|
|
||||||
build_tag = "-0x{commit}".format(commit=commit)
|
|
||||||
else:
|
|
||||||
build_tag = ""
|
|
||||||
|
|
||||||
return version + dev_tag + build_tag
|
|
||||||
|
|
||||||
|
|
||||||
def set_version(dev: bool) -> None:
|
def set_version(dev: bool) -> None:
|
||||||
"""
|
"""
|
||||||
Update version information in mitmproxy's version.py to either include the dev version or not.
|
Update version information in mitmproxy's version.py to either include hardcoded information or not.
|
||||||
"""
|
"""
|
||||||
v = get_version(dev)
|
version = get_version(dev, dev)
|
||||||
with open(VERSION_FILE) as f:
|
with open(VERSION_FILE, "r") as f:
|
||||||
content = f.read()
|
content = f.read()
|
||||||
content = re.sub(r'^VERSION = ".+?"', 'VERSION = "{}"'.format(v), content)
|
content = re.sub(r'^VERSION = ".+?"', 'VERSION = "{}"'.format(version), content, flags=re.M)
|
||||||
with open(VERSION_FILE, "w") as f:
|
with open(VERSION_FILE, "w") as f:
|
||||||
f.write(content)
|
f.write(content)
|
||||||
|
|
||||||
|
2
setup.py
2
setup.py
@ -12,7 +12,7 @@ here = os.path.abspath(os.path.dirname(__file__))
|
|||||||
with open(os.path.join(here, 'README.rst'), encoding='utf-8') as f:
|
with open(os.path.join(here, 'README.rst'), encoding='utf-8') as f:
|
||||||
long_description = f.read()
|
long_description = f.read()
|
||||||
|
|
||||||
VERSION = runpy.run_path(os.path.join(here, "mitmproxy", "version.py"))["VERSION"]
|
VERSION = runpy.run_path(os.path.join(here, "mitmproxy", "version.py"))["VERSION"].split("-0x")[0]
|
||||||
|
|
||||||
setup(
|
setup(
|
||||||
name="mitmproxy",
|
name="mitmproxy",
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
import runpy
|
import runpy
|
||||||
|
import subprocess
|
||||||
|
from unittest import mock
|
||||||
|
|
||||||
from mitmproxy import version
|
from mitmproxy import version
|
||||||
|
|
||||||
@ -8,3 +10,24 @@ def test_version(capsys):
|
|||||||
stdout, stderr = capsys.readouterr()
|
stdout, stderr = capsys.readouterr()
|
||||||
assert len(stdout) > 0
|
assert len(stdout) > 0
|
||||||
assert stdout.strip() == version.VERSION
|
assert stdout.strip() == version.VERSION
|
||||||
|
|
||||||
|
|
||||||
|
def test_get_version_hardcoded():
|
||||||
|
version.VERSION = "3.0.0.dev123-0xcafebabe"
|
||||||
|
assert version.get_version() == "3.0.0"
|
||||||
|
assert version.get_version(True) == "3.0.0.dev123"
|
||||||
|
assert version.get_version(True, True) == "3.0.0.dev123-0xcafebabe"
|
||||||
|
|
||||||
|
|
||||||
|
def test_get_version():
|
||||||
|
version.VERSION = "3.0.0"
|
||||||
|
|
||||||
|
with mock.patch('subprocess.check_output') as m:
|
||||||
|
m.return_value = b"tag-0-cafecafe"
|
||||||
|
assert version.get_version(True, True) == "3.0.0"
|
||||||
|
|
||||||
|
m.return_value = b"tag-2-cafecafe"
|
||||||
|
assert version.get_version(True, True) == "3.0.0.dev0002-0xcafecaf"
|
||||||
|
|
||||||
|
m.side_effect = subprocess.CalledProcessError(-1, 'git describe --tags --long')
|
||||||
|
assert version.get_version(True, True) == "3.0.0"
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
import io
|
import io
|
||||||
import subprocess
|
|
||||||
import sys
|
import sys
|
||||||
from unittest import mock
|
from unittest import mock
|
||||||
import pytest
|
import pytest
|
||||||
@ -14,18 +13,6 @@ def test_dump_system_info_precompiled(precompiled):
|
|||||||
assert ("binary" in debug.dump_system_info()) == precompiled
|
assert ("binary" in debug.dump_system_info()) == precompiled
|
||||||
|
|
||||||
|
|
||||||
def test_dump_system_info_version():
|
|
||||||
with mock.patch('subprocess.check_output') as m:
|
|
||||||
m.return_value = b"v2.0.0-0-cafecafe"
|
|
||||||
x = debug.dump_system_info()
|
|
||||||
assert 'dev' not in x
|
|
||||||
assert 'cafecafe' in x
|
|
||||||
|
|
||||||
with mock.patch('subprocess.check_output') as m:
|
|
||||||
m.side_effect = subprocess.CalledProcessError(-1, 'git describe --tags --long')
|
|
||||||
assert 'dev' not in debug.dump_system_info()
|
|
||||||
|
|
||||||
|
|
||||||
def test_dump_info():
|
def test_dump_info():
|
||||||
cs = io.StringIO()
|
cs = io.StringIO()
|
||||||
debug.dump_info(None, None, file=cs, testing=True)
|
debug.dump_info(None, None, file=cs, testing=True)
|
||||||
|
Loading…
Reference in New Issue
Block a user