forked from pandas-dev/pandas
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtag.py
63 lines (47 loc) · 1.46 KB
/
tag.py
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
#!/usr/bin/env python3
"""
Tag a pandas release.
This does not push the tag.
"""
import argparse
import subprocess
import sys
from packaging import version
def check_tag(tag):
assert tag.startswith("v"), "Invalid tag '{}', must " "start with 'v'".format(tag)
ver = version.parse(tag.lstrip("v"))
assert isinstance(ver, version.Version), "Invalid tag '{}'".format(tag)
if "rc" in tag:
assert ".rc" not in tag, "RC tags should be formatted like '.0rcX' "
return tag
def checkout(tag):
if tag[-1] == "0" or "rc" in tag:
# off master
base = "master"
else:
base = ".".join([tag[1:].rsplit(".", 1)[0], "x"])
subprocess.check_call(["git", "checkout", base])
# subprocess.check_call(["git", "pull", "--ff-only", "upstream", base])
def commit(tag):
subprocess.check_call(["git", "clean", "-xdf"])
print("Creating tag {}".format(tag))
subprocess.check_call(
[
"git",
"commit",
"--allow-empty",
"-m",
"RLS: {}".format(tag[1:]),
]
)
subprocess.check_call(["git", "tag", "-a", tag, "-m", "Version {}".format(tag[1:])])
def parse_args(args=None):
parser = argparse.ArgumentParser(__name__, usage=__doc__)
parser.add_argument("tag", type=check_tag)
return parser.parse_args(args)
def main(args=None):
args = parse_args(args)
checkout(args.tag)
commit(args.tag)
if __name__ == "__main__":
sys.exit(main())