Merge branch 'develop' of github.com:gogits/gogs into feature/page_issues
This commit is contained in:
commit
54b58e988d
49 changed files with 87 additions and 65 deletions
|
@ -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,
|
||||||
|
|
14
cmd/serve.go
14
cmd/serve.go
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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=コミットの検索
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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=Поиск коммитов
|
||||||
|
|
|
@ -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=搜索提交历史
|
||||||
|
|
|
@ -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=搜索提交歷史
|
||||||
|
|
|
@ -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/
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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)"`
|
||||||
|
|
|
@ -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"`
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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")
|
||||||
|
|
|
@ -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())
|
||||||
}
|
}
|
||||||
|
|
|
@ -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/
|
||||||
|
|
|
@ -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"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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"
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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/>
|
||||||
|
|
|
@ -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}}">
|
||||||
|
|
|
@ -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}}
|
||||||
|
|
||||||
|
|
|
@ -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" .}}
|
||||||
|
|
|
@ -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}}
|
||||||
|
|
||||||
|
|
|
@ -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>
|
||||||
|
|
Reference in a new issue