mirror of
https://github.com/catchorg/Catch2.git
synced 2024-12-23 03:43:28 +01:00
Add script that helps with updating the Vcpkg package.
Kind of a hackjob, that assumes vcpkg is already checked out and is next to the Catch's directory.
This commit is contained in:
parent
1aa3e4abfa
commit
ac369b7b83
114
scripts/updateVcpkgPackage.py
Normal file
114
scripts/updateVcpkgPackage.py
Normal file
@ -0,0 +1,114 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import io, os, re, sys, subprocess
|
||||
import hashlib
|
||||
|
||||
from scriptCommon import catchPath
|
||||
from releaseCommon import Version
|
||||
|
||||
print(catchPath)
|
||||
|
||||
default_path = '../vcpkg/ports/catch/'
|
||||
|
||||
def adjusted_path(path):
|
||||
return os.path.join(catchPath, path)
|
||||
|
||||
def get_hash(path):
|
||||
BUFF_SIZE = 65536
|
||||
sha512 = hashlib.sha512()
|
||||
# The newlines should be normalized into \n, which is what we want
|
||||
# If reused use 'rb' with a file written with io.open(newline='\n')
|
||||
with open(path, 'r') as f:
|
||||
while True:
|
||||
data = f.read(BUFF_SIZE)
|
||||
if not data:
|
||||
break
|
||||
if sys.version_info[0] < 3:
|
||||
sha512.update(data)
|
||||
else:
|
||||
sha512.update(data.encode('utf-8'))
|
||||
return sha512.hexdigest()
|
||||
|
||||
def update_control(path):
|
||||
v = Version()
|
||||
ver_string = v.getVersionString()
|
||||
|
||||
# Update control
|
||||
lines = []
|
||||
control_path = os.path.join(path, 'CONTROL')
|
||||
with open(control_path, 'r') as f:
|
||||
for line in f:
|
||||
lines.append(line)
|
||||
with open(control_path, 'w') as f:
|
||||
for line in lines:
|
||||
if 'Version: ' in line:
|
||||
line = 'Version: {}\n'.format(v.getVersionString())
|
||||
f.write(line)
|
||||
|
||||
def update_portfile(path, header_hash, licence_hash):
|
||||
print('Updating portfile')
|
||||
v = Version()
|
||||
ver_string = v.getVersionString()
|
||||
|
||||
# Update portfile
|
||||
lines = []
|
||||
portfile_path = os.path.join(path, 'portfile.cmake')
|
||||
with open(portfile_path, 'r') as f:
|
||||
for line in f:
|
||||
lines.append(line)
|
||||
with open(portfile_path, 'w') as f:
|
||||
# Two things we need to change/update
|
||||
# 1) Link and hash of releaseCommon
|
||||
# 2) Link and hash of licence
|
||||
# We could assume licence never changes, but where is the fun in that?
|
||||
first_hash = True
|
||||
for line in lines:
|
||||
# Check what we are updating
|
||||
if 'vcpkg_download_distfile' in line:
|
||||
kind = line.split('(')[-1].strip()
|
||||
print(kind)
|
||||
|
||||
# Deal with URLS
|
||||
if 'URLS' in line and kind == 'HEADER':
|
||||
line = ' URLS "https://github.com/philsquared/Catch/releases/download/v{}/catch.hpp"\n'.format(v.getVersionString())
|
||||
if 'URLS' in line and kind == 'LICENSE':
|
||||
line = ' URLS "https://raw.githubusercontent.com/philsquared/Catch/v{}/LICENSE.txt"\n'.format(v.getVersionString())
|
||||
|
||||
# Deal with hashes
|
||||
if 'SHA512' in line and kind == 'HEADER':
|
||||
line = ' SHA512 {}\n'.format(header_hash)
|
||||
if 'SHA512' in line and kind == 'LICENSE':
|
||||
line = ' SHA512 {}\n'.format(licence_hash)
|
||||
f.write(line)
|
||||
|
||||
|
||||
def git_push(path_to_repo):
|
||||
v = Version()
|
||||
ver_string = v.getVersionString()
|
||||
|
||||
# Move to the repo dir
|
||||
old_path = os.getcwd()
|
||||
os.chdir(path_to_repo)
|
||||
|
||||
# Work with git
|
||||
# Make sure we branch off master
|
||||
subprocess.call('git checkout master', shell=True)
|
||||
|
||||
# Update repo to current master, so we don't work off old version of the portsfile
|
||||
subprocess.call('git pull Microsoft master', shell=True)
|
||||
|
||||
# Create a new branch for the update
|
||||
subprocess.call('git checkout -b catch-{}'.format(ver_string), shell=True)
|
||||
# Add changed files (should be only our files)
|
||||
subprocess.call('git add -u .', shell=True)
|
||||
# Create a commit with these changes
|
||||
subprocess.call('git commit -m "Update Catch to {}"'.format(ver_string), shell=True)
|
||||
# Don't push, so author can review
|
||||
print('Changes were commited to the vcpkg fork. Please check, push and open PR.')
|
||||
|
||||
header_hash = get_hash(adjusted_path('single_include/catch.hpp'))
|
||||
licence_hash = get_hash(adjusted_path('LICENSE.txt'))
|
||||
update_control(adjusted_path(default_path))
|
||||
update_portfile(adjusted_path(default_path), header_hash, licence_hash)
|
||||
|
||||
git_push(adjusted_path('../vcpkg'))
|
Loading…
Reference in New Issue
Block a user