53 is_git_repo =
run_git(source_dir,
"status")
is not None
62 source_available =
True
63 git_describe =
run_git(source_dir,
"--no-pager",
"describe",
"--tags",
"--always",
"--dirty")
or ""
64 git_commit =
run_git(source_dir,
"rev-parse",
"HEAD")
or ""
65 git_short_hash =
run_git(source_dir,
"rev-parse",
"--short",
"HEAD")
or ""
66 git_status =
run_git(source_dir,
"status",
"--porcelain")
or ""
67 git_dirty = bool(git_status)
68 git_tag =
run_git(source_dir,
"--no-pager",
"describe",
"--tags",
"--abbrev=0")
or ""
72 commits_since_tag_text =
run_git(source_dir,
"rev-list",
"--count", f
"{git_tag}..HEAD")
73 commits_since_tag = int(commits_since_tag_text
or 0)
75 major, minor, patch = 0, 0, 0
80 "package_name": package_name,
81 "version": f
"{major}.{minor}.{patch}",
82 "version_major": major,
83 "version_minor": minor,
84 "version_patch": patch,
86 "git_describe": git_describe,
87 "git_commit": git_commit,
88 "git_short_hash": git_short_hash,
89 "git_dirty": git_dirty,
90 "commits_since_tag": commits_since_tag,
91 "source_available": source_available,
152 path.parent.mkdir(parents=
True, exist_ok=
True)
154 f
"""#include "{include}"
157std::string getPackageName() {{
158return {cpp_string(metadata["package_name"])};
161std::string getVersion() {{
162return {cpp_string(metadata["version"])};
165unsigned int getVersionMajor() {{ return {metadata["version_major"]}; }}
166unsigned int getVersionMinor() {{ return {metadata["version_minor"]}; }}
167unsigned int getVersionPatch() {{ return {metadata["version_patch"]}; }}
169std::string getGitTag() {{ return {cpp_string(metadata["git_tag"])}; }}
170std::string getGitDescribe() {{ return {cpp_string(metadata["git_describe"])}; }}
171std::string getGitCommit() {{ return {cpp_string(metadata["git_commit"])}; }}
172bool getGitDirty() {{ return {cpp_bool(metadata["git_dirty"])}; }}
173bool hasVersionMetadata() {{ return {cpp_bool(metadata["source_available"])}; }}
175std::string getShortHash() {{ return {cpp_string(metadata["git_short_hash"])}; }}
176unsigned int getCommitsSinceTag() {{ return {metadata["commits_since_tag"]}; }}
287 parser = argparse.ArgumentParser()
288 parser.add_argument(
"--source-dir", default=os.getcwd())
289 parser.add_argument(
"--package-name")
290 parser.add_argument(
"--namespace")
291 parser.add_argument(
"--include", default=
None)
292 parser.add_argument(
"--output-dir")
293 parser.add_argument(
"--header")
294 parser.add_argument(
"--source")
295 parser.add_argument(
"--main")
296 args = parser.parse_args()
298 source_dir = Path(args.source_dir).resolve()
299 package_name = args.package_name
or source_dir.name
301 include = args.include
or f
"km3net/{package_name}/version.h"
304 output_dir = Path(args.output_dir)
if args.output_dir
else None
305 header_path = Path(args.header)
if args.header
else None
306 source_path = Path(args.source)
if args.source
else None
307 main_path = Path(args.main)
if args.main
else None
310 header_path = header_path
or output_dir /
"include" / include
311 source_path = source_path
or output_dir / f
"{package_name}-version.cc"
312 main_path = main_path
or output_dir / f
"{package_name}-version-command.cc"
314 if not (header_path
or source_path
or main_path):
315 print(json.dumps(metadata, indent=2))