1+ import sys
12import manim as m
23
34from git_sim .git_sim_base_command import GitSimBaseCommand
45from git_sim .settings import settings
56
67
78class Tag (GitSimBaseCommand ):
8- def __init__ (self , name : str ):
9+ def __init__ (self , name : str , commit : str , d : bool ):
910 super ().__init__ ()
1011 self .name = name
11- self .cmd += f"{ type (self ).__name__ .lower ()} { self .name } "
12+ self .commit = commit
13+ self .d = d
14+
15+ if self .d :
16+ if self .commit :
17+ print (
18+ "git-sim error: can't specify commit '"
19+ + self .commit
20+ + "', when using -d flag"
21+ )
22+ sys .exit (1 )
23+ if self .name not in self .repo .tags :
24+ print (
25+ "git-sim error: can't delete tag '"
26+ + self .name
27+ + "', tag doesn't exist"
28+ )
29+ sys .exit (1 )
30+ else :
31+ if self .name in self .repo .tags :
32+ print (
33+ "git-sim error: can't create tag '"
34+ + self .name
35+ + "', tag already exists"
36+ )
37+ sys .exit (1 )
38+
39+ self .cmd += f"{ type (self ).__name__ .lower ()} { ' -d' if self .d else '' } { ' self.commit' if self .commit else '' } { self .name } "
1240
1341 def construct (self ):
1442 if not settings .stdout and not settings .output_only_path and not settings .quiet :
@@ -19,32 +47,56 @@ def construct(self):
1947 self .parse_all ()
2048 self .center_frame_on_commit (self .get_commit ())
2149
22- tagText = m .Text (
23- self .name ,
24- font = self .font ,
25- font_size = 20 ,
26- color = self .fontColor ,
27- )
28- tagRec = m .Rectangle (
29- color = m .YELLOW ,
30- fill_color = m .YELLOW ,
31- fill_opacity = 0.25 ,
32- height = 0.4 ,
33- width = tagText .width + 0.25 ,
34- )
35-
36- tagRec .next_to (self .topref , m .UP )
37- tagText .move_to (tagRec .get_center ())
38-
39- fulltag = m .VGroup (tagRec , tagText )
40-
41- if settings .animate :
42- self .play (m .Create (fulltag ), run_time = 1 / settings .speed )
43- else :
44- self .add (fulltag )
50+ if not self .d :
51+ tagText = m .Text (
52+ self .name ,
53+ font = self .font ,
54+ font_size = 20 ,
55+ color = self .fontColor ,
56+ )
57+ tagRec = m .Rectangle (
58+ color = m .YELLOW ,
59+ fill_color = m .YELLOW ,
60+ fill_opacity = 0.25 ,
61+ height = 0.4 ,
62+ width = tagText .width + 0.25 ,
63+ )
64+
65+ if self .commit :
66+ commit = self .repo .commit (self .commit )
67+ try :
68+ tagRec .next_to (self .drawnRefsByCommit [commit .hexsha ][- 1 ], m .UP )
69+ except KeyError :
70+ try :
71+ tagRec .next_to (self .drawnCommitIds [commit .hexsha ], m .UP )
72+ except KeyError :
73+ print (
74+ "git-sim error: can't create tag '"
75+ + self .name
76+ + "' on commit '"
77+ + self .commit
78+ + "', commit not in frame"
79+ )
80+ sys .exit (1 )
81+ else :
82+ tagRec .next_to (self .topref , m .UP )
83+ tagText .move_to (tagRec .get_center ())
4584
46- self .toFadeOut .add (tagRec , tagText )
47- self .drawnRefs [self .name ] = fulltag
85+ fulltag = m .VGroup (tagRec , tagText )
86+
87+ if settings .animate :
88+ self .play (m .Create (fulltag ), run_time = 1 / settings .speed )
89+ else :
90+ self .add (fulltag )
91+
92+ self .toFadeOut .add (tagRec , tagText )
93+ self .drawnRefs [self .name ] = fulltag
94+ else :
95+ fulltag = self .drawnRefs [self .name ]
96+ if settings .animate :
97+ self .play (m .Uncreate (fulltag ), run_time = 1 / settings .speed )
98+ else :
99+ self .remove (fulltag )
48100
49101 self .recenter_frame ()
50102 self .scale_frame ()
0 commit comments