Files
godot-builds/tools/bootstrap/generate-history.py
Rémi Verschelde 3a2388aa4b Fix upload-github.sh target branch
And make all scripts executable.
2023-10-12 09:23:26 +02:00

69 lines
2.3 KiB
Python
Executable File

### This script has been used to generate initial data for this repository
### and is preserved as a reference. DO NOT USE IT.
### Generate commit history adding each official release in order.
###
### Make sure JSON metadata files are put into the releases folder.
### Using these files this script recreates the commit history,
### placing each release at their approximate time and date of
### publication. Each commit is tagged with the release identity.
###
### Make sure you do not rebase or otherwise change the history
### afterwards, as that destroys git tags (they remain assigned
### to old commits).
import json
import os
import subprocess
from datetime import datetime
releases = []
# Read JSON files and generate correct release history.
releases_path = "./releases"
dir_contents = os.listdir(releases_path)
for filename in dir_contents:
filepath = os.path.join(releases_path, filename)
if not os.path.isfile(filepath):
continue
with open(filepath, 'r') as json_data:
release_data = json.load(json_data)
print(f"Reading release '{release_data['name']}' data.")
releases.append({
"file": filepath,
"data": release_data
})
# Sort by release date so we can create commits in order
releases.sort(key=lambda x: x['data']['release_date'])
# Generate a commit for each release, spoof the commit date to
# match the release date.
for release_data in releases:
commit_datetime = datetime.fromtimestamp(release_data['data']['release_date'])
# Thu, 07 Apr 2005 22:13:13 +0200
commit_date = commit_datetime.strftime('%a, %d %b %Y %H:%M:%S +0000')
release_tag = f"{release_data['data']['version']}-{release_data['data']['status']}"
cmd_add_file = f"git add {release_data['file']}"
cmd_commit_release = f"git commit -m \"Add Godot {release_tag}\""
cmd_amend_time = f"git commit --amend --no-edit --date \"{commit_date}\""
cmd_tag_release = f"git tag {release_tag}"
extra_env = os.environ.copy()
extra_env['GIT_COMMITTER_DATE'] = commit_date
subprocess.run(cmd_add_file)
subprocess.run(cmd_commit_release, env=extra_env)
subprocess.run(cmd_amend_time, env=extra_env)
subprocess.run(cmd_tag_release, env=extra_env)
print(f"Committed release '{release_data['data']['name']}'.")