Try to preserve git commit id with setup.py/freeze.py

This commit is contained in:
Florian Bruhin 2014-05-15 07:13:49 +02:00
parent 1922f51e21
commit 765e20f881
4 changed files with 114 additions and 24 deletions

View File

@ -27,6 +27,7 @@ from PyQt5.QtCore import QT_VERSION_STR, PYQT_VERSION_STR, qVersion
from PyQt5.QtWebKit import qWebKitVersion
import qutebrowser
from qutebrowser.utils.misc import read_file
def _git_str():
@ -36,13 +37,34 @@ def _git_str():
string containing the git commit ID.
None if there was an error or we're not in a git repo.
"""
if hasattr(sys, "frozen"):
return None
# First try via subprocess if possible
commit = None
if not hasattr(sys, "frozen"):
try:
gitpath = os.path.join(os.path.dirname(os.path.realpath(__file__)),
os.path.pardir, os.path.pardir)
except NameError:
pass
else:
commit = _git_str_subprocess(gitpath)
if commit is not None:
return commit
# If that fails, check the git-commit-id file.
try:
gitpath = os.path.join(os.path.dirname(os.path.realpath(__file__)),
os.path.pardir, os.path.pardir)
except NameError:
return read_file('git-commit-id')
except (FileNotFoundError, ImportError):
return None
def _git_str_subprocess(gitpath):
"""Try to get the git commit ID by calling git.
Args:
gitpath: The path where the .git folder is.
Return:
The path on success, None on failure.
"""
if not os.path.isdir(os.path.join(gitpath, ".git")):
return None
try:

View File

@ -23,13 +23,21 @@ Builds a standalone executable.
import os
import os.path
import sys
import platform
from cx_Freeze import setup, Executable
sys.path.insert(0, os.getcwd())
from scripts.setupcommon import setupdata
from scripts.setupcommon import setupdata, write_git_file
try:
BASEDIR = os.path.join(os.path.dirname(os.path.realpath(__file__)),
os.path.pardir)
except NameError:
BASEDIR = None
def get_egl_path():
@ -47,6 +55,7 @@ def get_egl_path():
build_exe_options = {
'include_files': [
('qutebrowser/html', 'html'),
('qutebrowser/git-commit-id', 'git-commit-id'),
],
'include_msvcr': True,
}
@ -68,11 +77,18 @@ executable = Executable('qutebrowser/__main__.py', base=base,
shortcutName='qutebrowser',
shortcutDir='ProgramMenuFolder')
setup(
executables = [executable],
options = {
'build_exe': build_exe_options,
'bdist_msi': bdist_msi_options,
},
**setupdata
)
try:
write_git_file()
setup(
executables = [executable],
options = {
'build_exe': build_exe_options,
'bdist_msi': bdist_msi_options,
},
**setupdata
)
finally:
if BASEDIR is not None:
path = os.path.join(BASEDIR, 'qutebrowser', 'git-commit-id')
if os.path.exists(path):
os.remove(path)

View File

@ -20,15 +20,51 @@
import sys
import os
import os.path
import subprocess
sys.path.insert(0, os.getcwd())
import qutebrowser
try:
BASEDIR = os.path.join(os.path.dirname(os.path.realpath(__file__)),
os.path.pardir)
except NameError:
BASEDIR = None
def read_file(name):
with open(name, encoding='utf-8') as f:
return f.read()
def _git_str():
"""Try to find out git version.
Return:
string containing the git commit ID.
None if there was an error or we're not in a git repo.
"""
if BASEDIR is None:
return None
if not os.path.isdir(os.path.join(BASEDIR, ".git")):
return None
try:
return subprocess.check_output(
['git', 'describe', '--tags', '--dirty', '--always'],
cwd=BASEDIR).decode('UTF-8').strip()
except (subprocess.CalledProcessError, FileNotFoundError):
return None
def write_git_file():
gitstr = _git_str()
if gitstr is None:
gitstr = ''
with open(os.path.join(BASEDIR, 'qutebrowser', 'git-commit-id'), 'w') as f:
f.write(gitstr)
setupdata = {
'name': 'qutebrowser',
'version': qutebrowser.__version__,

View File

@ -18,20 +18,36 @@
"""setuptools installer script for qutebrowser"""
import os
import os.path
from scripts.setupcommon import setupdata
from scripts.setupcommon import setupdata, write_git_file
from scripts.ez_setup import use_setuptools
use_setuptools()
from setuptools import setup, find_packages
setup(
packages=find_packages(exclude=['qutebrowser.test']),
include_package_data=True,
package_data={'qutebrowser': ['html/*']},
entry_points={'gui_scripts': ['qutebrowser = qutebrowser.__main__:main']},
test_suite='qutebrowser.test',
zip_safe=True,
**setupdata
)
try:
BASEDIR = os.path.dirname(os.path.realpath(__file__))
except NameError:
BASEDIR = None
try:
write_git_file()
setup(
packages=find_packages(exclude=['qutebrowser.test']),
include_package_data=True,
package_data={'qutebrowser': ['html/*', 'git-commit-id']},
entry_points={'gui_scripts':
['qutebrowser = qutebrowser.__main__:main']},
test_suite='qutebrowser.test',
zip_safe=True,
**setupdata
)
finally:
if BASEDIR is not None:
path = os.path.join(BASEDIR, 'qutebrowser', 'git-commit-id')
if os.path.exists(path):
os.remove(path)