From 1201c6a9b4897736650a4b416451aa521024b899 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Sun, 23 Mar 2014 16:31:13 +0800 Subject: [PATCH 1/6] bug fixed & more commits for push --- models/action.go | 2 +- models/models.go | 2 +- serve.go | 157 +++++++++++++++++++++++++++++++++++++++-------- update.go | 22 ++++--- 4 files changed, 145 insertions(+), 38 deletions(-) diff --git a/models/action.go b/models/action.go index 107d4b1057..d338da24ba 100644 --- a/models/action.go +++ b/models/action.go @@ -28,7 +28,7 @@ type Action struct { ActUserName string // Action user name. RepoId int64 RepoName string - Content string + Content string `xorm:"varchar(1000)"` Created time.Time `xorm:"created"` } diff --git a/models/models.go b/models/models.go index 8713ff2896..7f5f626f5e 100644 --- a/models/models.go +++ b/models/models.go @@ -91,5 +91,5 @@ func GetStatistic() (stats Statistic) { stats.Counter.Watch, _ = orm.Count(new(Watch)) stats.Counter.Action, _ = orm.Count(new(Action)) stats.Counter.Access, _ = orm.Count(new(Access)) - return stats + return } diff --git a/serve.go b/serve.go index 3ce8f9046c..b786c54356 100644 --- a/serve.go +++ b/serve.go @@ -5,14 +5,19 @@ package main import ( + "bytes" + "container/list" "fmt" + "io" "os" "os/exec" "strconv" "strings" "github.com/codegangsta/cli" + "github.com/qiniu/log" + "github.com/gogits/git" "github.com/gogits/gogs/models" "github.com/gogits/gogs/modules/base" ) @@ -39,12 +44,27 @@ gogs serv provide access auth for repositories`, Flags: []cli.Flag{}, } +func parseCmd(cmd string) (string, string) { + ss := strings.SplitN(cmd, " ", 2) + if len(ss) != 2 { + return "", "" + } + + verb, args := ss[0], ss[1] + if verb == "git" { + ss = strings.SplitN(args, " ", 2) + args = ss[1] + verb = fmt.Sprintf("%s %s", verb, ss[0]) + } + return verb, args +} + func In(b string, sl map[string]int) bool { _, e := sl[b] return e } -func runServ(*cli.Context) { +func runServ(k *cli.Context) { base.NewConfigContext() models.LoadModelsConfig() models.NewEngine() @@ -84,15 +104,20 @@ func runServ(*cli.Context) { repoName = repoName[:len(repoName)-4] } - os.Setenv("userName", user.Name) - os.Setenv("userId", strconv.Itoa(int(user.Id))) + //os.Setenv("userName", user.Name) + //os.Setenv("userId", strconv.Itoa(int(user.Id))) repo, err := models.GetRepositoryByName(user, repoName) + var isExist bool = true if err != nil { - println("Unavilable repository", err) - return + if err == models.ErrRepoNotExist { + isExist = false + } else { + println("Unavilable repository", err) + return + } } - os.Setenv("repoId", strconv.Itoa(int(repo.Id))) - os.Setenv("repoName", repoName) + //os.Setenv("repoId", strconv.Itoa(int(repo.Id))) + //os.Setenv("repoName", repoName) isWrite := In(verb, COMMANDS_WRITE) isRead := In(verb, COMMANDS_READONLY) @@ -130,12 +155,6 @@ func runServ(*cli.Context) { return } - isExist, err := models.IsRepositoryExist(user, repoName) - if err != nil { - println("Inernel error:", err.Error()) - return - } - if !isExist { if isRead { println("Repository", user.Name+"/"+repoName, "is not exist") @@ -149,28 +168,114 @@ func runServ(*cli.Context) { } } + rep, err := git.OpenRepository(models.RepoPath(user.Name, repoName)) + if err != nil { + println(err.Error()) + return + } + + refs, err := rep.AllReferencesMap() + if err != nil { + println(err.Error()) + return + } + gitcmd := exec.Command(verb, rRepo) gitcmd.Dir = base.RepoRootPath - gitcmd.Stdout = os.Stdout - gitcmd.Stdin = os.Stdin + + var s string + b := bytes.NewBufferString(s) + + gitcmd.Stdout = io.MultiWriter(os.Stdout, b) + gitcmd.Stdin = io.MultiReader(os.Stdin, b) gitcmd.Stderr = os.Stderr if err = gitcmd.Run(); err != nil { println("execute command error:", err.Error()) } -} -func parseCmd(cmd string) (string, string) { - ss := strings.SplitN(cmd, " ", 2) - if len(ss) != 2 { - return "", "" + // update + w, _ := os.Create("serve.log") + defer w.Close() + log.SetOutput(w) + + 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):] + } + } + var ref *git.Reference + var ok bool + + var l *list.List + //log.Info("----", refname, "-----") + if ref, ok = refs[refname]; !ok { + refs, err = rep.AllReferencesMap() + if err != nil { + println(err.Error()) + return + } + if ref, ok = refs[refname]; !ok { + println("unknow reference name", refname) + return + } + l, err = ref.AllCommits() + if err != nil { + println(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(err.Error()) + return + } + + ref2, err := rep.LookupReference(ref.Name) + if err != nil { + println(err.Error()) + return + } + + //log.Info("11111", ref2.Oid.String()) + before, err := ref2.LastCommit() + if err != nil { + println(err.Error()) + return + } + //log.Info("----", before.Id(), "-----", last.Id()) + l = ref.CommitsBetween(before, last) } - verb, args := ss[0], ss[1] - if verb == "git" { - ss = strings.SplitN(args, " ", 2) - args = ss[1] - verb = fmt.Sprintf("%s %s", verb, ss[0]) + commits := make([][]string, 0) + for e := l.Back(); e != nil; e = e.Prev() { + commit := e.Value.(*git.Commit) + commits = append(commits, []string{commit.Id().String(), commit.Message()}) + } + + if err = models.CommitRepoAction(user.Id, user.Name, + repo.Id, ref.BranchName(), commits); err != nil { + log.Error("runUpdate.models.CommitRepoAction: %v", err, commits) + } else { + //log.Info("refname", refname) + //log.Info("Listen: %v", cmd) + //fmt.Println("...", cmd) + + //runUpdate(k) + c := exec.Command("exec", "git", "update-server-info") + c.Run() } - return verb, args } diff --git a/update.go b/update.go index baa433d75c..915e046530 100644 --- a/update.go +++ b/update.go @@ -4,16 +4,9 @@ package main -import ( - "os" - "strconv" +import "github.com/codegangsta/cli" - "github.com/codegangsta/cli" - - "github.com/gogits/git" - "github.com/gogits/gogs/models" - "github.com/gogits/gogs/modules/log" -) +//"github.com/gogits/gogs/modules/log" var CmdUpdate = cli.Command{ Name: "update", @@ -26,6 +19,9 @@ gogs serv provide access auth for repositories`, // for command: ./gogs update func runUpdate(*cli.Context) { + /*w, _ := os.Create("update.log") + log.SetOutput(w) + userName := os.Getenv("userName") userId := os.Getenv("userId") repoId := os.Getenv("repoId") @@ -35,16 +31,19 @@ func runUpdate(*cli.Context) { repo, err := git.OpenRepository(f) if err != nil { + log.Error("runUpdate.Open repoId: %v", err) return } ref, err := repo.LookupReference("HEAD") if err != nil { + log.Error("runUpdate.Ref repoId: %v", err) return } lastCommit, err := repo.LookupCommit(ref.Oid) if err != nil { + log.Error("runUpdate.Commit repoId: %v", err) return } @@ -63,5 +62,8 @@ func runUpdate(*cli.Context) { if err = models.CommitRepoAction(int64(sUserId), userName, int64(sRepoId), repoName, commits); err != nil { log.Error("runUpdate.models.CommitRepoAction: %v", err) - } + } else { + l := exec.Command("exec", "git", "update-server-info") + l.Run() + }*/ } From 4adb024715bdb576d7acb2900d933e7196abee4c Mon Sep 17 00:00:00 2001 From: slene Date: Sun, 23 Mar 2014 16:40:51 +0800 Subject: [PATCH 2/6] minor fix markdown setting --- bee.json | 3 ++- modules/base/markdown.go | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/bee.json b/bee.json index 19efcbc205..4f7f7a771c 100644 --- a/bee.json +++ b/bee.json @@ -13,7 +13,8 @@ "others": [ "modules", "$GOPATH/src/github.com/gogits/binding", - "$GOPATH/src/github.com/gogits/git" + "$GOPATH/src/github.com/gogits/git", + "$GOPATH/src/github.com/gogits/gfm" ] }, "cmd_args": [ diff --git a/modules/base/markdown.go b/modules/base/markdown.go index 2273cd772f..05ce0c833c 100644 --- a/modules/base/markdown.go +++ b/modules/base/markdown.go @@ -72,7 +72,7 @@ func (options *CustomRender) Link(out *bytes.Buffer, link []byte, title []byte, func RenderMarkdown(rawBytes []byte, urlPrefix string) []byte { htmlFlags := 0 - htmlFlags |= gfm.HTML_USE_XHTML + // htmlFlags |= gfm.HTML_USE_XHTML // htmlFlags |= gfm.HTML_USE_SMARTYPANTS // htmlFlags |= gfm.HTML_SMARTYPANTS_FRACTIONS // htmlFlags |= gfm.HTML_SMARTYPANTS_LATEX_DASHES @@ -81,7 +81,7 @@ func RenderMarkdown(rawBytes []byte, urlPrefix string) []byte { htmlFlags |= gfm.HTML_SKIP_SCRIPT htmlFlags |= gfm.HTML_GITHUB_BLOCKCODE htmlFlags |= gfm.HTML_OMIT_CONTENTS - htmlFlags |= gfm.HTML_COMPLETE_PAGE + // htmlFlags |= gfm.HTML_COMPLETE_PAGE renderer := &CustomRender{ Renderer: gfm.HtmlRenderer(htmlFlags, "", ""), urlPrefix: urlPrefix, From d594bb386f92455079e56b48f5add16b05609dea Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Sun, 23 Mar 2014 16:51:43 +0800 Subject: [PATCH 3/6] log import fixed --- serve.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/serve.go b/serve.go index 54296049d5..d4ce138c1c 100644 --- a/serve.go +++ b/serve.go @@ -15,7 +15,7 @@ import ( "strings" "github.com/codegangsta/cli" - "github.com/qiniu/log" + "github.com/gogits/gogs/modules/log" "github.com/gogits/git" "github.com/gogits/gogs/models" @@ -195,9 +195,9 @@ func runServ(k *cli.Context) { } // update - w, _ := os.Create("serve.log") - defer w.Close() - log.SetOutput(w) + //w, _ := os.Create("serve.log") + //defer w.Close() + //log.SetOutput(w) var t = "ok refs/heads/" var i int From 21a138a75a379c1c8d1142b6bdf3f855c0361634 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Sun, 23 Mar 2014 17:10:09 +0800 Subject: [PATCH 4/6] bug fxied --- serve.go | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/serve.go b/serve.go index d4ce138c1c..16df38f420 100644 --- a/serve.go +++ b/serve.go @@ -104,8 +104,6 @@ func runServ(k *cli.Context) { repoName = repoName[:len(repoName)-4] } - //os.Setenv("userName", user.Name) - //os.Setenv("userId", strconv.Itoa(int(user.Id))) repo, err := models.GetRepositoryByName(user.Id, repoName) var isExist bool = true if err != nil { @@ -116,8 +114,6 @@ func runServ(k *cli.Context) { return } } - //os.Setenv("repoId", strconv.Itoa(int(repo.Id))) - //os.Setenv("repoName", repoName) isWrite := In(verb, COMMANDS_WRITE) isRead := In(verb, COMMANDS_READONLY) @@ -187,13 +183,18 @@ func runServ(k *cli.Context) { b := bytes.NewBufferString(s) gitcmd.Stdout = io.MultiWriter(os.Stdout, b) - gitcmd.Stdin = io.MultiReader(os.Stdin, b) + //gitcmd.Stdin = io.MultiReader(os.Stdin, b) + gitcmd.Stdin = os.Stdin gitcmd.Stderr = os.Stderr if err = gitcmd.Run(); err != nil { println("execute command error:", err.Error()) } + if !strings.HasPrefix(cmd, "git-receive-pack") { + return + } + // update //w, _ := os.Create("serve.log") //defer w.Close() From c4287bafabb96f3970bf629ff225c48112d008d9 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Sun, 23 Mar 2014 17:13:22 +0800 Subject: [PATCH 5/6] bug fixed --- serve.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/serve.go b/serve.go index 16df38f420..2f7a9d6052 100644 --- a/serve.go +++ b/serve.go @@ -227,7 +227,7 @@ func runServ(k *cli.Context) { return } if ref, ok = refs[refname]; !ok { - println("unknow reference name", refname) + println("unknow reference name -", refname, "-") return } l, err = ref.AllCommits() From 406afa3c32eab4782291ca01eea273f2df25748d Mon Sep 17 00:00:00 2001 From: slene Date: Sun, 23 Mar 2014 17:22:14 +0800 Subject: [PATCH 6/6] markdown img max-width --- public/css/markdown.css | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/public/css/markdown.css b/public/css/markdown.css index a810fa3ce7..9f4024ba89 100644 --- a/public/css/markdown.css +++ b/public/css/markdown.css @@ -175,6 +175,10 @@ margin-bottom: 0; } +.markdown img { + max-width: 100%; +} + .markdown .btn { color: #fff; }