diff --git a/src/Tools/SubWCRev.py b/src/Tools/SubWCRev.py index 3c6a0fd8a0..c2b931b525 100644 --- a/src/Tools/SubWCRev.py +++ b/src/Tools/SubWCRev.py @@ -127,6 +127,75 @@ class BazaarControl(VersionControl): def printInfo(self): print("bazaar") +class DebianGitHub(VersionControl): + #https://gist.github.com/0penBrain/7be59a48aba778c955d992aa69e524c5 + #https://gist.github.com/yershalom/a7c08f9441d1aadb13777bce4c7cdc3b + #https://github.community/t5/GitHub-API-Development-and/How-to-get-all-branches-which-contain-a-commit-from-SHA-using/td-p/25006 + def extractInfo(self, srcdir, bindir): + try: + f = open(srcdir+"/debian/git-build-recipe.manifest") + except: + return False + + # Read the first two lines + recipe = f.readline() + commit = f.readline() + f.close() + + import requests + base_url = "https://api.github.com" + owner = "FreeCAD" + repo = "FreeCAD" + sha = commit[commit.rfind(':') + 1 : -1] + request_url = "{}/repos/{}/{}/commits?per_page=1&sha={}".format(base_url, owner, repo, sha) + + commit_req = requests.get(request_url) + if not commit_req.ok: + return False + + commit_date = commit_req.headers.get('last-modified') + self.hash = sha + + try: + # Try to convert into the same format as GitControl + t = time.strptime(commit_date, "%a, %d %b %Y %H:%M:%S GMT") + self.date = ("%d/%02d/%02d %02d:%02d:%02d") % (t.tm_year, t.tm_mon, t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec) + except: + self.date = commit_date + + self.branch = "master" + + # Try to determine the branch of the sha + # There is no function of the rest API of GH but with the url below we get HTML code + branch_url = "https://github.com/{}/{}/branch_commits/{}".format(owner, repo, sha) + branch_req = requests.get(branch_url) + if branch_req.ok: + html = branch_req.text + pattern = "
  • ") + 1 + end = link.find("<", start) + self.branch = link[start:end] + + self.url = "git://github.com/{}/{}.git {}".format(owner, repo, self.branch) + link = commit_req.headers.get("link") + beg = link.rfind("&page=") + 6 + end = link.rfind(">") + self.rev = link[beg:end] + " (GitHub)" + return True + + def writeVersion(self, lines): + content = VersionControl.writeVersion(self, lines) + content.append('// Git relevant stuff\n') + content.append('#define FCRepositoryHash "%s"\n' % (self.hash)) + content.append('#define FCRepositoryBranch "%s"\n' % (self.branch)) + return content + + def printInfo(self): + print("Debian/GitHub") + class GitControl(VersionControl): #http://www.hermanradtke.com/blog/canonical-version-numbers-with-git/ #http://blog.marcingil.com/2011/11/creating-build-numbers-using-git-commits/ @@ -374,7 +443,7 @@ def main(): if o in ("-b", "--bindir"): bindir = a - vcs=[GitControl(), BazaarControl(), Subversion(), MercurialControl(), DebianChangelog(), UnknownControl()] + vcs=[GitControl(), DebianGitHub(), BazaarControl(), Subversion(), MercurialControl(), DebianChangelog(), UnknownControl()] for i in vcs: if i.extractInfo(srcdir, bindir): # Open the template file and the version file