summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLunny Xiao <xiaolunwen@gmail.com>2014-03-16 12:18:34 +0800
committerLunny Xiao <xiaolunwen@gmail.com>2014-03-16 12:18:34 +0800
commit3035a38caab5308ef30720760c99594fd9434176 (patch)
tree5582169bbb32538651e1a5c71546cd002f002888
parentf047df6e2b69ecb41c3fe4bef746145916aa4063 (diff)
downloadgitea-3035a38caab5308ef30720760c99594fd9434176.tar.gz
gitea-3035a38caab5308ef30720760c99594fd9434176.zip
add update
-rw-r--r--gogs.go1
-rw-r--r--models/action.go15
-rw-r--r--serve.go11
-rw-r--r--update.go51
4 files changed, 78 insertions, 0 deletions
diff --git a/gogs.go b/gogs.go
index e826ab9f36..3b33c4e303 100644
--- a/gogs.go
+++ b/gogs.go
@@ -49,6 +49,7 @@ func main() {
app.Commands = []cli.Command{
CmdWeb,
CmdServ,
+ CmdUpdate,
}
app.Flags = append(app.Flags, []cli.Flag{
cli.BoolFlag{"noterm", "disable color output"},
diff --git a/models/action.go b/models/action.go
index 6a77d73003..93c1e2768f 100644
--- a/models/action.go
+++ b/models/action.go
@@ -43,7 +43,22 @@ func (a Action) GetRepoName() string {
return a.RepoName
}
+func CommitRepoAction(userId int64, userName string,
+ repoId int64, repoName string, msg string) error {
+ _, err := orm.InsertOne(&Action{
+ UserId: userId,
+ ActUserId: userId,
+ ActUserName: userName,
+ OpType: OP_COMMIT_REPO,
+ Content: msg,
+ RepoId: repoId,
+ RepoName: repoName,
+ })
+ return err
+}
+
// NewRepoAction inserts action for create repository.
+
func NewRepoAction(user *User, repo *Repository) error {
_, err := orm.InsertOne(&Action{
UserId: user.Id,
diff --git a/serve.go b/serve.go
index 56105f2f80..50ec94a8d9 100644
--- a/serve.go
+++ b/serve.go
@@ -73,6 +73,17 @@ func runServ(*cli.Context) {
if strings.HasSuffix(repoName, ".git") {
repoName = repoName[:len(repoName)-4]
}
+
+ os.Setenv("userName", user.Name)
+ os.Setenv("userId", strconv.Itoa(int(user.Id)))
+ repo, err := models.GetRepositoryByName(user, repoName)
+ if err != nil {
+ println("Unavilable repository", err)
+ return
+ }
+ os.Setenv("repoId", strconv.Itoa(int(repo.Id)))
+ os.Setenv("repoName", repoName)
+
isWrite := In(verb, COMMANDS_WRITE)
isRead := In(verb, COMMANDS_READONLY)
diff --git a/update.go b/update.go
new file mode 100644
index 0000000000..339b3ab94f
--- /dev/null
+++ b/update.go
@@ -0,0 +1,51 @@
+package main
+
+import (
+ "os"
+ "strconv"
+
+ "github.com/gogits/gogs/models"
+
+ "github.com/codegangsta/cli"
+ git "github.com/gogits/git"
+)
+
+var CmdUpdate = cli.Command{
+ Name: "update",
+ Usage: "This command just should be called by ssh shell",
+ Description: `
+gogs serv provide access auth for repositories`,
+ Action: runUpdate,
+ Flags: []cli.Flag{},
+}
+
+func runUpdate(*cli.Context) {
+ userName := os.Getenv("userName")
+ userId := os.Getenv("userId")
+ repoId := os.Getenv("repoId")
+ repoName := os.Getenv("repoName")
+
+ f := models.RepoPath(userName, repoName)
+
+ repo, err := git.OpenRepository(f)
+ if err != nil {
+ return
+ }
+
+ ref, err := repo.LookupReference("HEAD")
+ if err != nil {
+ return
+ }
+
+ lastCommit, err := repo.LookupCommit(ref.Oid)
+ if err != nil {
+ return
+ }
+ sUserId, _ := strconv.Atoi(userId)
+ sRepoId, _ := strconv.Atoi(repoId)
+ err = models.CommitRepoAction(int64(sUserId), userName,
+ int64(sRepoId), repoName, lastCommit.Message())
+ if err != nil {
+ //TODO: log
+ }
+}