@@ -49,6 +49,7 @@ func main() { | |||
app.Commands = []cli.Command{ | |||
CmdWeb, | |||
CmdServ, | |||
CmdUpdate, | |||
} | |||
app.Flags = append(app.Flags, []cli.Flag{}...) | |||
app.Run(os.Args) |
@@ -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, |
@@ -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) | |||
@@ -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 | |||
} | |||
} |