| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- '''
- This file is part of Telegram Desktop,
- the official desktop application for the Telegram messaging service.
- For license and copyright information please follow this link:
- https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
- '''
- import sys, os, re, subprocess, io
- def finish(code):
- global executePath
- os.chdir(executePath)
- sys.exit(code)
- if sys.platform == 'win32' and not 'COMSPEC' in os.environ:
- print('[ERROR] COMSPEC environment variable is not set.')
- finish(1)
- executePath = os.getcwd()
- scriptPath = os.path.dirname(os.path.realpath(__file__))
- inputVersion = ''
- versionOriginal = ''
- versionMajor = ''
- versionMinor = ''
- versionPatch = ''
- versionAlpha = '0'
- versionBeta = False
- for arg in sys.argv:
- match = re.match(r'^\s*(\d+)\.(\d+)(\.(\d+)(\.(\d+|beta))?)?\s*$', arg)
- if match:
- inputVersion = arg
- versionOriginal = inputVersion
- versionMajor = match.group(1)
- versionMinor = match.group(2)
- versionPatch = match.group(4) if match.group(4) else '0'
- versionAlphaBeta = match.group(5) if match.group(5) else ''
- if len(versionAlphaBeta) > 0:
- if match.group(6) == 'beta':
- versionBeta = True
- else:
- versionAlpha = match.group(6)
- if not len(versionMajor):
- print("Wrong version parameter")
- finish(1)
- def checkVersionPart(part):
- cleared = int(part) % 1000 if len(part) > 0 else 0
- if str(cleared) != part:
- print("Bad version part: " + part)
- finish(1)
- checkVersionPart(versionMajor)
- checkVersionPart(versionMinor)
- checkVersionPart(versionPatch)
- checkVersionPart(versionAlpha)
- versionFull = str(int(versionMajor) * 1000000 + int(versionMinor) * 1000 + int(versionPatch))
- versionFullAlpha = '0'
- if versionAlpha != '0':
- versionFullAlpha = str(int(versionFull) * 1000 + int(versionAlpha))
- versionStr = versionMajor + '.' + versionMinor + '.' + versionPatch
- versionStrSmall = versionStr if versionPatch != '0' else versionMajor + '.' + versionMinor
- if versionBeta:
- print('Setting version: ' + versionStr + ' beta')
- elif versionAlpha != '0':
- print('Setting version: ' + versionStr + '.' + versionAlpha + ' closed alpha')
- else:
- print('Setting version: ' + versionStr + ' stable')
- #def replaceInFile(path, replaces):
- def checkChangelog():
- global scriptPath, versionStr, versionStrSmall
- count = 0
- with io.open(scriptPath + '/../../changelog.txt', encoding='utf-8') as f:
- for line in f:
- if line.startswith(versionStr + ' ') or line.startswith(versionStrSmall + ' '):
- count = count + 1
- if count == 0:
- print('Changelog entry not found!')
- finish(1)
- elif count != 1:
- print('Wrong changelog entries count found: ' + count)
- finish(1)
- checkChangelog()
- def replaceInFile(path, replacements):
- content = ''
- foundReplacements = {}
- updated = False
- with open(path, 'r') as f:
- for line in f:
- for replacement in replacements:
- if re.search(replacement[0], line):
- changed = re.sub(replacement[0], replacement[1], line)
- if changed != line:
- line = changed
- updated = True
- foundReplacements[replacement[0]] = True
- content = content + line
- for replacement in replacements:
- if not replacement[0] in foundReplacements:
- print('Could not find "' + replacement[0] + '" in "' + path + '".')
- finish(1)
- if updated:
- with open(path, 'w') as f:
- f.write(content)
- print('Patching build/version...')
- replaceInFile(scriptPath + '/version', [
- [ r'(AppVersion\s+)\d+', r'\g<1>' + versionFull ],
- [ r'(AppVersionStrMajor\s+)\d[\d\.]*', r'\g<1>' + versionMajor + '.' + versionMinor ],
- [ r'(AppVersionStrSmall\s+)\d[\d\.]*', r'\g<1>' + versionStrSmall ],
- [ r'(AppVersionStr\s+)\d[\d\.]*', r'\g<1>' + versionStr ],
- [ r'(BetaChannel\s+)\d', r'\g<1>' + ('1' if versionBeta else '0') ],
- [ r'(AlphaVersion\s+)\d+', r'\g<1>' + versionFullAlpha ],
- [ r'(AppVersionOriginal\s+)\d[\d\.beta]*', r'\g<1>' + versionOriginal ],
- ])
- print('Patching core/version.h...')
- replaceInFile(scriptPath + '/../SourceFiles/core/version.h', [
- [ r'(TDESKTOP_REQUESTED_ALPHA_VERSION\s+)\(\d+ULL\)', r'\g<1>(' + versionFullAlpha + 'ULL)' ],
- [ r'(AppVersion\s+=\s+)\d+', r'\g<1>' + versionFull ],
- [ r'(AppVersionStr\s+=\s+)[^;]+', r'\g<1>"' + versionStrSmall + '"' ],
- [ r'(AppBetaVersion\s+=\s+)[a-z]+', r'\g<1>' + ('true' if versionBeta else 'false') ],
- ])
- parts = [versionMajor, versionMinor, versionPatch, versionAlpha]
- withcomma = ','.join(parts)
- withdot = '.'.join(parts)
- rcReplaces = [
- [ r'(FILEVERSION\s+)\d+,\d+,\d+,\d+', r'\g<1>' + withcomma ],
- [ r'(PRODUCTVERSION\s+)\d+,\d+,\d+,\d+', r'\g<1>' + withcomma ],
- [ r'("FileVersion",\s+)"\d+\.\d+\.\d+\.\d+"', r'\g<1>"' + withdot + '"' ],
- [ r'("ProductVersion",\s+)"\d+\.\d+\.\d+\.\d+"', r'\g<1>"' + withdot + '"' ],
- ]
- print('Patching Telegram.rc...')
- replaceInFile(scriptPath + '/../Resources/winrc/Telegram.rc', rcReplaces)
- print('Patching Updater.rc...')
- replaceInFile(scriptPath + '/../Resources/winrc/Updater.rc', rcReplaces)
- print('Patching appxmanifest.xml...')
- replaceInFile(scriptPath + '/../Resources/uwp/AppX/AppxManifest.xml', [
- [ r'( Version=)"\d+\.\d+\.\d+\.\d+"', r'\g<1>"' + withdot + '"' ],
- ])
|