aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore3
-rw-r--r--README.md3
-rw-r--r--models/repo.go49
-rw-r--r--serve.go153
-rw-r--r--ttt0
-rw-r--r--update.go102
6 files changed, 112 insertions, 198 deletions
diff --git a/.gitignore b/.gitignore
index eab518bb..cd9109b8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
gogs
@@ -13,6 +14,8 @@ data/
*.iml
public/img/avatar/
+=======
+>>>>>>> b4db9f67548a41922f1b337daf9c9d2b975b55c4
# Compiled Object files, Static and Dynamic libs (Shared Objects)
*.o
*.a
diff --git a/README.md b/README.md
index debe834b..c708bf55 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,3 @@
-Gogs - Go Git Service [![wercker status](https://app.wercker.com/status/ad0bdb0bc450ac6f09bc56b9640a50aa/s/ "wercker status")](https://app.wercker.com/project/bykey/ad0bdb0bc450ac6f09bc56b9640a50aa) [![Build Status](https://drone.io/github.com/gogits/gogs/status.png)](https://drone.io/github.com/gogits/gogs/latest)
-=====================
-
Gogs(Go Git Service) is a Self Hosted Git Service in the Go Programming Language.
![Demo](http://gowalker.org/public/gogs_demo.gif)
diff --git a/models/repo.go b/models/repo.go
index 868a5dc2..477f9472 100644
--- a/models/repo.go
+++ b/models/repo.go
@@ -244,29 +244,16 @@ func initRepository(f string, user *User, repo *Repository, initReadme bool, rep
return err
}
- /*
- // hook/post-update
- pu, err := os.OpenFile(filepath.Join(repoPath, "hooks", "post-update"), os.O_CREATE|os.O_WRONLY, 0777)
- if err != nil {
- return err
- }
- defer pu.Close()
- // TODO: Windows .bat
- if _, err = pu.WriteString(fmt.Sprintf("#!/usr/bin/env bash\n%s update\n", appPath)); err != nil {
- return err
- }
-
- // hook/post-update
- pu2, err := os.OpenFile(filepath.Join(repoPath, "hooks", "post-receive"), os.O_CREATE|os.O_WRONLY, 0777)
- if err != nil {
- return err
- }
- defer pu2.Close()
- // TODO: Windows .bat
- if _, err = pu2.WriteString("#!/usr/bin/env bash\ngit update-server-info\n"); err != nil {
- return err
- }
- */
+ // hook/post-update
+ pu, err := os.OpenFile(filepath.Join(repoPath, "hooks", "update"), os.O_CREATE|os.O_WRONLY, 0777)
+ if err != nil {
+ return err
+ }
+ defer pu.Close()
+ // TODO: Windows .bat
+ if _, err = pu.WriteString(fmt.Sprintf("#!/usr/bin/env bash\n%s update $1 $2 $3\n", appPath)); err != nil {
+ return err
+ }
// Initialize repository according to user's choice.
fileName := map[string]string{}
@@ -526,22 +513,6 @@ func IsWatching(userId, repoId int64) bool {
return has
}
-func StarReposiory(user *User, repoName string) error {
- return nil
-}
-
-func UnStarRepository() {
-
-}
-
-func WatchRepository() {
-
-}
-
-func UnWatchRepository() {
-
-}
-
func ForkRepository(reposName string, userId int64) {
}
diff --git a/serve.go b/serve.go
index 25a34efb..96f03e72 100644
--- a/serve.go
+++ b/serve.go
@@ -5,21 +5,18 @@
package main
import (
- "bytes"
- "container/list"
+ //"container/list"
"fmt"
- "io"
"os"
"os/exec"
"path"
"strconv"
"strings"
- "time"
"github.com/codegangsta/cli"
"github.com/gogits/gogs/modules/log"
- "github.com/gogits/git"
+ //"github.com/gogits/git"
"github.com/gogits/gogs/models"
"github.com/gogits/gogs/modules/base"
)
@@ -125,11 +122,11 @@ func runServ(k *cli.Context) {
isWrite := In(verb, COMMANDS_WRITE)
isRead := In(verb, COMMANDS_READONLY)
- repo, err := models.GetRepositoryByName(user.Id, repoName)
- var isExist bool = true
+ /*//repo, err := models.GetRepositoryByName(user.Id, repoName)
+ //var isExist bool = true
if err != nil {
if err == models.ErrRepoNotExist {
- isExist = false
+ //isExist = false
if isRead {
println("Repository", user.Name+"/"+repoName, "is not exist")
log.Error("Repository " + user.Name + "/" + repoName + " is not exist")
@@ -140,7 +137,7 @@ func runServ(k *cli.Context) {
log.Error("Get repository error: " + err.Error())
return
}
- }
+ }*/
// access check
switch {
@@ -182,41 +179,14 @@ func runServ(k *cli.Context) {
return
}
- var rep *git.Repository
- repoPath := models.RepoPath(user.Name, repoName)
- if !isExist {
- if isWrite {
- _, err = models.CreateRepository(user, repoName, "", "", "", false, true)
- if err != nil {
- println("Create repository failed")
- log.Error("Create repository failed: " + err.Error())
- return
- }
- }
- }
-
- rep, err = git.OpenRepository(repoPath)
- if err != nil {
- println("OpenRepository failed:", err.Error())
- log.Error("OpenRepository failed: " + err.Error())
- return
- }
-
- refs, err := rep.AllReferencesMap()
- if err != nil {
- println("Get All References failed:", err.Error())
- log.Error("Get All References failed: " + err.Error())
- return
- }
+ // for update use
+ os.Setenv("userName", user.Name)
+ os.Setenv("userId", strconv.Itoa(int(user.Id)))
+ os.Setenv("repoName", repoName)
gitcmd := exec.Command(verb, rRepo)
gitcmd.Dir = base.RepoRootPath
-
- var s string
- b := bytes.NewBufferString(s)
-
- gitcmd.Stdout = io.MultiWriter(os.Stdout, b)
- //gitcmd.Stdin = io.MultiReader(os.Stdin, b)
+ gitcmd.Stdout = os.Stdout
gitcmd.Stdin = os.Stdin
gitcmd.Stderr = os.Stderr
@@ -225,105 +195,4 @@ func runServ(k *cli.Context) {
log.Error("execute command error: " + err.Error())
return
}
-
- if isRead {
- return
- }
-
- time.Sleep(time.Second)
-
- // find push reference name
- var t = "ok refs/heads/"
- var i int
- var refname string
- for {
- l, err := b.ReadString('\n')
- if err != nil {
- break
- }
- i = i + 1
- l = l[:len(l)-1]
- idx := strings.Index(l, t)
- if idx > 0 {
- refname = l[idx+len(t):]
- }
- }
- if refname == "" {
- println("Not found any reference name:", b.String())
- log.Error("Not found any reference name: " + b.String())
- return
- }
-
- var ref *git.Reference
- var ok bool
- var l *list.List
- //log.Info("----", refname, "-----")
- if ref, ok = refs[refname]; !ok {
- // for new branch
- refs, err = rep.AllReferencesMap()
- if err != nil {
- println("Get All References failed:", err.Error())
- log.Error("Get All References failed: " + err.Error())
- return
- }
- if ref, ok = refs[refname]; !ok {
- log.Error("unknow reference name -", refname, "-", b.String())
- return
- }
- l, err = ref.AllCommits()
- if err != nil {
- println("Get All Commits failed:", err.Error())
- log.Error("Get All Commits failed: " + err.Error())
- return
- }
- } else {
- //log.Info("----", ref, "-----")
- var last *git.Commit
- //log.Info("00000", ref.Oid.String())
- last, err = ref.LastCommit()
- if err != nil {
- println("Get last commit failed:", err.Error())
- log.Error("Get last commit failed: " + err.Error())
- return
- }
-
- ref2, err := rep.LookupReference(ref.Name)
- if err != nil {
- println("look up reference failed:", err.Error())
- log.Error("look up reference failed: " + err.Error())
- return
- }
-
- //log.Info("11111", ref2.Oid.String())
- before, err := ref2.LastCommit()
- if err != nil {
- println("Get last commit failed:", err.Error())
- log.Error("Get last commit failed: " + err.Error())
- return
- }
- //log.Info("----", before.Id(), "-----", last.Id())
- l = ref.CommitsBetween(before, last)
- }
-
- commits := make([][]string, 0)
- var maxCommits = 3
- for e := l.Front(); e != nil; e = e.Next() {
- commit := e.Value.(*git.Commit)
- commits = append(commits, []string{commit.Id().String(), commit.Message()})
- if len(commits) >= maxCommits {
- break
- }
- }
-
- if err = models.CommitRepoAction(user.Id, user.Name,
- repo.Id, repoName, refname, &base.PushCommits{l.Len(), commits}); err != nil {
- log.Error("runUpdate.models.CommitRepoAction: %v", err, commits)
- } else {
- c := exec.Command("git", "update-server-info")
- c.Dir = repoPath
- err := c.Run()
- if err != nil {
- log.Error("update-server-info: %v", err)
- }
- }
}
diff --git a/ttt b/ttt
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/ttt
diff --git a/update.go b/update.go
index 915e0465..5c6d5b28 100644
--- a/update.go
+++ b/update.go
@@ -4,9 +4,20 @@
package main
-import "github.com/codegangsta/cli"
+import (
+"os"
+"os/exec"
+"strings"
+"strconv"
+"container/list"
+"github.com/codegangsta/cli"
//"github.com/gogits/gogs/modules/log"
+"github.com/gogits/gogs/models"
+"github.com/gogits/gogs/modules/base"
+"github.com/qiniu/log"
+"github.com/gogits/git"
+)
var CmdUpdate = cli.Command{
Name: "update",
@@ -18,16 +29,39 @@ gogs serv provide access auth for repositories`,
}
// for command: ./gogs update
-func runUpdate(*cli.Context) {
- /*w, _ := os.Create("update.log")
+func runUpdate(c *cli.Context) {
+ base.NewConfigContext()
+ models.LoadModelsConfig()
+ models.NewEngine()
+
+ w, _ := os.Create("update.log")
+ defer w.Close()
+
log.SetOutput(w)
+ args := c.Args()
+ if len(args) != 3 {
+ log.Error("received less 3 parameters")
+ return
+ }
+
+ refName := args[0]
+ oldCommitId := args[1]
+ newCommitId := args[2]
+
userName := os.Getenv("userName")
userId := os.Getenv("userId")
- repoId := os.Getenv("repoId")
+ //repoId := os.Getenv("repoId")
repoName := os.Getenv("repoName")
+ log.Info("username", userName)
+ log.Info("repoName", repoName)
f := models.RepoPath(userName, repoName)
+ log.Info("f", f)
+
+ gitUpdate := exec.Command("git", "update-server-info")
+ gitUpdate.Dir = f
+ gitUpdate.Run()
repo, err := git.OpenRepository(f)
if err != nil {
@@ -35,13 +69,45 @@ func runUpdate(*cli.Context) {
return
}
- ref, err := repo.LookupReference("HEAD")
+ ref, err := repo.LookupReference(refName)
+ if err != nil {
+ log.Error("runUpdate.Ref repoId: %v", err)
+ return
+ }
+
+ oldOid, err := git.NewOidFromString(oldCommitId)
+ if err != nil {
+ log.Error("runUpdate.Ref repoId: %v", err)
+ return
+ }
+
+ oldCommit, err := repo.LookupCommit(oldOid)
+ if err != nil {
+ log.Error("runUpdate.Ref repoId: %v", err)
+ return
+ }
+
+ newOid, err := git.NewOidFromString(newCommitId)
+ if err != nil {
+ log.Error("runUpdate.Ref repoId: %v", err)
+ return
+ }
+
+ newCommit, err := repo.LookupCommit(newOid)
if err != nil {
log.Error("runUpdate.Ref repoId: %v", err)
return
}
- lastCommit, err := repo.LookupCommit(ref.Oid)
+ var l *list.List
+ // if a new branch
+ if strings.HasPrefix(oldCommitId, "0000000") {
+ l, err = ref.AllCommits()
+
+ } else {
+ l = ref.CommitsBetween(newCommit, oldCommit)
+ }
+
if err != nil {
log.Error("runUpdate.Commit repoId: %v", err)
return
@@ -52,18 +118,26 @@ func runUpdate(*cli.Context) {
log.Error("runUpdate.Parse userId: %v", err)
return
}
- sRepoId, err := strconv.Atoi(repoId)
+
+ repos, err := models.GetRepositoryByName(int64(sUserId), repoName)
if err != nil {
- log.Error("runUpdate.Parse repoId: %v", err)
+ log.Error("runUpdate.GetRepositoryByName userId: %v", err)
return
}
+
commits := make([][]string, 0)
- commits = append(commits, []string{lastCommit.Id().String(), lastCommit.Message()})
+ var maxCommits = 3
+ for e := l.Front(); e != nil; e = e.Next() {
+ commit := e.Value.(*git.Commit)
+ commits = append(commits, []string{commit.Id().String(), commit.Message()})
+ if len(commits) >= maxCommits {
+ break
+ }
+ }
+
+ //commits = append(commits, []string{lastCommit.Id().String(), lastCommit.Message()})
if err = models.CommitRepoAction(int64(sUserId), userName,
- int64(sRepoId), repoName, commits); err != nil {
+ repos.Id, repoName, git.BranchName(refName), &base.PushCommits{l.Len(), commits}); err != nil {
log.Error("runUpdate.models.CommitRepoAction: %v", err)
- } else {
- l := exec.Command("exec", "git", "update-server-info")
- l.Run()
- }*/
+ }
}