1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
#!/usr/bin/env python3
#
# Copyright 2021 Axel Huebl
#
# This file is part of WarpX.
#
# This file is a maintainer tool to bump the PICSAR version that we pull in
# when building WarpX.
#
import datetime
from pathlib import Path
import re
import sys
import requests
# Maintainer Inputs ###########################################################
print("""Hi there, this is a WarpX maintainer tool to update the source
code of WarpX to a new commit/release of PICSAR.
For it to work, you need write access on the source directory and
you should be working in a clean git branch without ongoing
rebase/merge/conflict resolves and without unstaged changes.""")
# check source dir
REPO_DIR = Path(__file__).parent.parent.parent.absolute()
print(f"\nYour current source directory is: {REPO_DIR}")
REPLY = input("Are you sure you want to continue? [y/N] ")
print()
if not REPLY in ["Y", "y"]:
print("You did not confirm with 'y', aborting.")
sys.exit(1)
# Current Versions ############################################################
# PICSAR development HEAD
PICSAR_gh = requests.get('https://api.github.com/repos/ECP-WarpX/picsar/commits/development')
PICSAR_HEAD = PICSAR_gh.json()["sha"]
# WarpX references to PICSAR: cmake/dependencies/PICSAR.cmake
PICSAR_cmake_path = str(REPO_DIR.joinpath("cmake/dependencies/PICSAR.cmake"))
# branch/commit/tag (git fetcher) version
# set(WarpX_picsar_branch "development" ...
PICSAR_branch = f"unknown (format issue in {PICSAR_cmake_path})"
with open(PICSAR_cmake_path, encoding='utf-8') as f:
r_minimal = re.findall(r'.*set\(WarpX_picsar_branch\s+"(.+)"\s+.*',
f.read(), re.MULTILINE)
if len(r_minimal) >= 1:
PICSAR_branch = r_minimal[0]
# minimal (external) version
# find_package(PICSAR YY.MM CONFIG ...
PICSAR_minimal = f"unknown (format issue in {PICSAR_cmake_path})"
with open(PICSAR_cmake_path, encoding='utf-8') as f:
r_minimal = re.findall(r'.*find_package\(PICSAR\s+(.+)\s+CONFIG\s+.*',
f.read(), re.MULTILINE)
if len(r_minimal) >= 1:
PICSAR_minimal = r_minimal[0]
# Ask for new #################################################################
print("""We will now run a few sed commands on your source directory.
Please answer the following questions about the version number
you want to require from PICSAR:\n""")
print(f"Currently, WarpX builds against this PICSAR commit/branch/sha: {PICSAR_branch}")
print(f"PICSAR HEAD commit (development branch): {PICSAR_HEAD}")
PICSAR_new_branch = input(f"Update PICSAR commit/branch/sha: ").strip()
if not PICSAR_new_branch:
PICSAR_new_branch = PICSAR_branch
print(f"--> Nothing entered, will keep: {PICSAR_branch}")
print()
print(f"Currently, a pre-installed PICSAR is required at least at version: {PICSAR_minimal}")
today = datetime.date.today().strftime("%y.%m")
PICSAR_new_minimal = input(f"New minimal PICSAR version (e.g. {today})? ").strip()
if not PICSAR_new_minimal:
PICSAR_new_minimal = PICSAR_minimal
print(f"--> Nothing entered, will keep: {PICSAR_minimal}")
print()
print(f"New PICSAR commit/branch/sha: {PICSAR_new_branch}")
print(f"New minimal PICSAR version: {PICSAR_new_minimal}\n")
REPLY = input("Is this information correct? Will now start updating! [y/N] ")
print()
if not REPLY in ["Y", "y"]:
print("You did not confirm with 'y', aborting.")
sys.exit(1)
# Updates #####################################################################
# WarpX references to PICSAR: cmake/dependencies/PICSAR.cmake
with open(PICSAR_cmake_path, encoding='utf-8') as f:
PICSAR_cmake_content = f.read()
# branch/commit/tag (git fetcher) version
# set(WarpX_picsar_branch "development" ...
PICSAR_cmake_content = re.sub(
r'(.*set\(WarpX_picsar_branch\s+")(.+)("\s+.*)',
r'\g<1>{}\g<3>'.format(PICSAR_new_branch),
PICSAR_cmake_content, flags = re.MULTILINE)
# minimal (external) version
# find_package(PICSAR YY.MM CONFIG ...
PICSAR_cmake_content = re.sub(
r'(.*find_package\(PICSAR\s+)(.+)(\s+CONFIG\s+.*)',
r'\g<1>{}\g<3>'.format(PICSAR_new_minimal),
PICSAR_cmake_content, flags = re.MULTILINE)
with open(PICSAR_cmake_path, "w", encoding='utf-8') as f:
f.write(PICSAR_cmake_content)
# Epilogue ####################################################################
print("""Done. Please check your source, e.g. via
git diff
now and commit the changes if no errors occurred.""")
|