From c36e7d322e74a55749ce2c2934c6fcfa82cff274 Mon Sep 17 00:00:00 2001
From: Unknown <joe2010xtmf@163.com>
Date: Mon, 14 Apr 2014 04:11:33 -0400
Subject: [PATCH] Mirror updates

---
 models/models.go               | 10 +++++++++-
 models/repo.go                 | 28 ++++++++++++++++------------
 modules/base/conf.go           |  6 +++---
 routers/dashboard.go           |  6 ++++++
 templates/admin/dashboard.tmpl |  2 +-
 templates/base/head.tmpl       |  1 +
 templates/home.tmpl            | 19 +++++++++++++++++++
 templates/user/profile.tmpl    |  3 +--
 8 files changed, 56 insertions(+), 19 deletions(-)

diff --git a/models/models.go b/models/models.go
index 0e20a1ab2f..d485489586 100644
--- a/models/models.go
+++ b/models/models.go
@@ -120,7 +120,10 @@ func NewEngine() (err error) {
 
 type Statistic struct {
 	Counter struct {
-		User, PublicKey, Repo, Watch, Action, Access int64
+		User, PublicKey, Repo,
+		Watch, Action, Access,
+		Issue, Comment,
+		Mirror, Oauth, Release int64
 	}
 }
 
@@ -131,5 +134,10 @@ 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))
+	stats.Counter.Issue, _ = orm.Count(new(Issue))
+	stats.Counter.Comment, _ = orm.Count(new(Comment))
+	stats.Counter.Mirror, _ = orm.Count(new(Mirror))
+	stats.Counter.Oauth, _ = orm.Count(new(Oauth2))
+	stats.Counter.Release, _ = orm.Count(new(Release))
 	return
 }
