summaryrefslogtreecommitdiffstatshomepage
path: root/py/makeversionhdr.py
diff options
context:
space:
mode:
Diffstat (limited to 'py/makeversionhdr.py')
-rw-r--r--py/makeversionhdr.py41
1 files changed, 32 insertions, 9 deletions
diff --git a/py/makeversionhdr.py b/py/makeversionhdr.py
index d1b41e63b0..5766330989 100644
--- a/py/makeversionhdr.py
+++ b/py/makeversionhdr.py
@@ -6,13 +6,14 @@ This script works with Python 2.6, 2.7, 3.3 and 3.4.
from __future__ import print_function
+import argparse
import sys
import os
import datetime
import subprocess
-def get_version_info_from_git():
+def get_version_info_from_git(repo_path):
# Python 2.6 doesn't have check_output, so check for that
try:
subprocess.check_output
@@ -24,6 +25,7 @@ def get_version_info_from_git():
try:
git_tag = subprocess.check_output(
["git", "describe", "--tags", "--dirty", "--always", "--match", "v[1-9].*"],
+ cwd=repo_path,
stderr=subprocess.STDOUT,
universal_newlines=True,
).strip()
@@ -37,6 +39,7 @@ def get_version_info_from_git():
try:
git_hash = subprocess.check_output(
["git", "rev-parse", "--short", "HEAD"],
+ cwd=repo_path,
stderr=subprocess.STDOUT,
universal_newlines=True,
).strip()
@@ -48,11 +51,15 @@ def get_version_info_from_git():
try:
# Check if there are any modified files.
subprocess.check_call(
- ["git", "diff", "--no-ext-diff", "--quiet", "--exit-code"], stderr=subprocess.STDOUT
+ ["git", "diff", "--no-ext-diff", "--quiet", "--exit-code"],
+ cwd=repo_path,
+ stderr=subprocess.STDOUT,
)
# Check if there are any staged files.
subprocess.check_call(
- ["git", "diff-index", "--cached", "--quiet", "HEAD", "--"], stderr=subprocess.STDOUT
+ ["git", "diff-index", "--cached", "--quiet", "HEAD", "--"],
+ cwd=repo_path,
+ stderr=subprocess.STDOUT,
)
except subprocess.CalledProcessError:
git_hash += "-dirty"
@@ -62,8 +69,8 @@ def get_version_info_from_git():
return git_tag, git_hash
-def get_version_info_from_mpconfig():
- with open(os.path.join(os.path.dirname(sys.argv[0]), "..", "py", "mpconfig.h")) as f:
+def get_version_info_from_mpconfig(repo_path):
+ with open(os.path.join(repo_path, "py", "mpconfig.h")) as f:
for line in f:
if line.startswith("#define MICROPY_VERSION_MAJOR "):
ver_major = int(line.strip().split()[2])
@@ -78,11 +85,11 @@ def get_version_info_from_mpconfig():
return None
-def make_version_header(filename):
+def make_version_header(repo_path, filename):
# Get version info using git, with fallback to py/mpconfig.h
- info = get_version_info_from_git()
+ info = get_version_info_from_git(repo_path)
if info is None:
- info = get_version_info_from_mpconfig()
+ info = get_version_info_from_mpconfig(repo_path)
git_tag, git_hash = info
@@ -119,5 +126,21 @@ def make_version_header(filename):
f.write(file_data)
+def main():
+ parser = argparse.ArgumentParser()
+ # makeversionheader.py lives in repo/py, so default repo_path to the
+ # parent of sys.argv[0]'s directory.
+ parser.add_argument(
+ "-r",
+ "--repo-path",
+ default=os.path.join(os.path.dirname(sys.argv[0]), ".."),
+ help="path to MicroPython Git repo to query for version",
+ )
+ parser.add_argument("dest", nargs=1, help="output file path")
+ args = parser.parse_args()
+
+ make_version_header(args.repo_path, args.dest[0])
+
+
if __name__ == "__main__":
- make_version_header(sys.argv[1])
+ main()