-
Notifications
You must be signed in to change notification settings - Fork 2.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Move release note in wrong location and add script to block this #8320
Changes from 1 commit
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
#!/usr/bin/env python3 | ||
# This code is part of Qiskit. | ||
# | ||
# (C) Copyright IBM 2022 | ||
# | ||
# This code is licensed under the Apache License, Version 2.0. You may | ||
# obtain a copy of this license in the LICENSE.txt file in the root directory | ||
# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0. | ||
# | ||
# Any modifications or derivative works of this code must retain this | ||
# copyright notice, and modified files need to carry a notice indicating | ||
# that they have been altered from the originals. | ||
|
||
"""Utility script to verify qiskit copyright file headers""" | ||
|
||
import argparse | ||
import multiprocessing | ||
import subprocess | ||
import os | ||
import sys | ||
import re | ||
|
||
# release notes regex | ||
reno = re.compile(r"releasenotes\/notes") | ||
# exact release note regex | ||
exact_reno = re.compile(r"^releasenotes\/notes") | ||
|
||
def discover_files(): | ||
"""Find all .py, .pyx, .pxd files in a list of trees""" | ||
cmd = ["git", "ls-tree", "-r", "--name-only", "HEAD"] | ||
res = subprocess.run(cmd, capture_output=True, check=True, encoding="UTF8") | ||
files = res.stdout.split("\n") | ||
return files | ||
|
||
|
||
def validate_path(file_path): | ||
if reno.search(file_path) and not exact_reno.search(file_path): | ||
return file_path | ||
return None | ||
|
||
|
||
def _main(): | ||
default_path = os.path.join( | ||
os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "qiskit" | ||
) | ||
parser = argparse.ArgumentParser(description="Find any stray release notes.") | ||
args = parser.parse_args() | ||
files = discover_files() | ||
with multiprocessing.Pool() as pool: | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This works in every platform? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yeah it will, because I have the |
||
res = pool.map(validate_path, files) | ||
failed_files = [x for x in res if x is not None] | ||
if len(failed_files) > 0: | ||
for failed_file in failed_files: | ||
sys.stderr.write("%s is not in the correct location.\n" % failed_file) | ||
sys.exit(1) | ||
sys.exit(0) | ||
|
||
|
||
if __name__ == "__main__": | ||
_main() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
How this variable is used?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
oh, good catch. this is sloppy copy and paste from the script I based this on