MCPcopy Index your code
hub / github.com/initialcommit-com/git-sim / construct

Method construct

src/git_sim/push.py:34–119  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

32 self.cmd += f"{type(self).__name__.lower()} {'--set-upstream ' if self.set_upstream else ''}{self.remote if self.remote else ''} {self.branch if self.branch else ''}"
33
34 def construct(self):
35 if not settings.stdout and not settings.output_only_path and not settings.quiet:
36 print(f"{settings.INFO_STRING} {self.cmd}")
37
38 self.show_intro()
39
40 # Configure paths to make local clone to run networked commands in
41 git_root = self.repo.git.rev_parse("--show-toplevel")
42 repo_name = os.path.basename(self.repo.working_dir)
43 new_dir = os.path.join(tempfile.gettempdir(), "git_sim", repo_name)
44 new_dir2 = os.path.join(tempfile.gettempdir(), "git_sim", repo_name + "2")
45
46 # Save remotes
47 orig_remotes = self.repo.remotes
48
49 # Create local clone of local repo
50 self.repo = git.Repo.clone_from(git_root, new_dir, no_hardlinks=True)
51 if self.remote:
52 for r in orig_remotes:
53 if self.remote == r.name:
54 remote_url = r.url
55 break
56 else:
57 remote_url = orig_remotes[0].url
58
59 # Create local clone of remote repo to simulate push to so we don't touch the real remote
60 self.remote_repo = git.Repo.clone_from(
61 remote_url, new_dir2, no_hardlinks=True, bare=True
62 )
63
64 # Reset local clone remote to the local clone of remote repo
65 if self.remote:
66 for r in self.repo.remotes:
67 if self.remote == r.name:
68 r.set_url(new_dir2)
69 else:
70 self.repo.remotes[0].set_url(new_dir2)
71
72 # Push the local clone into the local clone of the remote repo
73 push_result = 0
74 self.orig_repo = None
75 try:
76 self.repo.git.push(self.remote, self.branch)
77 # If push fails...
78 except git.GitCommandError as e:
79 if "rejected" in e.stderr and ("fetch first" in e.stderr):
80 push_result = 1
81 self.orig_repo = self.repo
82 self.repo = self.remote_repo
83 settings.color_by = ColorByOptions.NOTLOCAL1
84 elif "rejected" in e.stderr and ("non-fast-forward" in e.stderr):
85 push_result = 2
86 self.orig_repo = self.repo
87 self.repo = self.remote_repo
88 settings.color_by = ColorByOptions.NOTLOCAL2
89 else:
90 print(f"git-sim error: git push failed: {e.stderr}")
91 return

Callers

nothing calls this directly

Calls 10

failed_pushMethod · 0.95
show_introMethod · 0.80
get_commitMethod · 0.80
parse_commitsMethod · 0.80
recenter_frameMethod · 0.80
scale_frameMethod · 0.80
color_byMethod · 0.80
show_command_as_titleMethod · 0.80
fadeoutMethod · 0.80
show_outroMethod · 0.80

Tested by

no test coverage detected