diff --git a/models/repo.go b/models/repo.go
index bb0c164e24..6943d05e0b 100644
--- a/models/repo.go
+++ b/models/repo.go
@@ -66,6 +66,7 @@ func NewRepoContext() {
 type Repository struct {
 	Id              int64
 	OwnerId         int64 `xorm:"unique(s)"`
+	Owner           *User `xorm:"-"`
 	ForkId          int64
 	LowerName       string `xorm:"unique(s) index not null"`
 	Name            string `xorm:"index not null"`
@@ -364,24 +365,21 @@ func initRepoCommit(tmpPath string, sig *git.Signature) (err error) {
 	var stderr string
 	if _, stderr, err = com.ExecCmdDir(tmpPath, "git", "add", "--all"); err != nil {
 		return err
-	}
-	if len(stderr) > 0 {
-		log.Trace("stderr(1): %s", stderr)
+	} else if strings.Contains(stderr, "fatal:") {
+		return errors.New("git add: " + stderr)
 	}
 
 	if _, stderr, err = com.ExecCmdDir(tmpPath, "git", "commit", fmt.Sprintf("--author='%s <%s>'", sig.Name, sig.Email),
 		"-m", "Init commit"); err != nil {
 		return err
-	}
-	if len(stderr) > 0 {
-		log.Trace("stderr(2): %s", stderr)
+	} else if strings.Contains(stderr, "fatal:") {
+		return errors.New("git commit: " + stderr)
 	}
 
 	if _, stderr, err = com.ExecCmdDir(tmpPath, "git", "push", "origin", "master"); err != nil {
 		return err
-	}
-	if len(stderr) > 0 {
-		log.Trace("stderr(3): %s", stderr)
+	} else if strings.Contains(stderr, "fatal:") {
+		return errors.New("git push: " + stderr)
 	}
 	return nil
 }
@@ -439,9 +437,8 @@ func initRepository(f string, user *User, repo *Repository, initReadme bool, rep
 	_, stderr, err := com.ExecCmd("git", "clone", repoPath, tmpDir)
 	if err != nil {
 		return err
-	}
-	if len(stderr) > 0 {
-		log.Trace("repo.initRepository(git clone): %s", stderr)
+	} else if strings.Contains(stderr, "fatal:") {
+		return errors.New("git clone: " + stderr)
 	}
 
 	// README
@@ -725,6 +722,13 @@ func GetRepositories(user *User, private bool) ([]Repository, error) {
 	return repos, err
 }
 
+// GetRecentUpdatedRepositories returns the list of repositories that are recently updated.
+func GetRecentUpdatedRepositories() (repos []*Repository, err error) {
+	err = orm.Where("is_private=?", false).Limit(5).Desc("updated").Find(&repos)
+	return repos, err
+}
+
+// GetRepositoryCount returns the total number of repositories of user.
 func GetRepositoryCount(user *User) (int64, error) {
 	return orm.Count(&Repository{OwnerId: user.Id})
 }
diff --git a/modules/base/conf.go b/modules/base/conf.go
index 957ec57b4d..c5d73bbc58 100644
--- a/modules/base/conf.go
+++ b/modules/base/conf.go
@@ -37,9 +37,9 @@ type OauthInfo struct {
 
 // Oauther represents oauth service.
 type Oauther struct {
-	GitHub, Google, Tencent bool
-	Twitter, Weibo          bool
-	OauthInfos              map[string]*OauthInfo
+	GitHub, Google, Tencent,
+	Twitter, Weibo bool
+	OauthInfos map[string]*OauthInfo
 }
 
 var (
diff --git a/routers/dashboard.go b/routers/dashboard.go
index 2c81cf23c1..71bdcc9f13 100644
--- a/routers/dashboard.go
+++ b/routers/dashboard.go
@@ -5,6 +5,7 @@
 package routers
 
 import (
+	"github.com/gogits/gogs/models"
 	"github.com/gogits/gogs/modules/base"
 	"github.com/gogits/gogs/modules/middleware"
 	"github.com/gogits/gogs/routers/user"
@@ -23,6 +24,11 @@ func Home(ctx *middleware.Context) {
 		return
 	}
 
+	repos, _ := models.GetRecentUpdatedRepositories()
+	for _, repo := range repos {
+		repo.Owner, _ = models.GetUserById(repo.OwnerId)
+	}
+	ctx.Data["Repos"] = repos
 	ctx.Data["PageIsHome"] = true
 	ctx.HTML(200, "home")
 }
diff --git a/templates/admin/dashboard.tmpl b/templates/admin/dashboard.tmpl
index 2334c676d9..76539842d2 100644
--- a/templates/admin/dashboard.tmpl
+++ b/templates/admin/dashboard.tmpl
@@ -9,7 +9,7 @@
             </div>
 
             <div class="panel-body">
-                Gogs database has <b>{{.Stats.Counter.User}}</b> users, <b>{{.Stats.Counter.PublicKey}}</b> SSH keys, <b>{{.Stats.Counter.Repo}}</b> repositories, <b>{{.Stats.Counter.Watch}}</b> watches, <b>{{.Stats.Counter.Action}}</b> actions, and <b>{{.Stats.Counter.Access}}</b> accesses.
+                Gogs database has <b>{{.Stats.Counter.User}}</b> users, <b>{{.Stats.Counter.PublicKey}}</b> SSH keys, <b>{{.Stats.Counter.Repo}}</b> repositories, <b>{{.Stats.Counter.Watch}}</b> watches, <b>{{.Stats.Counter.Action}}</b> actions, <b>{{.Stats.Counter.Access}}</b> accesses, <b>{{.Stats.Counter.Issue}}</b> issues, <b>{{.Stats.Counter.Comment}}</b> comments, <b>{{.Stats.Counter.Mirror}}</b> mirrors, <b>{{.Stats.Counter.Oauth}}</b> oauthes, <b>{{.Stats.Counter.Release}}</b> releases.
             </div>
         </div>
 
diff --git a/templates/base/head.tmpl b/templates/base/head.tmpl
index 68231391c0..109ddd3534 100644
--- a/templates/base/head.tmpl
+++ b/templates/base/head.tmpl
@@ -10,6 +10,7 @@
 		<meta name="keywords" content="go, git">
 		<meta name="_csrf" content="{{.CsrfToken}}" />
 		{{if .Repository.IsGoget}}<meta name="go-import" content="{{.GoGetImport}} git {{.CloneLink.HTTPS}}">{{end}}
+		<meta property="qc:admins" content="34543312371436727" />
 
 		 <!-- Stylesheets -->
 		{{if IsProdMode}}
diff --git a/templates/home.tmpl b/templates/home.tmpl
index d3a8c0c343..5827f61810 100644
--- a/templates/home.tmpl
+++ b/templates/home.tmpl
@@ -1,8 +1,27 @@
 {{template "base/head" .}}
 {{template "base/navbar" .}}
 <div id="body" class="container">
+	{{if not .Repos}}
 	<h4>Hey there, welcome to the land of Gogs!</h4>
 	<p>If you just get your Gogs server running, go <a href="/install">install</a> guide page will help you setup things for your first-time run.</p>
 	<img src="http://gowalker.org/public/gogs_demo.gif">
+	{{else}}
+	<h4>Hey there, welcome to the land of Gogs!</h4>
+	<h5>Here are some recent updated repositories:</h5>
+    <div class="tab-pane active">
+        <ul class="list-unstyled repo-list">
+        {{range .Repos}}
+            <li>
+                <div class="meta pull-right"><!-- <i class="fa fa-star"></i> {{.NumStars}} --> <i class="fa fa-code-fork"></i> {{.NumForks}}</div>
+                <h4>
+                    <a href="/{{.Owner.Name}}/{{.Name}}">{{.Name}}</a>
+                </h4>
+                <p class="desc">{{.Description}}</p>
+                <div class="info">Last updated {{.Updated|TimeSince}}</div>
+            </li>
+        {{end}}
+        </ul>
+    </div>
+	{{end}}
 </div>
 {{template "base/footer" .}}
diff --git a/templates/user/profile.tmpl b/templates/user/profile.tmpl
index a336bfb2fb..e80b2394ca 100644
--- a/templates/user/profile.tmpl
+++ b/templates/user/profile.tmpl
@@ -58,14 +58,13 @@
                 </ul>
             </div>
             {{else}}
-            {{$owner := .Owner}}
             <div class="tab-pane active">
                 <ul class="list-unstyled repo-list">
                 {{range .Repos}}
                     <li>
                         <div class="meta pull-right"><!-- <i class="fa fa-star"></i> {{.NumStars}} --> <i class="fa fa-code-fork"></i> {{.NumForks}}</div>
                         <h4>
-                            <a href="/{{$owner.Name}}/{{.Name}}">{{.Name}}{{if .IsPrivate}} <span class="label label-default">Private</span>{{end}}</a>
+                            <a href="/{{$.Owner.Name}}/{{.Name}}">{{.Name}}{{if .IsPrivate}} <span class="label label-default">Private</span>{{end}}</a>
                         </h4>
                         <p class="desc">{{.Description}}</p>
                         <div class="info">Last updated {{.Updated|TimeSince}}</div>