Skip to content

Support win cpp #10

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 3 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -59,3 +59,4 @@ target/
.idea
MANIFEST
Version.py
version.h
3 changes: 2 additions & 1 deletion src/gitversionbuilder/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,13 @@ def run_main():
parser.add_argument('--version', action='version', version=Version.VERSION_STRING)
parser.add_argument('--lang', choices=['cpp', 'python'], required=True)
parser.add_argument('--dir', default='.')
parser.add_argument('--buildnum', default='1')
parser.add_argument('file')
args = parser.parse_args()

print("Creating git version information from %s" % args.dir)

main.create_version_file(git_directory=args.dir, output_file=args.file, lang=args.lang)
main.create_version_file(git_directory=args.dir, output_file=args.file, lang=args.lang, buildnum=args.buildnum)


if __name__ == '__main__':
Expand Down
3 changes: 2 additions & 1 deletion src/gitversionbuilder/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,9 @@ def get_version(git_directory):
return versioninforeader.from_git(git_directory)


def create_version_file(git_directory, output_file, lang):
def create_version_file(git_directory, output_file, lang, buildnum = '1'):
version_info = get_version(git_directory)
version_info.buildnum = buildnum
output = _output(version_info, lang=lang)
_write_to_file(output_file, output)

Expand Down
5 changes: 4 additions & 1 deletion src/gitversionbuilder/versioninfo.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,9 @@ def __init__(self, git_tag_name, git_commits_since_tag, git_commit_id, git_tag_e
self.git_tag_exists = git_tag_exists
self.modified_since_commit = modified_since_commit
self.is_dev = modified_since_commit or (not git_tag_exists) or (git_commits_since_tag != 0)
self.last_commit_data = ""
self.branch_name = "dev"
self.buildnum=1

def interpret_tag_name(self):
matched = re.match("^v?([0-9]+(?:\.[0-9]+)*)(?:-?((alpha|beta|rc|pre|m)[0-9]?|stable|final))?$",
Expand All @@ -49,7 +52,7 @@ def version_string(self):
if self.git_commits_since_tag > 0:
if result != "":
result += "."
result += "dev%d+rev%s" % (self.git_commits_since_tag, self.git_commit_id)
result += "%s%d+rev%s" % (self.branch_name, self.git_commits_since_tag, self.git_commit_id)
if self.modified_since_commit:
result += "-modified"
return result
Expand Down
44 changes: 29 additions & 15 deletions src/gitversionbuilder/versioninfooutputter.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ def _format_tag_interpretation(self, version_info):
return ""
else:
formatted_version_components = self.version_components_formatter(tag_interpretation.version_components)
return self.tag_interpretation_formatter(tag_interpretation, formatted_version_components)
return self.tag_interpretation_formatter(tag_interpretation, formatted_version_components, version_info.buildnum)


# ----------------------------------------
Expand All @@ -47,35 +47,49 @@ def main_formatter(self, version_info, other_variables):
// DO NOT MODIFY!
// ---------------------------------------------------

#pragma once
#ifndef MESSMER_GITVERSION_VERSION_H
#define MESSMER_GITVERSION_VERSION_H

namespace version {
constexpr const char *VERSION_STRING = "%s";
constexpr const char *GIT_TAG_NAME = "%s";
constexpr const unsigned int GIT_COMMITS_SINCE_TAG = %d;
constexpr const char *GIT_COMMIT_ID = "%s";
constexpr bool MODIFIED_SINCE_COMMIT = %s;
constexpr bool IS_DEV_VERSION = %s;
#define VERSION_STRING "%s"
#define GIT_TAG_NAME "%s"
#define GIT_BRANCH_NAME "%s"
#define GIT_COMMITS_SINCE_TAG "%d"
#define GIT_COMMIT_ID "%s"
#define GIT_LAST_COMMIT_DATE "%s"
#define MODIFIED_SINCE_COMMIT %s
#define IS_DEV_VERSION %s
%s
}

#endif
""" % (version_info.version_string, version_info.git_tag_name, version_info.git_commits_since_tag,
version_info.git_commit_id, str(version_info.modified_since_commit).lower(), str(version_info.is_dev).lower(),
""" % (version_info.version_string,
version_info.git_tag_name,
version_info.branch_name,
version_info.git_commits_since_tag,
version_info.git_commit_id,
version_info.last_commit_data,
str(version_info.modified_since_commit).lower(),
str(version_info.is_dev).lower(),
other_variables)

def is_stable_formatter(self, is_stable):
return """
constexpr bool IS_STABLE_VERSION = %s;
""" % str(is_stable).lower()

def tag_interpretation_formatter(self, tag_interpretation, version_components):
def tag_interpretation_formatter(self, tag_interpretation, version_components, buildnum):
return """
constexpr const char *VERSION_COMPONENTS[] = %s;
constexpr const char *VERSION_TAG = "%s";
""" % (version_components, tag_interpretation.version_tag)
#define VER_MAJOR %s
#define VER_MINOR %s
#define VER_BUG_FIX %s
#define VER_BUILD_NUM %s
""" % (version_components,
tag_interpretation.version_tag,
tag_interpretation.version_components[0],
tag_interpretation.version_components[1],
tag_interpretation.version_components[2],
buildnum)

def version_components_formatter(self, version_components):
return "{\"" + "\", \"".join(version_components) + "\"}"
Expand Down Expand Up @@ -108,7 +122,7 @@ def is_stable_formatter(self, is_stable):
IS_STABLE_VERSION = %s
""" % is_stable

def tag_interpretation_formatter(self, tag_interpretation, version_components):
def tag_interpretation_formatter(self, tag_interpretation, version_components, buildnum=1):
return """
VERSION_COMPONENTS = %s
VERSION_TAG = "%s"
Expand Down
20 changes: 15 additions & 5 deletions src/gitversionbuilder/versioninforeader.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import subprocess
import os
import re
import tempfile
from gitversionbuilder import versioninfo, utils
from gitversionbuilder.utils import isstring

Expand All @@ -11,7 +12,12 @@ def from_git(git_directory):
with open(os.devnull, 'w') as devnull:
version_string = subprocess.check_output(["git", "describe", "--tags", "--long", "--abbrev=7"],
stderr=devnull).decode()
return _parse_git_version(version_string, _is_modified_since_commit_in_cwd())
version = _parse_git_version(version_string, _is_modified_since_commit_in_cwd())

version.last_commit_data = subprocess.check_output(["git", "log", "--date=iso", "-1", "--format=%cd"],
stderr=devnull).decode().strip()
version.branch_name = _branch_name_in_cwd()
return version
except subprocess.CalledProcessError:
# If there is no git tag, then the commits_since_tag returned by git is wrong
# (because they consider the branch HEAD the tag and there are 0 commits since the branch head).
Expand All @@ -21,7 +27,7 @@ def from_git(git_directory):
# There is no git tag, but there are commits
branch_name = _branch_name_in_cwd()
commit_id = _commit_id_in_cwd()
return versioninfo.VersionInfo(git_tag_name=branch_name,
version = versioninfo.VersionInfo(git_tag_name=branch_name,
git_commits_since_tag=total_num_commits,
git_commit_id=commit_id,
git_tag_exists=False,
Expand All @@ -30,16 +36,20 @@ def from_git(git_directory):
# There are no commits yet
branch_name = "HEAD"
commit_id = "0"
return versioninfo.VersionInfo(git_tag_name=branch_name,
version = versioninfo.VersionInfo(git_tag_name=branch_name,
git_commits_since_tag=total_num_commits,
git_commit_id=commit_id,
git_tag_exists=False,
modified_since_commit=_cwd_is_not_empty())
with open(os.devnull, 'w') as devnull:
version.last_commit_data = subprocess.check_output(["git", "log", "--date=iso", "-1", "--format=%cd"],
stderr=devnull).decode().strip()
return version


def _total_number_of_commits_in_cwd():
try:
with open('/dev/null', 'w') as devnull:
with tempfile.TemporaryFile() as devnull:
return int(subprocess.check_output(["git", "rev-list", "HEAD", "--count"], stderr=devnull))
except subprocess.CalledProcessError:
return 0
Expand Down Expand Up @@ -91,7 +101,7 @@ def __str__(self):

def _parse_git_version(git_version_string, modified_since_commit):
assert(isstring(git_version_string))
matched = re.match("^([a-zA-Z0-9\.\-/]+)-([0-9]+)-g([0-9a-f]+)$", git_version_string)
matched = re.match("^([a-zA-Z0-9\.\-\/_]+)-([0-9]+)-g([0-9a-f]+)$", git_version_string)
if matched:
tag = matched.group(1)
commits_since_tag = int(matched.group(2))
Expand Down