| @@ -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, | ||||
| @@ -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 | ||||
| - gogs | |||||
| - database (postgresql) | |||||
| - cache (redis) | |||||
| docker-compose | |||||
| - 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 | |||||
| fig_config=fig | |||||
| compose_file=docker-compose.yml | |||||
| 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 | |||||
| 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 | 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 \ | |||||
| bzr git mercurial openssh-client\ | |||||
| --no-install-recommends | |||||
| build-essential --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 \ | |||||
| | 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 | 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 && \ | |||||
| 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 | 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 | 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 | |||||
| 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 ../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> | ||||