app.Commands = []cli.Command{
CmdWeb,
CmdServ,
+ CmdUpdate,
}
app.Flags = append(app.Flags, []cli.Flag{
cli.BoolFlag{"noterm", "disable color output"},
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,
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)
--- /dev/null
+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
+ }
+}