@@ -49,7 +49,8 @@ defmodule GitWork.Commands.Clone do
4949 :ok <- fix_head ( bare_dir , branch ) ,
5050 :ok <- add_main_worktree ( dir , branch ) ,
5151 :ok <- configure_bare ( bare_dir ) ,
52- :ok <- fetch_refs ( bare_dir ) do
52+ :ok <- fetch_refs ( bare_dir ) ,
53+ :ok <- ensure_upstream ( dir , branch ) do
5354 { :ok , Path . join ( dir , branch ) }
5455 end
5556 end
@@ -133,4 +134,33 @@ defmodule GitWork.Commands.Clone do
133134 { :error , msg } -> { :error , "worktree add failed: #{ msg } " }
134135 end
135136 end
137+
138+ defp ensure_upstream ( dir , branch ) do
139+ worktree_dir = Path . join ( dir , branch )
140+
141+ case Git . cmd ( [ "rev-parse" , "--abbrev-ref" , "--symbolic-full-name" , "@{u}" ] , cd: worktree_dir ) do
142+ { :ok , _ } ->
143+ :ok
144+
145+ { :error , _ } ->
146+ case Git . cmd ( [ "show-ref" , "--verify" , "--quiet" , "refs/remotes/origin/#{ branch } " ] ,
147+ cd: worktree_dir
148+ ) do
149+ { :ok , _ } ->
150+ case Git . cmd ( [ "branch" , "--set-upstream-to=origin/#{ branch } " , branch ] ,
151+ cd: worktree_dir
152+ ) do
153+ { :ok , _ } ->
154+ :ok
155+
156+ { :error , msg } ->
157+ IO . write ( :stderr , "warning: failed to set upstream for #{ branch } : #{ msg } \n " )
158+ :ok
159+ end
160+
161+ { :error , _ } ->
162+ :ok
163+ end
164+ end
165+ end
136166end
0 commit comments