From 7c80eba77f727c2b80b4091c850dc38d47532b8d Mon Sep 17 00:00:00 2001
From: Unknwon <u@gogs.io>
Date: Sat, 14 Nov 2015 13:21:31 -0500
Subject: [PATCH] minor UI fix and fix ssh race

---
 README.md                                 |  2 +-
 cmd/web.go                                |  3 ++-
 gogs.go                                   |  2 +-
 modules/ssh/ssh.go                        | 24 +++++++++++++++++------
 routers/repo/commit.go                    |  3 +++
 templates/.VERSION                        |  2 +-
 templates/repo/commits.tmpl               |  1 +
 templates/repo/settings/deploy_keys.tmpl  |  1 +
 templates/repo/settings/githook_edit.tmpl |  1 +
 templates/repo/settings/githooks.tmpl     |  1 +
 templates/repo/settings/hook_new.tmpl     |  1 +
 templates/repo/settings/hooks.tmpl        |  1 +
 templates/repo/settings/options.tmpl      |  1 +
 13 files changed, 33 insertions(+), 10 deletions(-)

diff --git a/README.md b/README.md
index 03cb070e25..02e624c0a8 100644
--- a/README.md
+++ b/README.md
@@ -5,7 +5,7 @@ Gogs - Go Git Service [![Build Status](https://travis-ci.org/gogits/gogs.svg?bra
 
 ![](public/img/gogs-large-resize.png)
 
-##### Current version: 0.7.9 Beta
+##### Current version: 0.7.10 Beta
 
 <table>
     <tr>
diff --git a/cmd/web.go b/cmd/web.go
index e51b1bb978..950c3d48cf 100644
--- a/cmd/web.go
+++ b/cmd/web.go
@@ -87,6 +87,7 @@ func checkVersion() {
 		{"github.com/go-macaron/csrf", csrf.Version, "0.0.3"},
 		{"github.com/go-macaron/i18n", i18n.Version, "0.0.7"},
 		{"github.com/go-macaron/session", session.Version, "0.1.6"},
+		{"github.com/go-macaron/toolbox", toolbox.Version, "0.1.0"},
 		{"gopkg.in/ini.v1", ini.Version, "1.3.4"},
 	}
 	for _, c := range checkers {
@@ -463,7 +464,7 @@ func runWeb(ctx *cli.Context) {
 			})
 
 		})
