// ĠCopyright Ġ 2 0 0 0 - 2 0 2 0 ĠJetBrains Ġs . r . o . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ package Ġorg . jetbrains . plugins . github . util Ċ Ċ import Ġcom . intellij . openapi . components . Service Ċ import Ġcom . intellij . openapi . components . service Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . openapi . vfs . Virtual File Ċ import Ġgit 4 idea . Git Util Ċ import Ġgit 4 idea . repo . Git Remote Ċ import Ġgit 4 idea . repo . Git Repository Ċ import Ġorg . jetbrains . plugins . github . api . GH Repository Path Ċ import Ġorg . jetbrains . plugins . github . api . Github Server Path Ċ Ċ /** Ċ Ġ* ĠUtilities Ġfor ĠGithub - Git Ġinteractions Ċ Ġ*/ Ċ @ Service Ċ class ĠGithub Git Helper Ġ{ ĊĠ Ġfun Ġget Remote Url ( server : ĠGithub Server Path , Ġrepo Path : ĠGH Repository Path ): ĠString Ġ{ ĊĠĠĠ Ġreturn Ġget Remote Url ( server , Ġrepo Path . owner , Ġrepo Path . repository ) ĊĠ Ġ} ĊĊĠ Ġfun Ġget Remote Url ( server : ĠGithub Server Path , Ġuser : ĠString , Ġrepo : ĠString ): ĠString Ġ{ ĊĠĠĠ Ġreturn Ġif Ġ( Github Settings . getInstance (). is Clone Git Using Ssh ) Ġ{ ĊĠĠĠĠĠ Ġ" git @ ${ server . host }:${ server . suffix ?. substring ( 1 ). or Empty () }/ $ user /$ repo . git " ĊĠĠĠ Ġ} ĊĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠ Ġ" https ://${ server . host }${ server . suffix . or Empty () }/ $ user /$ repo . git " ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġfind Remote ( repository : ĠGit Repository , Ġhttp Url : ĠString ?, Ġssh Url : ĠString ?): ĠGit Remote ? Ġ= ĊĠĠĠ Ġrepository . rem otes . find Ġ{ ĊĠĠĠĠĠ Ġit . first Url Ġ!= Ġnull Ġ&& Ġ( it . first Url Ġ== Ġhttp Url Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . first Url Ġ== Ġhttp Url Ġ+ ĠGit Util . DOT _ GIT Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . first Url Ġ== Ġssh Url Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . first Url Ġ== Ġssh Url Ġ+ ĠGit Util . DOT _ GIT ) ĊĠĠĠ Ġ} ĊĊĠ Ġfun Ġfind Local Branch ( repository : ĠGit Repository , Ġpr Remote : ĠGit Remote , Ġis Fork : ĠBoolean , Ġpossible Branch Name : ĠString ?): ĠString ? Ġ{ ĊĠĠĠ Ġval Ġlocal Branches With Tracking Ġ= ĊĠĠĠĠĠ Ġwith ( repository . branches ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Fork ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġlocal Branches . filter Ġ{ Ġit . find Tracked Branch ( repository )?. remote Ġ== Ġpr Remote Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġpr Remote Branch Ġ= Ġremote Branches . find Ġ{ Ġit . name For Remote Operations Ġ== Ġpossible Branch Name Ġ} Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠ Ġlocal Branches . filter Ġ{ Ġit . find Tracked Branch ( repository ) Ġ== Ġpr Remote Branch Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġlocal Branches With Tracking . find Ġ{ Ġit . name Ġ== Ġpossible Branch Name Ġ} ?. name ĊĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif ĠPR Ġwas Ġmade Ġnot Ġfrom Ġfork Ġwe Ġcan Ġassume Ġthat Ġthe Ġfirst Ġlocal Ġbranch Ġwith Ġtracking Ġto Ġthat Ġfork Ġis Ġa Ġgood Ġcandidate Ġof Ġlocal Ġbranch Ġfor Ġthat ĠPR . ĊĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġif Ġ(! is Fork ) Ġlocal Branches With Tracking . first OrNull ()?. name Ġelse Ġnull ĊĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġfind Git Repository ( project : ĠProject , Ġfile : ĠVirtual File ? Ġ= Ġnull ): ĠGit Repository ? Ġ{ ĊĠĠĠĠĠ Ġval Ġmanager Ġ= ĠGit Util . getRepository Manager ( project ) ĊĠĠĠĠĠ Ġval Ġrepositories Ġ= Ġmanager . repositories ĊĠĠĠĠĠ Ġif Ġ( repositories . size Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġif Ġ( repositories . size Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrepositories [ 0 ] ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġif Ġ( file Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrepository Ġ= Ġmanager . getRepository For File Quick ( file ) ĊĠĠĠĠĠĠĠ Ġif Ġ( repository Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġreturn Ġrepository ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġreturn Ġmanager . getRepository For File Quick ( project . base Dir ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun ĠgetInstance (): ĠGithub Git Helper Ġ{ ĊĠĠĠĠĠ Ġreturn Ġservice () ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ }