Browse Source

Merge branch 'develop' of github.com:gogits/gogs into feature/page_issues

Unknwon 9 năm trước cách đây
mục cha
commit
54b58e988d
49 tập tin đã thay đổi với 87 bổ sung65 xóa
  1. 1 0
      cmd/cert.go
  2. 7 7
      cmd/serve.go
  3. 1 0
      conf/locale/locale_de-DE.ini
  4. 1 0
      conf/locale/locale_en-US.ini
  5. 1 0
      conf/locale/locale_es-ES.ini
  6. 1 0
      conf/locale/locale_fr-FR.ini
  7. 1 0
      conf/locale/locale_ja-JP.ini
  8. 1 0
      conf/locale/locale_lv-LV.ini
  9. 1 0
      conf/locale/locale_nl-NL.ini
  10. 1 0
      conf/locale/locale_pl-PL.ini
  11. 1 0
      conf/locale/locale_pt-BR.ini
  12. 1 0
      conf/locale/locale_ru-RU.ini
  13. 1 0
      conf/locale/locale_zh-CN.ini
  14. 1 0
      conf/locale/locale_zh-HK.ini
  15. 9 12
      docker/README.md
  16. 8 8
      docker/assemble_blocks.sh
  17. 6 9
      docker/blocks/docker_gogs/Dockerfile
  18. 8 12
      docker/blocks/docker_gogs_dev/Dockerfile
  19. 0 0
      docker/blocks/option_cache_memcache/docker-compose
  20. 0 0
      docker/blocks/option_cache_redis/docker-compose
  21. 0 0
      docker/blocks/option_db_mysql/docker-compose
  22. 0 0
      docker/blocks/option_db_postgresql/docker-compose
  23. 0 0
      docker/blocks/option_session_mysql/docker-compose
  24. 0 0
      docker/blocks/w_cache/docker-compose
  25. 0 0
      docker/blocks/w_cache_session/docker-compose
  26. 0 0
      docker/blocks/w_db/docker-compose
  27. 0 0
      docker/blocks/w_db_cache/docker-compose
  28. 0 0
      docker/blocks/w_db_cache_session/docker-compose
  29. 0 0
      docker/blocks/w_db_session/docker-compose
  30. 0 0
      docker/blocks/w_none/docker-compose
  31. 0 0
      docker/blocks/w_session/docker-compose
  32. 3 4
      models/access.go
  33. 1 0
      modules/auth/admin.go
  34. 1 1
      modules/auth/user_form.go
  35. 1 1
      modules/base/markdown.go
  36. 0 2
      packager/debian/postinst
  37. 1 0
      routers/admin/users.go
  38. 0 1
      routers/repo/download.go
  39. 1 0
      routers/user/home.go
  40. 8 2
      scripts/build.sh
  41. 4 2
      scripts/init/debian/gogs
  42. 1 1
      scripts/init/freebsd/gogs
  43. 1 1
      scripts/systemd/gogs.service
  44. 4 0
      templates/admin/user/edit.tmpl
  45. 1 0
      templates/base/head.tmpl
  46. 1 0
      templates/base/head_old.tmpl
  47. 2 2
      templates/install.tmpl
  48. 1 0
      templates/ng/base/head.tmpl
  49. 5 0
      templates/repo/view_file.tmpl

+ 1 - 0
cmd/cert.go

