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

This commit is contained in:
Unknwon 2015-07-25 00:49:40 +08:00
commit 54b58e988d
49 changed files with 87 additions and 65 deletions

View File

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

View File

@ -82,7 +82,7 @@ func runServ(c *cli.Context) {
} }
if len(c.Args()) < 1 { 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], "-") keys := strings.Split(c.Args()[0], "-")
@ -97,7 +97,7 @@ func runServ(c *cli.Context) {
user, err := models.GetUserByKeyId(keyId) user, err := models.GetUserByKeyId(keyId)
if err != nil { 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") cmd := os.Getenv("SSH_ORIGINAL_COMMAND")
@ -113,7 +113,7 @@ func runServ(c *cli.Context) {
repoPath := strings.Trim(args, "'") repoPath := strings.Trim(args, "'")
rr := strings.SplitN(repoPath, "/", 2) rr := strings.SplitN(repoPath, "/", 2)
if len(rr) != 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] repoUserName := rr[0]
repoName := strings.TrimSuffix(rr[1], ".git") repoName := strings.TrimSuffix(rr[1], ".git")
@ -123,7 +123,7 @@ func runServ(c *cli.Context) {
if err == models.ErrUserNotExist { if err == models.ErrUserNotExist {
fail("Repository owner does not exist", "Unregistered owner: %s", repoUserName) 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) 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(_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] requestedMode, has := COMMANDS[verb]
@ -171,7 +171,7 @@ func runServ(c *cli.Context) {
gitcmd.Stdin = os.Stdin gitcmd.Stdin = os.Stdin
gitcmd.Stderr = os.Stderr gitcmd.Stderr = os.Stderr
if err = gitcmd.Run(); err != nil { 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 { if requestedMode == models.ACCESS_MODE_WRITE {
@ -184,7 +184,7 @@ func runServ(c *cli.Context) {
err = models.Update(task.RefName, task.OldCommitId, task.NewCommitId, err = models.Update(task.RefName, task.OldCommitId, task.NewCommitId,
user.Name, repoUserName, repoName, user.Id) user.Name, repoUserName, repoName, user.Id)
if err != nil { if err != nil {
log.GitLogger.Error(2, "Fail to update: %v", err) log.GitLogger.Error(2, "Failed to update: %v", err)
} }
} }

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -3,13 +3,13 @@ Docker
TOOLS ARE WRITTEN FOR TESTING AND TO SEE WHAT IT IS! 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: The most simple setup will look like this:
```sh ```sh
./assemble_blocks.sh docker_gogs w_db option_db_mysql ./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. `./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). `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. 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. 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! This includes container linking!
Just have a look at them and it will be clear how to write your own blocks. Just have a look at them and it will be clear how to write your own blocks.
Just some things 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 - 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. 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 ```sh
./assemble_blocks.sh docker_gogs w_db_cache_session option_db_postgresql option_cache_redis option_session_mysql ./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 This will set up four containters and link them proberly. One for each of
docker-compose
- gogs
- database (postgresql)
- cache (redis)
- session (mysql) - session (mysql)
WARNING: This will not work at the Moment! MySQL session is broken! 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 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 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` `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/

View File

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

View File

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

View File

@ -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 && \ RUN apt-get update && apt-get install -y \
apt-get install -qy \ build-essential --no-install-recommends
build-essential ca-certificates curl \
bzr git mercurial openssh-client\
--no-install-recommends
ENV GOLANG_VERSION 1.3 ENV GOLANG_VERSION 1.3
RUN curl -sSL http://golang.org/dl/go$GOLANG_VERSION.src.tar.gz \ RUN curl -sSL https://golang.org/dl/go$GOLANG_VERSION.src.tar.gz \
| tar -v -C /usr/src -xz | tar -v -C /usr/src -xz
WORKDIR /usr/src/go
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 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 GOPATH /go
ENV PATH /go/bin:$PATH ENV PATH /go/bin:$PATH
WORKDIR /go WORKDIR /go

View File

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

View File

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

View File

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

View File

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

View File

@ -18,8 +18,6 @@ case "$1" in
chown ${APP_USER}.${APP_GROUP} $(dirname ${APP_CONFIG}) chown ${APP_USER}.${APP_GROUP} $(dirname ${APP_CONFIG})
[ -f ${APP_CONFIG} ] || ${CLI} run cp conf/app.ini ${APP_CONFIG} [ -f ${APP_CONFIG} ] || ${CLI} run cp conf/app.ini ${APP_CONFIG}
${CLI} config:set USER=${APP_USER} ${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_USER = git|RUN_USER = ${APP_USER}|" ${APP_CONFIG}
sed -i "s|RUN_MODE = dev|RUN_MODE = prod|" ${APP_CONFIG} sed -i "s|RUN_MODE = dev|RUN_MODE = prod|" ${APP_CONFIG}

View File

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

View File

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

View File

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

View File

@ -4,8 +4,14 @@ rm -rf $outPath
mkdir $outPath mkdir $outPath
go build ../gogs.go go build ../gogs.go
chmod +x gogs PLATFORM=`uname | cut -d _ -f 1`
mv gogs $outPath/ 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 ../conf/ $outPath/conf/
cp -r ../custom/ $outPath/custom/ cp -r ../custom/ $outPath/custom/

View File

@ -49,10 +49,12 @@ do_start()
# 1 if daemon was already running # 1 if daemon was already running
# 2 if daemon could not be started # 2 if daemon could not be started
sh -c "start-stop-daemon --start --quiet --pidfile $PIDFILE --make-pidfile \\ 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" || return 1"
sh -c "start-stop-daemon --start --quiet --pidfile $PIDFILE --make-pidfile \\ 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" || return 2"
} }

View File

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

View File

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

View File

@ -32,6 +32,10 @@
<label>{{.i18n.Tr "username"}}</label> <label>{{.i18n.Tr "username"}}</label>
<label class="text-left">{{.User.Name}}</label> <label class="text-left">{{.User.Name}}</label>
</div> </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"> <div class="field">
<label class="req" for="email">{{.i18n.Tr "email"}}</label> <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/> <input class="ipt ipt-large ipt-radius {{if .Err_Email}}ipt-error{{end}}" id="email" name="email" type="email" value="{{.User.Email}}" required/>

View File

@ -6,6 +6,7 @@
<meta name="author" content="Gogs - Go Git Service" /> <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="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="keywords" content="go, git, self-hosted, gogs">
<meta name="referrer" content="no-referrer" />
<meta name="_csrf" content="{{.CsrfToken}}" /> <meta name="_csrf" content="{{.CsrfToken}}" />
{{if .GoGetImport}} {{if .GoGetImport}}
<meta name="go-import" content="{{.GoGetImport}} git {{.CloneLink.HTTPS}}"> <meta name="go-import" content="{{.GoGetImport}} git {{.CloneLink.HTTPS}}">

View File

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

View File

@ -185,7 +185,7 @@
</div> </div>
<div class="inline field {{if .Err_AdminPasswd}}error{{end}}"> <div class="inline field {{if .Err_AdminPasswd}}error{{end}}">
<label for="admin_passwd">{{.i18n.Tr "install.admin_password"}}</label> <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>
<div class="inline field {{if .Err_AdminPasswd}}error{{end}}"> <div class="inline field {{if .Err_AdminPasswd}}error{{end}}">
<label for="admin_confirm_passwd">{{.i18n.Tr "install.confirm_password"}}</label> <label for="admin_confirm_passwd">{{.i18n.Tr "install.confirm_password"}}</label>
@ -208,4 +208,4 @@
</div> </div>
</div> </div>
</div> </div>
{{template "base/footer" .}} {{template "base/footer" .}}

View File

@ -6,6 +6,7 @@
<meta name="author" content="Gogs - Go Git Service" /> <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="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="keywords" content="go, git, self-hosted, gogs">
<meta name="referrer" content="no-referrer" />
<meta name="_csrf" content="{{.CsrfToken}}" /> <meta name="_csrf" content="{{.CsrfToken}}" />
{{if .GoGetImport}}<meta name="go-import" content="{{.GoGetImport}} git {{.CloneLink.HTTPS}}">{{end}} {{if .GoGetImport}}<meta name="go-import" content="{{.GoGetImport}} git {{.CloneLink.HTTPS}}">{{end}}

View File

@ -12,6 +12,11 @@
<strong class="file-name">{{.FileName}}</strong><span class="file-size">{{FileSize .FileSize}}</span> <strong class="file-name">{{.FileName}}</strong><span class="file-size">{{FileSize .FileSize}}</span>
{{end}} {{end}}
{{if not .ReadmeInList}} {{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}}"> <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> <button class="btn btn-medium btn-gray btn-right-radius btn-comb">{{.i18n.Tr "repo.file_history"}}</button>
</a> </a>