-	}, reqSignIn, middleware.RepoAssignment(true), reqRepoAdmin)
+	}, reqSignIn, middleware.RepoAssignment(true), reqRepoAdmin, middleware.RepoRef())
 
 	m.Group("/:username/:reponame", func() {
 		m.Get("/action/:action", repo.Action)
diff --git a/gogs.go b/gogs.go
index 37259d367d..95b8e931f4 100644
--- a/gogs.go
+++ b/gogs.go
@@ -17,7 +17,7 @@ import (
 	"github.com/gogits/gogs/modules/setting"
 )
 
-const APP_VER = "0.7.9.1114 Beta"
+const APP_VER = "0.7.10.1114 Beta"
 
 func init() {
 	runtime.GOMAXPROCS(runtime.NumCPU())
diff --git a/modules/ssh/ssh.go b/modules/ssh/ssh.go
index 5e3761ca19..706f5e7503 100644
--- a/modules/ssh/ssh.go
+++ b/modules/ssh/ssh.go
@@ -7,6 +7,7 @@
 package ssh
 
 import (
+	"fmt"
 	"io"
 	"io/ioutil"
 	"net"
@@ -82,14 +83,16 @@ func handleServerConn(keyID string, chans <-chan ssh.NewChannel) {
 						return
 					}
 
-					go io.Copy(ch, stdout)
-					go io.Copy(ch.Stderr(), stderr)
-					go io.Copy(input, ch)
-
 					if err = cmd.Start(); err != nil {
 						log.Error(3, "Start: %v", err)
 						return
-					} else if err = cmd.Wait(); err != nil {
+					}
+
+					go io.Copy(input, ch)
+					io.Copy(ch, stdout)
+					io.Copy(ch.Stderr(), stderr)
+
+					if err = cmd.Wait(); err != nil {
 						log.Error(3, "Wait: %v", err)
 						return
 					}
@@ -142,7 +145,16 @@ func Listen(port int) {
 		},
 	}
 
-	privateBytes, err := ioutil.ReadFile(filepath.Join(models.SSHPath, "id_rsa"))
+	keyPath := filepath.Join(setting.AppDataPath, "ssh/gogs.rsa")
+	if !com.IsExist(keyPath) {
+		os.MkdirAll(filepath.Dir(keyPath), os.ModePerm)
+		_, stderr, err := com.ExecCmd("ssh-keygen", "-f", keyPath, "-t", "rsa", "-N", "")
+		if err != nil {
+			panic(fmt.Sprintf("Fail to generate private key: %v - %s", err, stderr))
+		}
+	}
+
+	privateBytes, err := ioutil.ReadFile(keyPath)
 	if err != nil {
 		panic("Fail to load private key")
 	}
diff --git a/routers/repo/commit.go b/routers/repo/commit.go
index 101cb5c557..0c9e7817a2 100644
--- a/routers/repo/commit.go
+++ b/routers/repo/commit.go
@@ -17,6 +17,8 @@ import (
 	"github.com/gogits/gogs/modules/setting"
 )
 
+import "github.com/davecheney/profile"
+
 const (
 	COMMITS base.TplName = "repo/commits"
 	DIFF    base.TplName = "repo/diff"
@@ -43,6 +45,7 @@ func RenderIssueLinks(oldCommits *list.List, repoLink string) *list.List {
 }
 
 func Commits(ctx *middleware.Context) {
+	defer profile.Start(profile.CPUProfile).Stop()
 	ctx.Data["PageIsCommits"] = true
 
 	commitsCount, err := ctx.Repo.Commit.CommitsCount()
diff --git a/templates/.VERSION b/templates/.VERSION
index 548d9a0ea6..32d6c06db8 100644
--- a/templates/.VERSION
+++ b/templates/.VERSION
@@ -1 +1 @@
-0.7.9.1114 Beta
\ No newline at end of file
+0.7.10.1114 Beta
\ No newline at end of file
diff --git a/templates/repo/commits.tmpl b/templates/repo/commits.tmpl
index e54c9ed70e..769841deea 100644
--- a/templates/repo/commits.tmpl
+++ b/templates/repo/commits.tmpl
@@ -2,6 +2,7 @@
 <div class="repository commits">
 	{{template "repo/header" .}}
   <div class="ui container">
+    {{template "repo/sidebar" .}}
 		{{template "repo/commits_table" .}}
 	</div>
 </div>
diff --git a/templates/repo/settings/deploy_keys.tmpl b/templates/repo/settings/deploy_keys.tmpl
index 0574e9d800..5a6958381b 100644
--- a/templates/repo/settings/deploy_keys.tmpl
+++ b/templates/repo/settings/deploy_keys.tmpl
@@ -2,6 +2,7 @@
 <div class="repository settings">
 	{{template "repo/header" .}}
 	<div class="ui container">
+    {{template "repo/sidebar" .}}
 		<div class="ui grid">
 			{{template "repo/settings/navbar" .}}
 			<div class="twelve wide column content">
diff --git a/templates/repo/settings/githook_edit.tmpl b/templates/repo/settings/githook_edit.tmpl
index b9b75a3aa6..2f79481a2a 100644
--- a/templates/repo/settings/githook_edit.tmpl
+++ b/templates/repo/settings/githook_edit.tmpl
@@ -2,6 +2,7 @@
 <div class="repository settings edit githook">
 	{{template "repo/header" .}}
 	<div class="ui container">
+    {{template "repo/sidebar" .}}
 		<div class="ui grid">
 			{{template "repo/settings/navbar" .}}
 			<div class="twelve wide column content">
diff --git a/templates/repo/settings/githooks.tmpl b/templates/repo/settings/githooks.tmpl
index 8120b80e17..980b98fde9 100644
--- a/templates/repo/settings/githooks.tmpl
+++ b/templates/repo/settings/githooks.tmpl
@@ -2,6 +2,7 @@
 <div class="repository settings githooks">
 	{{template "repo/header" .}}
 	<div class="ui container">
+    {{template "repo/sidebar" .}}
 		<div class="ui grid">
 			{{template "repo/settings/navbar" .}}
 			<div class="twelve wide column content">
diff --git a/templates/repo/settings/hook_new.tmpl b/templates/repo/settings/hook_new.tmpl
index 7c9a5de1f0..ac69b02f35 100644
--- a/templates/repo/settings/hook_new.tmpl
+++ b/templates/repo/settings/hook_new.tmpl
@@ -2,6 +2,7 @@
 <div class="repository settings new webhook">
 	{{template "repo/header" .}}
 	<div class="ui container">
+    {{template "repo/sidebar" .}}
 		<div class="ui grid">
 			{{template "repo/settings/navbar" .}}
 			<div class="twelve wide column content">
diff --git a/templates/repo/settings/hooks.tmpl b/templates/repo/settings/hooks.tmpl
index e3f6f4ddae..187bd56360 100644
--- a/templates/repo/settings/hooks.tmpl
+++ b/templates/repo/settings/hooks.tmpl
@@ -2,6 +2,7 @@
 <div class="repository settings webhooks">
 	{{template "repo/header" .}}
 	<div class="ui container">
+    {{template "repo/sidebar" .}}
 		<div class="ui grid">
 			{{template "repo/settings/navbar" .}}
 			{{template "repo/settings/hook_list" .}}
diff --git a/templates/repo/settings/options.tmpl b/templates/repo/settings/options.tmpl
index 474d719eb7..e109ec11c6 100644
--- a/templates/repo/settings/options.tmpl
+++ b/templates/repo/settings/options.tmpl
@@ -2,6 +2,7 @@
 <div class="repository settings options">
 	{{template "repo/header" .}}
 	<div class="ui container">
+    {{template "repo/sidebar" .}}
 		<div class="ui grid">
 			{{template "repo/settings/navbar" .}}
 			<div class="twelve wide column content">