@@ -114,6 +114,7 @@ func runCert(ctx *cli.Context) {
 		SerialNumber: serialNumber,
 		Subject: pkix.Name{
 			Organization: []string{"Acme Co"},
+			CommonName: "Gogs",
 		},
 		NotBefore: notBefore,
 		NotAfter:  notAfter,

+ 7 - 7
cmd/serve.go

@@ -82,7 +82,7 @@ func runServ(c *cli.Context) {
 	}
 
 	if len(c.Args()) < 1 {
-		fail("Not enough arguments", "Not enough arugments")
+		fail("Not enough arguments", "Not enough arguments")
 	}
 
 	keys := strings.Split(c.Args()[0], "-")
@@ -97,7 +97,7 @@ func runServ(c *cli.Context) {
 
 	user, err := models.GetUserByKeyId(keyId)
 	if err != nil {
-		fail("internal error", "Fail to get user by key ID(%d): %v", keyId, err)
+		fail("internal error", "Failed to get user by key ID(%d): %v", keyId, err)
 	}
 
 	cmd := os.Getenv("SSH_ORIGINAL_COMMAND")
@@ -113,7 +113,7 @@ func runServ(c *cli.Context) {
 	repoPath := strings.Trim(args, "'")
 	rr := strings.SplitN(repoPath, "/", 2)
 	if len(rr) != 2 {
-		fail("Invalid repository path", "Invalide repository path: %v", args)
+		fail("Invalid repository path", "Invalid repository path: %v", args)
 	}
 	repoUserName := rr[0]
 	repoName := strings.TrimSuffix(rr[1], ".git")
@@ -123,7 +123,7 @@ func runServ(c *cli.Context) {
 		if err == models.ErrUserNotExist {
 			fail("Repository owner does not exist", "Unregistered owner: %s", repoUserName)
 		}
-		fail("Internal error", "Fail to get repository owner(%s): %v", repoUserName, err)
+		fail("Internal error", "Failed to get repository owner(%s): %v", repoUserName, err)
 	}
 
 	repo, err := models.GetRepositoryByName(repoUser.Id, repoName)
@@ -135,7 +135,7 @@ func runServ(c *cli.Context) {
 				fail(_ACCESS_DENIED_MESSAGE, "Repository does not exist: %s/%s", repoUser.Name, repoName)
 			}
 		}
-		fail("Internal error", "Fail to get repository: %v", err)
+		fail("Internal error", "Failed to get repository: %v", err)
 	}
 
 	requestedMode, has := COMMANDS[verb]
@@ -171,7 +171,7 @@ func runServ(c *cli.Context) {
 	gitcmd.Stdin = os.Stdin
 	gitcmd.Stderr = os.Stderr
 	if err = gitcmd.Run(); err != nil {
-		fail("Internal error", "Fail to execute git command: %v", err)
+		fail("Internal error", "Failed to execute git command: %v", err)
 	}
 
 	if requestedMode == models.ACCESS_MODE_WRITE {
@@ -184,7 +184,7 @@ func runServ(c *cli.Context) {
 			err = models.Update(task.RefName, task.OldCommitId, task.NewCommitId,
 				user.Name, repoUserName, repoName, user.Id)
 			if err != nil {
-				log.GitLogger.Error(2, "Fail to update: %v", err)
+				log.GitLogger.Error(2, "Failed to update: %v", err)
 			}
 		}
 

+ 1 - 0
conf/locale/locale_de-DE.ini

@@ -343,6 +343,7 @@ releases=Veröffentlichungen
 file_raw=Roh
 file_history=Verlauf
 file_view_raw=Ansicht Roh
+file_permalink=Permalink
 
 commits.commits=Commits
 commits.search=Durchsuche Commits

+ 1 - 0
conf/locale/locale_en-US.ini

@@ -353,6 +353,7 @@ releases = Releases
 file_raw = Raw
 file_history = History
 file_view_raw = View Raw
+file_permalink = Permalink
 
 commits.commits = Commits
 commits.search = Search commits

+ 1 - 0
conf/locale/locale_es-ES.ini

@@ -343,6 +343,7 @@ releases=Releases
 file_raw=Raw
 file_history=Histórico
 file_view_raw=Ver Raw
+file_permalink=Permalink
 
 commits.commits=Commits
 commits.search=Buscar Commits

+ 1 - 0
conf/locale/locale_fr-FR.ini

@@ -343,6 +343,7 @@ releases=Publications
 file_raw=Raw
 file_history=Historique
 file_view_raw=Voir le Raw
+file_permalink=Permalink
 
 commits.commits=Commissions
 commits.search=Rechercher des commissions

+ 1 - 0
conf/locale/locale_ja-JP.ini

@@ -343,6 +343,7 @@ releases=リリース
 file_raw=生データ
 file_history=履歴
 file_view_raw=生データを見る
+file_permalink=Permalink
 
 commits.commits=コミット
 commits.search=コミットの検索

+ 1 - 0
conf/locale/locale_lv-LV.ini

@@ -341,6 +341,7 @@ releases=Laidieni
 file_raw=Neapstrādāts
 file_history=Vēsture
 file_view_raw=Rādīt neapstrādātu
+file_permalink=Permalink
 
 commits.commits=Revīzijas
 commits.search=Meklēt revīzijas

+ 1 - 0
conf/locale/locale_nl-NL.ini

@@ -343,6 +343,7 @@ releases=Publicaties
 file_raw=Ruwe
 file_history=Geschiedenis
 file_view_raw=Weergave ruwe
+file_permalink=Permalink
 
 commits.commits=Commits
 commits.search=Zoeken

+ 1 - 0
conf/locale/locale_pl-PL.ini

@@ -343,6 +343,7 @@ releases=Wydania
 file_raw=Czysty
 file_history=Historia
 file_view_raw=Zobacz czysty
+file_permalink=Permalink
 
 commits.commits=Commity
 commits.search=Przeszukaj commity

+ 1 - 0
conf/locale/locale_pt-BR.ini

@@ -343,6 +343,7 @@ releases=Lançamentos
 file_raw=Cru
 file_history=Histórico
 file_view_raw=Ver cru
+file_permalink=Permalink
 
 commits.commits=Commits
 commits.search=Pesquisar commits

+ 1 - 0
conf/locale/locale_ru-RU.ini

@@ -343,6 +343,7 @@ releases=Релизы
 file_raw=Исходник
 file_history=История
 file_view_raw=Посмотреть исходник
+file_permalink=Permalink
 
 commits.commits=Коммиты
 commits.search=Поиск коммитов

+ 1 - 0
conf/locale/locale_zh-CN.ini

@@ -343,6 +343,7 @@ releases=版本发布
 file_raw=原始文件
 file_history=文件历史
 file_view_raw=查看原始文件
+file_permalink=Permalink
 
 commits.commits=次代码提交
 commits.search=搜索提交历史

+ 1 - 0
conf/locale/locale_zh-HK.ini

@@ -341,6 +341,7 @@ releases=版本發佈
 file_raw=原始文件
 file_history=文件歷史
 file_view_raw=查看原始文件
+file_permalink=Permalink
 
 commits.commits=次代碼提交
 commits.search=搜索提交歷史

+ 9 - 12
docker/README.md

@@ -3,13 +3,13 @@ Docker
 
 TOOLS ARE WRITTEN FOR TESTING AND TO SEE WHAT IT IS!
 
-For this to work you will need the nifty docker tool [fig].
+For this to work you will need the nifty docker tool [docker-compose].
 
 The most simple setup will look like this:
 
 ```sh
 ./assemble_blocks.sh docker_gogs w_db option_db_mysql
-fig up
+docker-compose up
 
 ```
 
@@ -22,21 +22,21 @@ How does it work
 ----------------
 
 `./assemble_blocks.sh` will look in `blocks` for subdirectories.
-In the subdirectories there are three relevant files: `Dockerfile`, `config` and `fig`.
+In the subdirectories there are three relevant files: `Dockerfile`, `config` and `docker-compose`.
 
 `Dockerfile` will be copied to `docker/` (also means last `Dockerfile` wins).
 
 The `config` file contains lines which will in the gogs docker container end up in `$GOGS_PATH/custom/config/app.ini` and by this gogs will be configured.
 Here you can define things like the MySQL server for your database block.
 
-The `fig` file will just be added to `fig.yml`, which is used by fig to manage your containers.
+The `docker-compose` file will just be added to `docker-compose.yml`, which is used by docker-compose to manage your containers.
 This includes container linking!
 
 Just have a look at them and it will be clear how to write your own blocks.
 
 Just some things
 
-    - all files (`Dockerfile`, `fig` and `config`) are optional
+    - all files (`Dockerfile`, `docker-compose` and `config`) are optional
     - the gogs block should always be the first block
 
 Currently the blocks are designed that, the blocks that start with `docker` pull in the base docker image.
@@ -57,14 +57,11 @@ Here is a more elaborated example
 
 ```sh
 ./assemble_blocks.sh docker_gogs w_db_cache_session option_db_postgresql option_cache_redis option_session_mysql
-fig up
+docker-compose up
 ```
 
 This will set up four containters and link them proberly. One for each of
-
-    - gogs
-    - database (postgresql)
-    - cache (redis)
+docker-compose
     - session (mysql)
 
 WARNING: This will not work at the Moment! MySQL session is broken!
@@ -73,7 +70,7 @@ WARNING: This will not work at the Moment! MySQL session is broken!
 Remark
 ------
 
-After you execute `assemble_blocks.sh` you should always trigger `fig build` to inculde the the new init script `init_gogs.sh` in the docker image.
+After you execute `assemble_blocks.sh` you should always trigger `docker-compose build` to inculde the the new init script `init_gogs.sh` in the docker image.
 
 If you want to use another GoGS docker file, but keep everything else the same, you can create a block, e.g. `docker_gogs_custom`, with only a `Dockerfile` and call
 
@@ -86,4 +83,4 @@ This will pull in the `Dockerfile` from `docker_gogs` instead of the one from `d
 `Dockerfile`s for the `master` and `dev` branch are provided as `docker_gogs` and `docker_gogs_dev`
 
 
-[fig]:http://www.fig.sh/
+[docker-compose]:https://docs.docker.com/compose/

+ 8 - 8
docker/assemble_blocks.sh

@@ -10,8 +10,8 @@ gogs_config_file=conf.tmp
 gogs_config=config
 gogs_init_file=$docker_dir/init_gogs.sh
 
-fig_file=fig.yml
-fig_config=fig
+compose_file=docker-compose.yml
+compose_config=docker-compose
 
 gogs_init_template=$template_dir/init_gogs.sh.tpl
 
@@ -28,7 +28,7 @@ if [ "$#" == 0 ]; then
     exit 0
 fi
 
-for file in $gogs_config_file $fig_file; do
+for file in $gogs_config_file $compose_file; do
     if [ -e $file ]; then
         echo "Deleting $file"
         rm $file
@@ -53,10 +53,10 @@ for dir in $@; do
         echo "" >> $gogs_config_file
     fi
 
-    if [ -e $current_dir/$fig_config ]; then
-        echo "Adding $current_dir/$fig_config to $fig_file"
-        cat $current_dir/fig >> $fig_file
-        echo "" >> $fig_file
+    if [ -e $current_dir/$compose_config ]; then
+        echo "Adding $current_dir/$compose_config to $compose_file"
+        cat $current_dir/$compose_config >> $compose_file
+        echo "" >> $compose_file
     fi
 done
 
@@ -69,4 +69,4 @@ d
 if [ -e $gogs_config_file ]; then
     echo "Removing temporary GoGS config"
     rm $gogs_config_file
-fi
+fi

+ 6 - 9
docker/blocks/docker_gogs/Dockerfile

@@ -1,23 +1,20 @@
-FROM ubuntu:14.04
+FROM buildpack-deps:trusty-scm
 
 # This part is taken from the official docker image --------------------
 
 RUN apt-get update && apt-get install -y \
-		build-essential ca-certificates curl \
-		bzr git mercurial openssh-client\
-		--no-install-recommends
+		build-essential --no-install-recommends
 
 ENV GOLANG_VERSION 1.3
 
-RUN curl -sSL http://golang.org/dl/go$GOLANG_VERSION.src.tar.gz \
-	| tar -v -C /usr/src -xz
-WORKDIR /usr/src/go
+RUN curl -sSL https://golang.org/dl/go$GOLANG_VERSION.src.tar.gz \
+		| tar -v -C /usr/src -xz
 
-RUN cd src && ./make.bash --no-clean 2>&1
+RUN cd /usr/src/go/src && ./make.bash --no-clean 2>&1
 
 ENV PATH /usr/src/go/bin:$PATH
 
-RUN mkdir -p /go/src
+RUN mkdir -p /go/src /go/bin && chmod -R 777 /go
 ENV GOPATH /go
 ENV PATH /go/bin:$PATH
 WORKDIR /go

+ 8 - 12
docker/blocks/docker_gogs_dev/Dockerfile

@@ -1,24 +1,20 @@
-FROM ubuntu:14.04
+FROM buildpack-deps:trusty-scm
 
-# This part is derived from the official docker image ------------------
+# This part is taken from the official docker image --------------------
 
-RUN DEBIAN_FRONTEND=noninteractive apt-get update && \
-		apt-get install -qy \
-		build-essential ca-certificates curl \
-		bzr git mercurial openssh-client\
-		--no-install-recommends
+RUN apt-get update && apt-get install -y \
+		build-essential --no-install-recommends
 
 ENV GOLANG_VERSION 1.3
 
-RUN curl -sSL http://golang.org/dl/go$GOLANG_VERSION.src.tar.gz \
-	| tar -v -C /usr/src -xz
-WORKDIR /usr/src/go
+RUN curl -sSL https://golang.org/dl/go$GOLANG_VERSION.src.tar.gz \
+		| tar -v -C /usr/src -xz
 
-RUN cd src && ./make.bash --no-clean 2>&1
+RUN cd /usr/src/go/src && ./make.bash --no-clean 2>&1
 
 ENV PATH /usr/src/go/bin:$PATH
 
-RUN mkdir -p /go/src
+RUN mkdir -p /go/src /go/bin && chmod -R 777 /go
 ENV GOPATH /go
 ENV PATH /go/bin:$PATH
 WORKDIR /go

+ 0 - 0
docker/blocks/option_cache_memcache/fig → docker/blocks/option_cache_memcache/docker-compose


+ 0 - 0
docker/blocks/option_cache_redis/fig → docker/blocks/option_cache_redis/docker-compose


+ 0 - 0
docker/blocks/option_db_mysql/fig → docker/blocks/option_db_mysql/docker-compose


+ 0 - 0
docker/blocks/option_db_postgresql/fig → docker/blocks/option_db_postgresql/docker-compose


+ 0 - 0
docker/blocks/option_session_mysql/fig → docker/blocks/option_session_mysql/docker-compose


+ 0 - 0
docker/blocks/w_cache/fig → docker/blocks/w_cache/docker-compose


+ 0 - 0
docker/blocks/w_cache_session/fig → docker/blocks/w_cache_session/docker-compose


+ 0 - 0
docker/blocks/w_db/fig → docker/blocks/w_db/docker-compose


+ 0 - 0
docker/blocks/w_db_cache/fig → docker/blocks/w_db_cache/docker-compose


+ 0 - 0
docker/blocks/w_db_cache_session/fig → docker/blocks/w_db_cache_session/docker-compose


+ 0 - 0
docker/blocks/w_db_session/fig → docker/blocks/w_db_session/docker-compose


+ 0 - 0
docker/blocks/w_none/fig → docker/blocks/w_none/docker-compose


+ 0 - 0
docker/blocks/w_session/fig → docker/blocks/w_session/docker-compose


+ 3 - 4
models/access.go

@@ -173,13 +173,12 @@ func (repo *Repository) refreshCollaboratorAccesses(e Engine, accessMap map[int6
 func (repo *Repository) recalculateTeamAccesses(e Engine, ignTeamID int64) (err error) {
 	accessMap := make(map[int64]AccessMode, 20)
 
-	if err = repo.refreshCollaboratorAccesses(e, accessMap); err != nil {
-		return fmt.Errorf("refreshCollaboratorAccesses: %v", err)
-	}
-
 	if err = repo.getOwner(e); err != nil {
 		return err
 	}
+	if err = repo.refreshCollaboratorAccesses(e, accessMap); err != nil {
+		return fmt.Errorf("refreshCollaboratorAccesses: %v", err)
+	}
 	if repo.Owner.IsOrganization() {
 		if err = repo.Owner.getTeams(e); err != nil {
 			return err

+ 1 - 0
modules/auth/admin.go

@@ -11,6 +11,7 @@ import (
 )
 
 type AdminEditUserForm struct {
+	FullName     string `form:"fullname" binding:"MaxSize(100)"`
 	Email        string `binding:"Required;Email;MaxSize(50)"`
 	Password     string `binding:"OmitEmpty;MinSize(6);MaxSize(255)"`
 	Website      string `binding:"MaxSize(50)"`

+ 1 - 1
modules/auth/user_form.go

@@ -116,7 +116,7 @@ func (f *AddEmailForm) Validate(ctx *macaron.Context, errs binding.Errors) bindi
 }
 
 type ChangePasswordForm struct {
-	OldPassword string `form:"old_password" binding:"Required;MinSize(6);MaxSize(255)"`
+	OldPassword string `form:"old_password" binding:"Required;MinSize(1);MaxSize(255)"`
 	Password    string `form:"password" binding:"Required;MinSize(6);MaxSize(255)"`
 	Retype      string `form:"retype"`
 }

+ 1 - 1
modules/base/markdown.go

@@ -198,7 +198,7 @@ func RenderRawMarkdown(body []byte, urlPrefix string) []byte {
 	extensions |= blackfriday.EXTENSION_FENCED_CODE
 	extensions |= blackfriday.EXTENSION_AUTOLINK
 	extensions |= blackfriday.EXTENSION_STRIKETHROUGH
-	extensions |= blackfriday.EXTENSION_HARD_LINE_BREAK
+	//extensions |= blackfriday.EXTENSION_HARD_LINE_BREAK
 	extensions |= blackfriday.EXTENSION_SPACE_HEADERS
 	extensions |= blackfriday.EXTENSION_NO_EMPTY_LINE_BEFORE_BLOCK
 

+ 0 - 2
packager/debian/postinst

@@ -18,8 +18,6 @@ case "$1" in
     chown ${APP_USER}.${APP_GROUP} $(dirname ${APP_CONFIG})
     [ -f ${APP_CONFIG} ] || ${CLI} run cp conf/app.ini ${APP_CONFIG}
     ${CLI} config:set USER=${APP_USER}
-    PORT=$(${CLI} config:get PORT || echo "6000")
-    sed -i "s|HTTP_PORT = 3000|HTTP_PORT = ${PORT}|" ${APP_CONFIG}
     sed -i "s|RUN_USER = git|RUN_USER = ${APP_USER}|" ${APP_CONFIG}
     sed -i "s|RUN_MODE = dev|RUN_MODE = prod|" ${APP_CONFIG}
 

+ 1 - 0
routers/admin/users.go

@@ -185,6 +185,7 @@ func EditUserPost(ctx *middleware.Context, form auth.AdminEditUserForm) {
 		u.EncodePasswd()
 	}
 
+	u.FullName = form.FullName
 	u.Email = form.Email
 	u.Website = form.Website
 	u.Location = form.Location

+ 0 - 1
routers/repo/download.go

@@ -27,7 +27,6 @@ func ServeBlob(ctx *middleware.Context, blob *git.Blob) error {
 
 	_, isTextFile := base.IsTextFile(buf)
 	_, isImageFile := base.IsImageFile(buf)
-	ctx.Resp.Header().Set("Content-Type", "text/plain")
 	if !isTextFile && !isImageFile {
 		ctx.Resp.Header().Set("Content-Disposition", "attachment; filename="+path.Base(ctx.Repo.TreeName))
 		ctx.Resp.Header().Set("Content-Transfer-Encoding", "binary")

+ 1 - 0
routers/user/home.go

@@ -152,6 +152,7 @@ func ShowSSHKeys(ctx *middleware.Context, uid int64) {
 	var buf bytes.Buffer
 	for i := range keys {
 		buf.WriteString(keys[i].OmitEmail())
+		buf.WriteString("\n")
 	}
 	ctx.RenderData(200, buf.Bytes())
 }

+ 8 - 2
scripts/build.sh

@@ -4,8 +4,14 @@ rm -rf $outPath
 mkdir $outPath
 
 go build ../gogs.go
-chmod +x gogs
-mv gogs $outPath/
+PLATFORM=`uname | cut -d _ -f 1`
+if [ $PLATFORM = "MINGW32" ] || [ $PLATFORM = "MINGW64" ] || [ $PLATFORM = "CYGWIN" ]; then
+	GOGS_EXE=gogs.exe
+else
+	GOGS_EXE=gogs
+fi
+chmod +x $GOGS_EXE
+mv $GOGS_EXE $outPath/
 
 cp -r ../conf/ $outPath/conf/
 cp -r ../custom/ $outPath/custom/

+ 4 - 2
scripts/init/debian/gogs

@@ -49,10 +49,12 @@ do_start()
 	#   1 if daemon was already running
 	#   2 if daemon could not be started
 	sh -c "start-stop-daemon --start --quiet --pidfile $PIDFILE --make-pidfile \\
-			--exec $DAEMON -- $DAEMON_ARGS --test > /dev/null \\
+			--test --chdir $WORKINGDIR --chuid $USER \\
+			--exec $DAEMON -- $DAEMON_ARGS > /dev/null \\
 			|| return 1"
 	sh -c "start-stop-daemon --start --quiet --pidfile $PIDFILE --make-pidfile \\
-			--background --exec /bin/su -- - $USER -c \"cd \\\"$WORKINGDIR\\\" && $DAEMON -- $DAEMON_ARGS\" \\
+			--background --chdir $WORKINGDIR --chuid $USER \\
+			--exec $DAEMON -- $DAEMON_ARGS \\
 			|| return 2"
 }
 

+ 1 - 1
scripts/init/freebsd/gogs

@@ -21,7 +21,7 @@ load_rc_config $name
 : ${gogs_enable:="NO"}
 : ${gogs_directory:="/home/git"}
 
-command="${gogs_directory}/scripts/start.sh"
+command="${gogs_directory}/gogs web"
 
 pidfile="${gogs_directory}/${name}.pid"
 

+ 1 - 1
scripts/systemd/gogs.service

@@ -14,7 +14,7 @@ Group=git
 WorkingDirectory=/home/git/gogs
 ExecStart=/home/git/gogs/gogs web
 Restart=always
-Environment="USER=git","HOME=/home/git"
+Environment=USER=git HOME=/home/git
 
 [Install]
 WantedBy=multi-user.target

+ 4 - 0
templates/admin/user/edit.tmpl

@@ -32,6 +32,10 @@
                                     <label>{{.i18n.Tr "username"}}</label>
                                     <label class="text-left">{{.User.Name}}</label>
                                 </div>
+                                <div class="field">
+                                    <label for="full-name">{{.i18n.Tr "settings.full_name"}}</label>
+                                    <input class="ipt ipt-large ipt-radius {{if .Err_FullName}}ipt-error{{end}}" id="full-name" name="fullname" type="text" value="{{.User.FullName}}" />
+                                </div>
                                 <div class="field">
                                     <label class="req" for="email">{{.i18n.Tr "email"}}</label>
                                     <input class="ipt ipt-large ipt-radius {{if .Err_Email}}ipt-error{{end}}" id="email" name="email" type="email" value="{{.User.Email}}" required/>

+ 1 - 0
templates/base/head.tmpl

@@ -6,6 +6,7 @@
 	<meta name="author" content="Gogs - Go Git Service" />
 	<meta name="description" content="Gogs(Go Git Service) a painless self-hosted Git Service written in Go" />
 	<meta name="keywords" content="go, git, self-hosted, gogs">
+	<meta name="referrer" content="no-referrer" />
 	<meta name="_csrf" content="{{.CsrfToken}}" />
 	{{if .GoGetImport}}
 	<meta name="go-import" content="{{.GoGetImport}} git {{.CloneLink.HTTPS}}">

+ 1 - 0
templates/base/head_old.tmpl

@@ -8,6 +8,7 @@
         <meta name="author" content="Gogs - Go Git Service" />
 		<meta name="description" content="Gogs(Go Git Service) is a GitHub-like clone in the Go Programming Language" />
 		<meta name="keywords" content="go, git">
+		<meta name="referrer" content="no-referrer" />
 		<meta name="_csrf" content="{{.CsrfToken}}" />
 		{{if .GoGetImport}}<meta name="go-import" content="{{.GoGetImport}} git {{.CloneLink.HTTPS}}">{{end}}
 

+ 2 - 2
templates/install.tmpl

@@ -185,7 +185,7 @@
               </div>
               <div class="inline field {{if .Err_AdminPasswd}}error{{end}}">
                 <label for="admin_passwd">{{.i18n.Tr "install.admin_password"}}</label>
-                <input id="admin_passwd" name="admin_passwd" value="{{.admin_passwd}}">
+                <input id="admin_passwd" name="admin_passwd" type="password" value="{{.admin_passwd}}">
               </div>
               <div class="inline field {{if .Err_AdminPasswd}}error{{end}}">
                 <label for="admin_confirm_passwd">{{.i18n.Tr "install.confirm_password"}}</label>
@@ -208,4 +208,4 @@
 		</div>
 	</div>
 </div>
-{{template "base/footer" .}}
+{{template "base/footer" .}}

+ 1 - 0
templates/ng/base/head.tmpl

@@ -6,6 +6,7 @@
         <meta name="author" content="Gogs - Go Git Service" />
 		<meta name="description" content="Gogs(Go Git Service) a painless self-hosted Git Service written in Go" />
 		<meta name="keywords" content="go, git, self-hosted, gogs">
+		<meta name="referrer" content="no-referrer" />
 		<meta name="_csrf" content="{{.CsrfToken}}" />
 		{{if .GoGetImport}}<meta name="go-import" content="{{.GoGetImport}} git {{.CloneLink.HTTPS}}">{{end}}
 

+ 5 - 0
templates/repo/view_file.tmpl

@@ -12,6 +12,11 @@
             <strong class="file-name">{{.FileName}}</strong><span class="file-size">{{FileSize .FileSize}}</span>
 	    {{end}}
         {{if not .ReadmeInList}}
+            {{if not .IsCommit}}
+                <a class="right" href="{{.RepoLink}}/src/{{.CommitId}}/{{.TreeName}}">
+                    <button class="btn btn-medium btn-gray btn-right-radius btn-comb">{{.i18n.Tr "repo.file_permalink"}}</button>
+                </a>
+            {{end}}
             <a class="right" href="{{.RepoLink}}/commits/{{EscapePound .BranchName}}/{{.TreeName}}">
                 <button class="btn btn-medium btn-gray btn-right-radius btn-comb">{{.i18n.Tr "repo.file_history"}}</button>
             </a>