summaryrefslogtreecommitdiffstats
path: root/models/repo_branch.go
diff options
context:
space:
mode:
authorzeripath <art27@cantab.net>2019-02-12 13:07:31 +0000
committerLauris BH <lauris@nix.lv>2019-02-12 15:07:31 +0200
commit296814e887f9bcf0b1d44552deaf40e89e08ab50 (patch)
tree03a2ade3a2ac60df1670c78ec02e7fa529143006 /models/repo_branch.go
parentfc038caa69815c1be930e3d31a8bc71afbc9714f (diff)
downloadgitea-296814e887f9bcf0b1d44552deaf40e89e08ab50.tar.gz
gitea-296814e887f9bcf0b1d44552deaf40e89e08ab50.zip
Refactor editor upload, update and delete to use git plumbing and add LFS support (#5702)
* Use git plumbing for upload: #5621 repo_editor.go: UploadRepoFile * Use git plumbing for upload: #5621 repo_editor.go: GetDiffPreview * Use git plumbing for upload: #5621 repo_editor.go: DeleteRepoFile * Use git plumbing for upload: #5621 repo_editor.go: UploadRepoFiles * Move branch checkout functions out of repo_editor.go as they are no longer used there * BUGFIX: The default permissions should be 100644 This is a change from the previous code but is more in keeping with the default behaviour of git. Signed-off-by: Andrew Thornton <art27@cantab.net> * Standardise cleanUploadFilename to more closely match git See verify_path in: https://github.com/git/git/blob/7f4e64169352e03476b0ea64e7e2973669e491a2/read-cache.c#L951 Signed-off-by: Andrew Thornton <art27@cantab.net> * Redirect on bad paths Signed-off-by: Andrew Thornton <art27@cantab.net> * Refactor to move the uploading functions out to a module Signed-off-by: Andrew Thornton <art27@cantab.net> * Add LFS support Signed-off-by: Andrew Thornton <art27@cantab.net> * Update upload.go attribution header Upload.go is essentially the remnants of repo_editor.go. The remaining code is essentially unchanged from the Gogs code, hence the Gogs attribution. * Delete upload files after session committed * Ensure that GIT_AUTHOR_NAME etc. are valid for git see #5774 Signed-off-by: Andrew Thornton <art27@cantab.net> * Add in test cases per @lafriks comment * Add space between gitea and github imports Signed-off-by: Andrew Thornton <art27@cantab.net> * more examples in TestCleanUploadName Signed-off-by: Andrew Thornton <art27@cantab.net> * fix formatting Signed-off-by: Andrew Thornton <art27@cantab.net> * Set the SSH_ORIGINAL_COMMAND to ensure hooks are run Signed-off-by: Andrew Thornton <art27@cantab.net> * Switch off SSH_ORIGINAL_COMMAND Signed-off-by: Andrew Thornton <art27@cantab.net>
Diffstat (limited to 'models/repo_branch.go')
-rw-r--r--models/repo_branch.go40
1 files changed, 40 insertions, 0 deletions
diff --git a/models/repo_branch.go b/models/repo_branch.go
index cd12742ba1..88417cbd36 100644
--- a/models/repo_branch.go
+++ b/models/repo_branch.go
@@ -14,6 +14,46 @@ import (
"github.com/Unknwon/com"
)
+// discardLocalRepoBranchChanges discards local commits/changes of
+// given branch to make sure it is even to remote branch.
+func discardLocalRepoBranchChanges(localPath, branch string) error {
+ if !com.IsExist(localPath) {
+ return nil
+ }
+ // No need to check if nothing in the repository.
+ if !git.IsBranchExist(localPath, branch) {
+ return nil
+ }
+
+ refName := "origin/" + branch
+ if err := git.ResetHEAD(localPath, true, refName); err != nil {
+ return fmt.Errorf("git reset --hard %s: %v", refName, err)
+ }
+ return nil
+}
+
+// DiscardLocalRepoBranchChanges discards the local repository branch changes
+func (repo *Repository) DiscardLocalRepoBranchChanges(branch string) error {
+ return discardLocalRepoBranchChanges(repo.LocalCopyPath(), branch)
+}
+
+// checkoutNewBranch checks out to a new branch from the a branch name.
+func checkoutNewBranch(repoPath, localPath, oldBranch, newBranch string) error {
+ if err := git.Checkout(localPath, git.CheckoutOptions{
+ Timeout: time.Duration(setting.Git.Timeout.Pull) * time.Second,
+ Branch: newBranch,
+ OldBranch: oldBranch,
+ }); err != nil {
+ return fmt.Errorf("git checkout -b %s %s: %v", newBranch, oldBranch, err)
+ }
+ return nil
+}
+
+// CheckoutNewBranch checks out a new branch
+func (repo *Repository) CheckoutNewBranch(oldBranch, newBranch string) error {
+ return checkoutNewBranch(repo.RepoPath(), repo.LocalCopyPath(), oldBranch, newBranch)
+}
+
// Branch holds the branch information
type Branch struct {
Path string