diff --git a/.bra.toml b/.bra.toml
index bd245653f..8789ca8fd 100644
--- a/.bra.toml
+++ b/.bra.toml
@@ -13,7 +13,7 @@ watch_dirs = [
 watch_exts = [".go"]
 build_delay = 1500
 cmds = [
-	["go", "install", "-tags", "sqlite"],# redis memcache cert pam tidb
-	["go", "build", "-tags", "sqlite"],
+	["go", "install"], # sqlite redis memcache cert pam tidb
+	["go", "build"],
 	["./gogs", "web"]
 ]
\ No newline at end of file
diff --git a/Makefile b/Makefile
index 971727d70..ee4950781 100644
--- a/Makefile
+++ b/Makefile
@@ -13,8 +13,10 @@ build:
 	go install -ldflags '$(LDFLAGS)' -tags '$(TAGS)'
 	go build -ldflags '$(LDFLAGS)' -tags '$(TAGS)'
 
+govet:
+	go tool vet -composites=false -methods=false -structtags=false .
+
 pack:
-	find . -name ".DS_Store" -print0 | xargs -0 rm
 	rm -rf $(RELEASE_GOGS)
 	mkdir -p $(RELEASE_GOGS)
 	cp -r gogs LICENSE README.md README_ZH.md templates public scripts $(RELEASE_GOGS)
@@ -27,4 +29,7 @@ bindata:
 	go-bindata -o=modules/bindata/bindata.go -ignore="\\.DS_Store|README.md" -pkg=bindata conf/...
 
 clean:
-	go clean -i ./...
\ No newline at end of file
+	go clean -i ./...
+
+clean-mac: clean
+	find . -name ".DS_Store" -print0 | xargs -0 rm
\ No newline at end of file
diff --git a/cmd/serve.go b/cmd/serve.go
index c3c66318d..301a0c74e 100644
--- a/cmd/serve.go
+++ b/cmd/serve.go
@@ -74,7 +74,14 @@ var (
 
 func fail(userMessage, logMessage string, args ...interface{}) {
 	fmt.Fprintln(os.Stderr, "Gogs:", userMessage)
-	log.GitLogger.Fatal(3, logMessage, args...)
+
+	if len(logMessage) > 0 {
+		log.GitLogger.Fatal(3, logMessage, args...)
+		return
+	}
+
+	log.GitLogger.Close()
+	os.Exit(1)
 }
 
 func handleUpdateTask(uuid string, user *models.User, repoUserName, repoName string) {
@@ -161,6 +168,11 @@ func runServ(c *cli.Context) {
 		fail("Unknown git command", "Unknown git command %s", verb)
 	}
 
+	// Prohibit push to mirror repositories.
+	if requestedMode > models.ACCESS_MODE_READ && repo.IsMirror {
+		fail("mirror repository is read-only", "")
+	}
+
 	// Allow anonymous clone for public repositories.
 	var (
 		keyID int64
diff --git a/gogs.go b/gogs.go
index c4466d0a8..fc63c7d3f 100644
--- a/gogs.go
+++ b/gogs.go
@@ -17,7 +17,7 @@ import (
 	"github.com/gogits/gogs/modules/setting"
 )
 
-const APP_VER = "0.7.0.1107 Beta"
+const APP_VER = "0.7.0.1108 Beta"
 
 func init() {
 	runtime.GOMAXPROCS(runtime.NumCPU())
diff --git a/models/action.go b/models/action.go
index cfa6e14d9..e94bb9441 100644
--- a/models/action.go
+++ b/models/action.go
@@ -147,7 +147,7 @@ func newRepoAction(e Engine, u *User, repo *Repository) (err error) {
 		RepoName:     repo.Name,
 		IsPrivate:    repo.IsPrivate,
 	}); err != nil {
-		return fmt.Errorf("notify watchers '%d/%s': %v", u.Id, repo.ID, err)
+		return fmt.Errorf("notify watchers '%d/%d': %v", u.Id, repo.ID, err)
 	}
 
 	log.Trace("action.newRepoAction: %s/%s", u.Name, repo.Name)
@@ -488,7 +488,7 @@ func transferRepoAction(e Engine, actUser, oldOwner, newOwner *User, repo *Repos
 		IsPrivate:    repo.IsPrivate,
 		Content:      path.Join(oldOwner.LowerName, repo.LowerName),
 	}); err != nil {
-		return fmt.Errorf("notify watchers '%d/%s': %v", actUser.Id, repo.ID, err)
+		return fmt.Errorf("notify watchers '%d/%d': %v", actUser.Id, repo.ID, err)
 	}
 
 	// Remove watch for organization.
diff --git a/models/migrations/migrations.go b/models/migrations/migrations.go
index d7549d07f..0d17cf269 100644
--- a/models/migrations/migrations.go
+++ b/models/migrations/migrations.go
@@ -456,7 +456,7 @@ func trimCommitActionAppUrlPrefix(x *xorm.Engine) error {
 
 		pushCommits = new(PushCommits)
 		if err = json.Unmarshal(action["content"], pushCommits); err != nil {
-			return fmt.Errorf("unmarshal action content[%s]: %v", actID, err)
+			return fmt.Errorf("unmarshal action content[%d]: %v", actID, err)
 		}
 
 		infos := strings.Split(pushCommits.CompareUrl, "/")
@@ -467,7 +467,7 @@ func trimCommitActionAppUrlPrefix(x *xorm.Engine) error {
 
 		p, err := json.Marshal(pushCommits)
 		if err != nil {
-			return fmt.Errorf("marshal action content[%s]: %v", actID, err)
+			return fmt.Errorf("marshal action content[%d]: %v", actID, err)
 		}
 
 		if _, err = sess.Id(actID).Update(&Action{
diff --git a/modules/cron/parser_test.go b/modules/cron/parser_test.go
index 9050cf786..f03299e5e 100644
--- a/modules/cron/parser_test.go
+++ b/modules/cron/parser_test.go
@@ -111,7 +111,7 @@ func TestSpecSchedule(t *testing.T) {
 			t.Error(err)
 		}
 		if !reflect.DeepEqual(actual, c.expected) {
-			t.Errorf("%s => (expected) %b != %b (actual)", c.expr, c.expected, actual)
+			t.Errorf("%s => (expected) %v != %v (actual)", c.expr, c.expected, actual)
 		}
 	}
 }
diff --git a/routers/repo/commit.go b/routers/repo/commit.go
index 13483cc88..d0dd01de8 100644
--- a/routers/repo/commit.go
+++ b/routers/repo/commit.go
@@ -38,7 +38,6 @@ func RenderIssueLinks(oldCommits *list.List, repoLink string) *list.List {
 	newCommits := list.New()
 	for e := oldCommits.Front(); e != nil; e = e.Next() {
 		c := e.Value.(*git.Commit)
-		c.CommitMessage = c.CommitMessage
 		newCommits.PushBack(c)
 	}
 	return newCommits
@@ -196,7 +195,6 @@ func Diff(ctx *middleware.Context) {
 	commitID := ctx.Repo.CommitID
 
 	commit := ctx.Repo.Commit
-	commit.CommitMessage = commit.CommitMessage
 	diff, err := models.GetDiffCommit(models.RepoPath(userName, repoName),
 		commitID, setting.Git.MaxGitDiffLines)
 	if err != nil {
diff --git a/routers/repo/http.go b/routers/repo/http.go
index 178ae92c1..214cc9ba3 100644
--- a/routers/repo/http.go
+++ b/routers/repo/http.go
@@ -158,7 +158,7 @@ func HTTP(ctx *middleware.Context) {
 			}
 
 			if !isPull && repo.IsMirror {
-				ctx.HandleText(401, "can't push to mirror")
+				ctx.HandleText(401, "mirror repository is read-only")
 				return
 			}
 		}
diff --git a/routers/repo/repo.go b/routers/repo/repo.go
index a13526edf..ab7b4b99e 100644
--- a/routers/repo/repo.go
+++ b/routers/repo/repo.go
@@ -250,11 +250,6 @@ func Action(ctx *middleware.Context) {
 		redirectTo = ctx.Repo.RepoLink
 	}
 	ctx.Redirect(redirectTo)
-
-	return
-	ctx.JSON(200, map[string]interface{}{
-		"ok": true,
-	})
 }
 
 func Download(ctx *middleware.Context) {
diff --git a/templates/.VERSION b/templates/.VERSION
index 23a2f1822..b2e3cc9c2 100644
--- a/templates/.VERSION
+++ b/templates/.VERSION
@@ -1 +1 @@
-0.7.0.1107 Beta
\ No newline at end of file
+0.7.0.1108 Beta
\ No newline at end of file