mirror of https://github.com/apache/lucene.git
Add simple tool to diff entries in lucene's CHANGES.txt that should be identical (#12860)
* add simple tool to diff entries in lucene's CHANGES.txt that should be identical * remove temporary debugging code
This commit is contained in:
parent
1c3925cb15
commit
af9a2b9803
|
@ -0,0 +1,78 @@
|
|||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed with
|
||||
# this work for additional information regarding copyright ownership.
|
||||
# The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
# (the "License"); you may not use this file except in compliance with
|
||||
# the License. You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
import os
|
||||
import re
|
||||
import subprocess
|
||||
import sys
|
||||
import tempfile
|
||||
import urllib.request
|
||||
|
||||
'''
|
||||
A simple tool to see diffs between main's version of CHANGES.txt entries for
|
||||
a given release vs the stable branch's version. It's best to keep these 1)
|
||||
identical and 2) matching what changes were actually backported to be honest
|
||||
to users and avoid future annoying conflicts on backport.
|
||||
'''
|
||||
|
||||
# e.g. python3 -u diff_lucene_changes.py branch_9_9 main 9.9.0
|
||||
|
||||
#
|
||||
|
||||
def get_changes_url(branch_name):
|
||||
if os.path.isdir(branch_name):
|
||||
url = f'file://{branch_name}/lucene/CHANGES.txt'
|
||||
else:
|
||||
url = f'https://raw.githubusercontent.com/apache/lucene/{branch_name}/lucene/CHANGES.txt'
|
||||
print(f'NOTE: resolving {branch_name} --> {url}')
|
||||
return url
|
||||
|
||||
def extract_release_section(changes_txt, release_name):
|
||||
return re.search(f'=======+ Lucene {re.escape(release_name)} =======+(.*?)=======+ Lucene .*? =======+$',
|
||||
changes_txt.decode('utf-8'), re.MULTILINE | re.DOTALL).group(1).encode('utf-8')
|
||||
|
||||
def main():
|
||||
if len(sys.argv) < 3 or len(sys.argv) > 5:
|
||||
print('\nUsage: python3 -u dev-tools/scripts/diff_lucene_changes.py <branch1-or-local-clone> <branch2-or-local-clone> <release-name> [diff-commandline-extras]\n')
|
||||
print(' e.g.: python3 -u dev-tools/scripts/diff_lucene_changes.py branch_9_9 /l/trunk 9.9.0 "-w"\n')
|
||||
sys.exit(1)
|
||||
|
||||
branch1 = sys.argv[1]
|
||||
branch2 = sys.argv[2]
|
||||
release_name = sys.argv[3]
|
||||
|
||||
if len(sys.argv) > 4:
|
||||
diff_cl_extras = [sys.argv[4]]
|
||||
else:
|
||||
diff_cl_extras = []
|
||||
|
||||
branch1_changes = extract_release_section(urllib.request.urlopen(get_changes_url(branch1)).read(),
|
||||
release_name)
|
||||
branch2_changes = extract_release_section(urllib.request.urlopen(get_changes_url(branch2)).read(),
|
||||
release_name)
|
||||
|
||||
with tempfile.NamedTemporaryFile() as f1, tempfile.NamedTemporaryFile() as f2:
|
||||
f1.write(branch1_changes)
|
||||
f2.write(branch2_changes)
|
||||
|
||||
command = ['diff'] + diff_cl_extras + [f1.name, f2.name]
|
||||
|
||||
# diff returns non-zero exit status when there are diffs, so don't pass check=True
|
||||
print(subprocess.run(command, check=False, capture_output=True).stdout.decode('utf-8'))
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
Loading…
Reference in New Issue