@@ -142,7 +142,7 @@ func (self *RemotesController) enter(remote *models.Remote) error {
142142 return nil
143143}
144144
145- func (self * RemotesController ) addRemoteHelper (remoteName string , remoteUrl string ) error {
145+ func (self * RemotesController ) addRemoteHelper (remoteName string , remoteUrl string , branchToCheckout string ) error {
146146 self .c .LogAction (self .c .Tr .Actions .AddRemote )
147147 if err := self .c .Git ().Remote .AddRemote (remoteName , remoteUrl ); err != nil {
148148 return err
@@ -165,7 +165,7 @@ func (self *RemotesController) addRemoteHelper(remoteName string, remoteUrl stri
165165 }
166166
167167 // Fetch the new remote
168- return self .fetch (self .c .Contexts ().Remotes .GetSelected ())
168+ return self .fetchAndCheckout (self .c .Contexts ().Remotes .GetSelected (), branchToCheckout )
169169}
170170
171171func (self * RemotesController ) add () error {
@@ -175,7 +175,7 @@ func (self *RemotesController) add() error {
175175 self .c .Prompt (types.PromptOpts {
176176 Title : self .c .Tr .NewRemoteUrl ,
177177 HandleConfirm : func (remoteUrl string ) error {
178- return self .addRemoteHelper (remoteName , remoteUrl )
178+ return self .addRemoteHelper (remoteName , remoteUrl , "" )
179179 },
180180 })
181181
@@ -223,6 +223,14 @@ func (self *RemotesController) addFork(baseRemote *models.Remote) error {
223223 self .c .Prompt (types.PromptOpts {
224224 Title : self .c .Tr .AddForkRemoteUsername ,
225225 HandleConfirm : func (forkUsername string ) error {
226+ branchToCheckout := ""
227+
228+ parts := strings .SplitN (forkUsername , ":" , 2 )
229+ if len (parts ) == 2 {
230+ forkUsername = parts [0 ]
231+ branchToCheckout = parts [1 ]
232+ }
233+
226234 self .c .Prompt (types.PromptOpts {
227235 Title : self .c .Tr .NewRemoteName ,
228236 InitialContent : forkUsername ,
@@ -236,7 +244,7 @@ func (self *RemotesController) addFork(baseRemote *models.Remote) error {
236244 return err
237245 }
238246
239- return self .addRemoteHelper (remoteName , remoteUrl )
247+ return self .addRemoteHelper (remoteName , remoteUrl , branchToCheckout )
240248 },
241249 })
242250
@@ -318,16 +326,22 @@ func (self *RemotesController) edit(remote *models.Remote) error {
318326}
319327
320328func (self * RemotesController ) fetch (remote * models.Remote ) error {
329+ return self .fetchAndCheckout (remote , "" )
330+ }
331+
332+ func (self * RemotesController ) fetchAndCheckout (remote * models.Remote , branchName string ) error {
321333 return self .c .WithInlineStatus (remote , types .ItemOperationFetching , context .REMOTES_CONTEXT_KEY , func (task gocui.Task ) error {
322334 err := self .c .Git ().Sync .FetchRemote (task , remote .Name )
323335 if err != nil {
324336 return err
325337 }
326-
338+ if branchName != "" {
339+ err = self .c .Git ().Branch .New (branchName , remote .Name + "/" + branchName )
340+ }
327341 self .c .Refresh (types.RefreshOptions {
328342 Scope : []types.RefreshableView {types .BRANCHES , types .REMOTES },
329343 Mode : types .ASYNC ,
330344 })
331- return nil
345+ return err
332346 })
333347}
0 commit comments