mirror of
				https://github.com/catchorg/Catch2.git
				synced 2025-10-31 20:27:11 +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:
		
							
								
								
									
										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')) | ||||
		Reference in New Issue
	
	Block a user
	 Martin Hořeňovský
					Martin Hořeňovský