diff --git a/rhodecode/lib/vcs/backends/git/repository.py b/rhodecode/lib/vcs/backends/git/repository.py --- a/rhodecode/lib/vcs/backends/git/repository.py +++ b/rhodecode/lib/vcs/backends/git/repository.py @@ -500,6 +500,17 @@ class GitRepository(BaseRepository): # If error occurs run_git_command raises RepositoryError already self.run_git_command(cmd) + def fetch(self, url): + """ + Tries to pull changes from external location. + """ + url = self._get_url(url) + cmd = ['fetch'] + cmd.append(url) + cmd = ' '.join(cmd) + # If error occurs run_git_command raises RepositoryError already + self.run_git_command(cmd) + @LazyProperty def workdir(self): """ diff --git a/rhodecode/model/scm.py b/rhodecode/model/scm.py --- a/rhodecode/model/scm.py +++ b/rhodecode/model/scm.py @@ -360,8 +360,10 @@ class ScmModel(BaseModel): # inject ui extra param to log this action via push logger for k, v in extras.items(): repo._repo.ui.setconfig('rhodecode_extras', k, v) - - repo.pull(clone_uri) + if repo.alias == 'git': + repo.fetch(clone_uri) + else: + repo.pull(clone_uri) self.mark_for_invalidation(repo_name) except: log.error(traceback.format_exc())