Merge branch 'dev' of https://github.com/gogits/gogs into dev
commit
cc1eb5643e
10
README.md
10
README.md
|
@ -24,10 +24,10 @@ More importantly, Gogs only needs one binary to setup your own project hosting o
|
||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
- Please see [Wiki](https://github.com/gogits/gogs/wiki) for project design, known issues, and change log.
|
- Please see [Documentation](http://gogs.io/docs/intro/) for project design, known issues, and change log.
|
||||||
- See [Trello Board](https://trello.com/b/uxAoeLUl/gogs-go-git-service) to follow the develop team.
|
- See [Trello Board](https://trello.com/b/uxAoeLUl/gogs-go-git-service) to follow the develop team.
|
||||||
- Try it before anything? Do it [online](http://try.gogits.org/Unknown/gogs) or go down to **Installation -> Install from binary** section!
|
- Try it before anything? Do it [online](http://try.gogits.org/Unknown/gogs) or go down to **Installation -> Install from binary** section!
|
||||||
- Having troubles? Get help from [Troubleshooting](https://github.com/gogits/gogs/wiki/Troubleshooting).
|
- Having troubles? Get help from [Troubleshooting](http://gogs.io/docs/intro/troubleshooting.md).
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
|
@ -49,12 +49,12 @@ More importantly, Gogs only needs one binary to setup your own project hosting o
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
Make sure you install [Prerequirements](https://github.com/gogits/gogs/wiki/Prerequirements) first.
|
Make sure you install [Prerequirements](http://gogs.io/docs/installation/) first.
|
||||||
|
|
||||||
There are 3 ways to install Gogs:
|
There are 3 ways to install Gogs:
|
||||||
|
|
||||||
- [Install from binary](https://github.com/gogits/gogs/wiki/Install-from-binary): **STRONGLY RECOMMENDED**
|
- [Install from binary](http://gogs.io/docs/installation/install_from_binary.md): **STRONGLY RECOMMENDED**
|
||||||
- [Install from source](https://github.com/gogits/gogs/wiki/Install-from-source)
|
- [Install from source](http://gogs.io/docs/installation/install_from_source.md)
|
||||||
- [Ship with Docker](https://github.com/gogits/gogs/tree/master/dockerfiles)
|
- [Ship with Docker](https://github.com/gogits/gogs/tree/master/dockerfiles)
|
||||||
|
|
||||||
## Acknowledgments
|
## Acknowledgments
|
||||||
|
|
10
README_ZH.md
10
README_ZH.md
|
@ -15,10 +15,10 @@ Gogs 完全使用 Go 语言来实现对 Git 数据的操作,实现 **零** 依
|
||||||
|
|
||||||
## 项目概览
|
## 项目概览
|
||||||
|
|
||||||
- 有关项目设计、已知问题和变更日志,请通过 [Wiki](https://github.com/gogits/gogs/wiki) 查看。
|
- 有关项目设计、已知问题和变更日志,请通过 [使用手册](http://gogs.io/docs/intro/) 查看。
|
||||||
- 您可以到 [Trello Board](https://trello.com/b/uxAoeLUl/gogs-go-git-service) 跟随开发团队的脚步。
|
- 您可以到 [Trello Board](https://trello.com/b/uxAoeLUl/gogs-go-git-service) 跟随开发团队的脚步。
|
||||||
- 想要先睹为快?通过 [在线体验](http://try.gogits.org/Unknown/gogs) 或查看 **安装部署 -> 二进制安装** 小节。
|
- 想要先睹为快?通过 [在线体验](http://try.gogits.org/Unknown/gogs) 或查看 **安装部署 -> 二进制安装** 小节。
|
||||||
- 使用过程中遇到问题?尝试从 [故障排查](https://github.com/gogits/gogs/wiki/Troubleshooting) 页面获取帮助。
|
- 使用过程中遇到问题?尝试从 [故障排查](http://gogs.io/docs/intro/troubleshooting.md) 页面获取帮助。
|
||||||
|
|
||||||
## 功能特性
|
## 功能特性
|
||||||
|
|
||||||
|
@ -41,12 +41,12 @@ Gogs 完全使用 Go 语言来实现对 Git 数据的操作,实现 **零** 依
|
||||||
|
|
||||||
## 安装部署
|
## 安装部署
|
||||||
|
|
||||||
在安装 Gogs 之前,您需要先安装 [基本环境](https://github.com/gogits/gogs/wiki/Prerequirements)。
|
在安装 Gogs 之前,您需要先安装 [基本环境](http://gogs.io/docs/installation/)。
|
||||||
|
|
||||||
然后,您可以通过以下 3 种方式来安装 Gogs:
|
然后,您可以通过以下 3 种方式来安装 Gogs:
|
||||||
|
|
||||||
- [二进制安装](https://github.com/gogits/gogs/wiki/Install-from-binary): **强烈推荐**
|
- [二进制安装](http://gogs.io/docs/installation/install_from_binary.md): **强烈推荐**
|
||||||
- [源码安装](https://github.com/gogits/gogs/wiki/Install-from-source)
|
- [源码安装](http://gogs.io/docs/installation/install_from_source.md)
|
||||||
- [采用 Docker 部署](https://github.com/gogits/gogs/tree/master/dockerfiles)
|
- [采用 Docker 部署](https://github.com/gogits/gogs/tree/master/dockerfiles)
|
||||||
|
|
||||||
## 特别鸣谢
|
## 特别鸣谢
|
||||||
|
|
|
@ -15,11 +15,9 @@ LICENSES = Apache v2 License|GPL v2|MIT License|Affero GPL|Artistic License 2.0|
|
||||||
[server]
|
[server]
|
||||||
PROTOCOL = http
|
PROTOCOL = http
|
||||||
DOMAIN = localhost
|
DOMAIN = localhost
|
||||||
ROOT_URL = %(PROTOCOL)s://%(DOMAIN)s:%(HTTP_PORT)s/
|
ROOT_URL = %(PROTOCOL)s://%(DOMAIN)s:3000/
|
||||||
; Disable CDN even in "prod" mode
|
; Disable CDN even in "prod" mode
|
||||||
OFFLINE_MODE = false
|
OFFLINE_MODE = false
|
||||||
HTTP_ADDR =
|
|
||||||
HTTP_PORT = 3000
|
|
||||||
; Generate steps:
|
; Generate steps:
|
||||||
; $ cd path/to/gogs/custom/https
|
; $ cd path/to/gogs/custom/https
|
||||||
; $ go run $GOROOT/src/pkg/crypto/tls/generate_cert.go -ca=true -duration=8760h0m0s -host=myhost.example.com
|
; $ go run $GOROOT/src/pkg/crypto/tls/generate_cert.go -ca=true -duration=8760h0m0s -host=myhost.example.com
|
||||||
|
|
|
@ -1,26 +0,0 @@
|
||||||
### Binary install gogs on ubuntu 14.04 LTS
|
|
||||||
|
|
||||||
### create user and install denpendency
|
|
||||||
- sudo adduser git
|
|
||||||
- sudo apt-get update
|
|
||||||
- sudo apt-get upgrade
|
|
||||||
- sudo apt-get install git
|
|
||||||
- sudo apt-get install mysql-server
|
|
||||||
|
|
||||||
### create the database
|
|
||||||
- $mysql -u root -p
|
|
||||||
- mysql> SET GLOBAL storage_engine = 'InnoDB';
|
|
||||||
- mysql> CREATE DATABASE gogs CHARACTER SET utf8 COLLATE utf8_bin;
|
|
||||||
- mysql> GRANT ALL PRIVILEGES ON gogs.* TO 'root'@'localhost' IDENTIFIED BY 'password';
|
|
||||||
- mysql> FLUSH PRIVILEGES;
|
|
||||||
- mysql> QUIT
|
|
||||||
|
|
||||||
### install the gogs
|
|
||||||
- mkdir gogs
|
|
||||||
- cd gogs
|
|
||||||
- curl -L http://gobuild.io/github.com/gogits/gogs/v0.3.0/linux/amd64 -o v0.3.0.zip
|
|
||||||
- unzip v0.3.0.zip
|
|
||||||
- ./start.sh
|
|
||||||
|
|
||||||
> The up-to-date binary could be found at
|
|
||||||
> http://gobuild.io/download/github.com/gogits/gogs
|
|
|
@ -1,48 +0,0 @@
|
||||||
##Install gogs under ubuntu 14.04 LTS 32bit from source code
|
|
||||||
|
|
||||||
###Requirements
|
|
||||||
- Go Programming Language: Version >= 1.2
|
|
||||||
- git(bash): Version >= 1.6.6(both server and client)
|
|
||||||
- MySQL: Version >= 5.1 or PostgreSQL or NOTHING.
|
|
||||||
|
|
||||||
### Create the user which will run git
|
|
||||||
- sudo adduser git
|
|
||||||
- su git
|
|
||||||
|
|
||||||
### Install git and Mysql-server
|
|
||||||
- sudo apt-get install git
|
|
||||||
- sudo apt-get install mysql-server
|
|
||||||
|
|
||||||
### Create database
|
|
||||||
- $ mysql -u root -p
|
|
||||||
- mysql> SET GLOBAL storage_engine = 'InnoDB';
|
|
||||||
- mysql> CREATE DATABASE gogs CHARACTER SET utf8 COLLATE utf8_bin;
|
|
||||||
- mysql> GRANT ALL PRIVILEGES ON gogs.* TO 'root'@'localhost' IDENTIFIED BY 'pasword';
|
|
||||||
- mysql> FLUSH PRIVILEGES;
|
|
||||||
- mysql> QUIT
|
|
||||||
|
|
||||||
### install go from source
|
|
||||||
- sudo apt-get install build-essential
|
|
||||||
- sudo apt-get install mercurial
|
|
||||||
- hg clone -r release https://go.googlecode.com/hg/ /home/git/golang/
|
|
||||||
|
|
||||||
|
|
||||||
- echo export GOROOT=/home/git/golang >>.bashrc
|
|
||||||
- echo export GOARCH=386 >>.bashrc
|
|
||||||
- echo export GOOS=linux >>.bashrc
|
|
||||||
- echo export GOBIN= /home/git/golang/bin >>.bashrc
|
|
||||||
- echo export GOPATH=$HOME/app/Go >>.bashrc
|
|
||||||
- echo PATH=${PATH}: /$HOME/golang/bin >>.bashrc
|
|
||||||
- cd $GOROOT/src
|
|
||||||
- ./make.bash
|
|
||||||
|
|
||||||
### Download and install dependencies
|
|
||||||
- $ go get -u github.com/gogits/gogs
|
|
||||||
|
|
||||||
### Build main program
|
|
||||||
- $ cd $GOPATH/src/github.com/gogits/gogs
|
|
||||||
- $ go build
|
|
||||||
- $ ./start.sh
|
|
||||||
|
|
||||||
### At present, you could access gogs from http://localhost:3000
|
|
||||||
|
|
|
@ -1,29 +0,0 @@
|
||||||
# Configs of the docker images, you might have specify your own configs here.
|
|
||||||
# type of database, support 'mysql' and 'postgres'
|
|
||||||
DB_TYPE="postgres"
|
|
||||||
DB_PASSWORD="YOUR_DB_PASSWORD"
|
|
||||||
DB_RUN_NAME="YOUR_DB_RUN_NAME"
|
|
||||||
HOST_PORT="YOUR_HOST_PORT"
|
|
||||||
|
|
||||||
# Replace the database root password in database image Dockerfile.
|
|
||||||
sed -i "s/THE_DB_PASSWORD/$DB_PASSWORD/g" images/$DB_TYPE/Dockerfile
|
|
||||||
# Replace the database root password in gogits image deploy.sh file.
|
|
||||||
sed -i "s/THE_DB_PASSWORD/$DB_PASSWORD/g" images/gogits/deploy.sh
|
|
||||||
# Replace the database type in gogits image deploy.sh file.
|
|
||||||
sed -i "s/THE_DB_TYPE/$DB_TYPE/g" images/gogits/deploy.sh
|
|
||||||
|
|
||||||
# Build the database image
|
|
||||||
cd images/$DB_TYPE
|
|
||||||
docker build -t gogs/$DB_TYPE .
|
|
||||||
#
|
|
||||||
## Build the gogits image
|
|
||||||
cd ../gogits
|
|
||||||
docker build -t gogs/gogits .
|
|
||||||
#
|
|
||||||
## Run MySQL image with name
|
|
||||||
docker run -d --name $DB_RUN_NAME gogs/$DB_TYPE
|
|
||||||
#
|
|
||||||
## Run gogits image and link it to the database image
|
|
||||||
echo "Now we have the $DB_TYPE image(running) and gogs image, use the follow command to start gogs service:"
|
|
||||||
echo -e "\033[33m docker run -i -t --link $DB_RUN_NAME:db -p $HOST_PORT:3000 gogs/gogits \033[0m"
|
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
FROM stackbrew/ubuntu:13.10
|
FROM stackbrew/ubuntu:13.10
|
||||||
MAINTAINER Meaglith Ma <genedna@gmail.com> (@genedna)
|
MAINTAINER Meaglith Ma <genedna@gmail.com> (@genedna)
|
||||||
|
|
||||||
ENV DEBIAN_FRONTEND noninteractive
|
|
||||||
|
|
||||||
#aliyun#RUN echo "deb http://mirrors.aliyun.com/ubuntu/ saucy main restricted" > /etc/apt/sources.list && echo "deb http://mirrors.aliyun.com/ubuntu/ saucy-updates main restricted" >> /etc/apt/sources.list && echo "deb http://mirrors.aliyun.com/ubuntu/ saucy universe" >> /etc/apt/sources.list && echo "deb http://mirrors.aliyun.com/ubuntu/ saucy-updates universe" >> /etc/apt/sources.list && echo "deb http://mirrors.aliyun.com/ubuntu/ saucy multiverse" >> /etc/apt/sources.list && echo "deb http://mirrors.aliyun.com/ubuntu/ saucy-updates multiverse" >> /etc/apt/sources.list && echo "deb http://mirrors.aliyun.com/ubuntu/ saucy-backports main restricted universe multiverse" >> /etc/apt/sources.list && echo "deb http://mirrors.aliyun.com/ubuntu/ saucy-security main restricted" >> /etc/apt/sources.list && echo "deb http://mirrors.aliyun.com/ubuntu/ saucy-security universe" >> /etc/apt/sources.list && echo "deb http://mirrors.aliyun.com/ubuntu/ saucy-security multiverse" >> /etc/apt/sources.list
|
#aliyun#RUN echo "deb http://mirrors.aliyun.com/ubuntu/ saucy main restricted" > /etc/apt/sources.list && echo "deb http://mirrors.aliyun.com/ubuntu/ saucy-updates main restricted" >> /etc/apt/sources.list && echo "deb http://mirrors.aliyun.com/ubuntu/ saucy universe" >> /etc/apt/sources.list && echo "deb http://mirrors.aliyun.com/ubuntu/ saucy-updates universe" >> /etc/apt/sources.list && echo "deb http://mirrors.aliyun.com/ubuntu/ saucy multiverse" >> /etc/apt/sources.list && echo "deb http://mirrors.aliyun.com/ubuntu/ saucy-updates multiverse" >> /etc/apt/sources.list && echo "deb http://mirrors.aliyun.com/ubuntu/ saucy-backports main restricted universe multiverse" >> /etc/apt/sources.list && echo "deb http://mirrors.aliyun.com/ubuntu/ saucy-security main restricted" >> /etc/apt/sources.list && echo "deb http://mirrors.aliyun.com/ubuntu/ saucy-security universe" >> /etc/apt/sources.list && echo "deb http://mirrors.aliyun.com/ubuntu/ saucy-security multiverse" >> /etc/apt/sources.list
|
||||||
|
|
||||||
#nchc#RUN echo "deb http://free.nchc.org.tw/ubuntu/ saucy main restricted" >> /etc/apt/source.list && echo "deb-src http://free.nchc.org.tw/ubuntu/ saucy main restricted" >> /etc/apt/source.list && echo "deb http://free.nchc.org.tw/ubuntu/ saucy-updates main restricted" >> /etc/apt/source.list && echo "deb-src http://free.nchc.org.tw/ubuntu/ saucy-updates main restricted" >> /etc/apt/source.list && echo "deb http://free.nchc.org.tw/ubuntu/ saucy universe" >> /etc/apt/source.list && echo "deb-src http://free.nchc.org.tw/ubuntu/ saucy universe" >> /etc/apt/source.list && echo "deb http://free.nchc.org.tw/ubuntu/ saucy-updates universe" >> /etc/apt/source.list && echo "deb-src http://free.nchc.org.tw/ubuntu/ saucy-updates universe" >> /etc/apt/source.list && echo "deb http://free.nchc.org.tw/ubuntu/ saucy multiverse" >> /etc/apt/source.list && echo "deb-src http://free.nchc.org.tw/ubuntu/ saucy multiverse" >> /etc/apt/source.list && echo "deb http://free.nchc.org.tw/ubuntu/ saucy-updates multiverse" >> /etc/apt/source.list && echo "deb-src http://free.nchc.org.tw/ubuntu/ saucy-updates multiverse" >> /etc/apt/source.list && echo "deb http://free.nchc.org.tw/ubuntu/ saucy-backports main restricted universe multiverse" >> /etc/apt/source.list && echo "deb-src http://free.nchc.org.tw/ubuntu/ saucy-backports main restricted universe multiverse" >> /etc/apt/source.list && echo "deb http://free.nchc.org.tw/ubuntu/ saucy-security main restricted" >> /etc/apt/source.list && echo "deb-src http://free.nchc.org.tw/ubuntu/ saucy-security main restricted" >> /etc/apt/source.list && echo "deb http://free.nchc.org.tw/ubuntu/ saucy-security universe" >> /etc/apt/source.list && echo "deb-src http://free.nchc.org.tw/ubuntu/ saucy-security universe" >> /etc/apt/source.list && echo "deb http://free.nchc.org.tw/ubuntu/ saucy-security multiverse" >> /etc/apt/source.list && echo "deb-src http://free.nchc.org.tw/ubuntu/ saucy-security multiverse" >> /etc/apt/source.list && echo "deb http://extras.ubuntu.com/ubuntu saucy main" >> /etc/apt/source.list && echo "deb-src http://extras.ubuntu.com/ubuntu saucy main" >> /etc/apt/source.list
|
#nchc#RUN echo "deb http://free.nchc.org.tw/ubuntu/ saucy main restricted" >> /etc/apt/source.list && echo "deb-src http://free.nchc.org.tw/ubuntu/ saucy main restricted" >> /etc/apt/source.list && echo "deb http://free.nchc.org.tw/ubuntu/ saucy-updates main restricted" >> /etc/apt/source.list && echo "deb-src http://free.nchc.org.tw/ubuntu/ saucy-updates main restricted" >> /etc/apt/source.list && echo "deb http://free.nchc.org.tw/ubuntu/ saucy universe" >> /etc/apt/source.list && echo "deb-src http://free.nchc.org.tw/ubuntu/ saucy universe" >> /etc/apt/source.list && echo "deb http://free.nchc.org.tw/ubuntu/ saucy-updates universe" >> /etc/apt/source.list && echo "deb-src http://free.nchc.org.tw/ubuntu/ saucy-updates universe" >> /etc/apt/source.list && echo "deb http://free.nchc.org.tw/ubuntu/ saucy multiverse" >> /etc/apt/source.list && echo "deb-src http://free.nchc.org.tw/ubuntu/ saucy multiverse" >> /etc/apt/source.list && echo "deb http://free.nchc.org.tw/ubuntu/ saucy-updates multiverse" >> /etc/apt/source.list && echo "deb-src http://free.nchc.org.tw/ubuntu/ saucy-updates multiverse" >> /etc/apt/source.list && echo "deb http://free.nchc.org.tw/ubuntu/ saucy-backports main restricted universe multiverse" >> /etc/apt/source.list && echo "deb-src http://free.nchc.org.tw/ubuntu/ saucy-backports main restricted universe multiverse" >> /etc/apt/source.list && echo "deb http://free.nchc.org.tw/ubuntu/ saucy-security main restricted" >> /etc/apt/source.list && echo "deb-src http://free.nchc.org.tw/ubuntu/ saucy-security main restricted" >> /etc/apt/source.list && echo "deb http://free.nchc.org.tw/ubuntu/ saucy-security universe" >> /etc/apt/source.list && echo "deb-src http://free.nchc.org.tw/ubuntu/ saucy-security universe" >> /etc/apt/source.list && echo "deb http://free.nchc.org.tw/ubuntu/ saucy-security multiverse" >> /etc/apt/source.list && echo "deb-src http://free.nchc.org.tw/ubuntu/ saucy-security multiverse" >> /etc/apt/source.list && echo "deb http://extras.ubuntu.com/ubuntu saucy main" >> /etc/apt/source.list && echo "deb-src http://extras.ubuntu.com/ubuntu saucy main" >> /etc/apt/source.list
|
||||||
|
|
|
@ -3,8 +3,6 @@ FROM ubuntu
|
||||||
# Set the file maintainer (your name - the file's author)
|
# Set the file maintainer (your name - the file's author)
|
||||||
MAINTAINER Borja Burgos <borja@tutum.co>
|
MAINTAINER Borja Burgos <borja@tutum.co>
|
||||||
|
|
||||||
ENV DEBIAN_FRONTEND noninteractive
|
|
||||||
|
|
||||||
# Update the default application repository sources list
|
# Update the default application repository sources list
|
||||||
RUN apt-get update
|
RUN apt-get update
|
||||||
|
|
||||||
|
|
|
@ -3,8 +3,6 @@
|
||||||
FROM stackbrew/ubuntu:saucy
|
FROM stackbrew/ubuntu:saucy
|
||||||
MAINTAINER Meaglith Ma <genedna@gmail.com> (@genedna)
|
MAINTAINER Meaglith Ma <genedna@gmail.com> (@genedna)
|
||||||
|
|
||||||
ENV DEBIAN_FRONTEND noninteractive
|
|
||||||
|
|
||||||
RUN apt-get install -y --force-yes software-properties-common
|
RUN apt-get install -y --force-yes software-properties-common
|
||||||
RUN add-apt-repository -y "deb http://archive.ubuntu.com/ubuntu $(lsb_release -sc) universe"
|
RUN add-apt-repository -y "deb http://archive.ubuntu.com/ubuntu $(lsb_release -sc) universe"
|
||||||
RUN apt-get --yes --force-yes update
|
RUN apt-get --yes --force-yes update
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
FROM ubuntu
|
FROM ubuntu
|
||||||
MAINTAINER SvenDowideit@docker.com
|
MAINTAINER SvenDowideit@docker.com
|
||||||
|
|
||||||
ENV DEBIAN_FRONTEND noninteractive
|
|
||||||
|
|
||||||
# Add the PostgreSQL PGP key to verify their Debian packages.
|
# Add the PostgreSQL PGP key to verify their Debian packages.
|
||||||
# It should be the same key as https://www.postgresql.org/media/keys/ACCC4CF8.asc
|
# It should be the same key as https://www.postgresql.org/media/keys/ACCC4CF8.asc
|
||||||
RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys B97B0AFCAA1A47F044F244A07FCC7D46ACCC4CF8
|
RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys B97B0AFCAA1A47F044F244A07FCC7D46ACCC4CF8
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
FROM stackbrew/ubuntu:saucy
|
FROM stackbrew/ubuntu:saucy
|
||||||
MAINTAINER Meaglith Ma <genedna@gmail.com> (@genedna), Lance Ju <juzhenatpku@gmail.com> (@crystaldust)
|
MAINTAINER Meaglith Ma <genedna@gmail.com> (@genedna), Lance Ju <juzhenatpku@gmail.com> (@crystaldust)
|
||||||
|
|
||||||
ENV DEBIAN_FRONTEND noninteractive
|
|
||||||
|
|
||||||
RUN apt-get update && apt-get install -y redis-server
|
RUN apt-get update && apt-get install -y redis-server
|
||||||
# Usually redis doesn't need a password
|
# Usually redis doesn't need a password
|
||||||
#RUN sed -i "s/# requirepass foobared/requirepass THE_REDIS_PASSWORD/g" /etc/redis/redis.conf
|
#RUN sed -i "s/# requirepass foobared/requirepass THE_REDIS_PASSWORD/g" /etc/redis/redis.conf
|
||||||
|
|
2
gogs.go
2
gogs.go
|
@ -19,7 +19,7 @@ import (
|
||||||
// Test that go1.2 tag above is included in builds. main.go refers to this definition.
|
// Test that go1.2 tag above is included in builds. main.go refers to this definition.
|
||||||
const go12tag = true
|
const go12tag = true
|
||||||
|
|
||||||
const APP_VER = "0.3.1.0430 Alpha"
|
const APP_VER = "0.3.1.0501 Alpha"
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
base.AppVer = APP_VER
|
base.AppVer = APP_VER
|
||||||
|
|
|
@ -88,12 +88,6 @@ func CommitRepoAction(userId int64, userName, actEmail string,
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err = NotifyWatchers(&Action{ActUserId: userId, ActUserName: userName, ActEmail: actEmail,
|
|
||||||
OpType: opType, Content: string(bs), RepoId: repoId, RepoName: repoName, RefName: refName}); err != nil {
|
|
||||||
log.Error("action.CommitRepoAction(notify watchers): %d/%s", userId, repoName)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Change repository bare status and update last updated time.
|
// Change repository bare status and update last updated time.
|
||||||
repo, err := GetRepositoryByName(userId, repoName)
|
repo, err := GetRepositoryByName(userId, repoName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -106,12 +100,24 @@ func CommitRepoAction(userId int64, userName, actEmail string,
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !repo.IsPrivate {
|
||||||
|
if err = NotifyWatchers(&Action{ActUserId: userId, ActUserName: userName, ActEmail: actEmail,
|
||||||
|
OpType: opType, Content: string(bs), RepoId: repoId, RepoName: repoName, RefName: refName}); err != nil {
|
||||||
|
log.Error("action.CommitRepoAction(notify watchers): %d/%s", userId, repoName)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
log.Trace("action.CommitRepoAction(end): %d/%s", userId, repoName)
|
log.Trace("action.CommitRepoAction(end): %d/%s", userId, repoName)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewRepoAction adds new action for creating repository.
|
// NewRepoAction adds new action for creating repository.
|
||||||
func NewRepoAction(user *User, repo *Repository) (err error) {
|
func NewRepoAction(user *User, repo *Repository) (err error) {
|
||||||
|
if repo.IsPrivate {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
if err = NotifyWatchers(&Action{ActUserId: user.Id, ActUserName: user.Name, ActEmail: user.Email,
|
if err = NotifyWatchers(&Action{ActUserId: user.Id, ActUserName: user.Name, ActEmail: user.Email,
|
||||||
OpType: OP_CREATE_REPO, RepoId: repo.Id, RepoName: repo.Name}); err != nil {
|
OpType: OP_CREATE_REPO, RepoId: repo.Id, RepoName: repo.Name}); err != nil {
|
||||||
log.Error("action.NewRepoAction(notify watchers): %d/%s", user.Id, repo.Name)
|
log.Error("action.NewRepoAction(notify watchers): %d/%s", user.Id, repo.Name)
|
||||||
|
@ -124,6 +130,10 @@ func NewRepoAction(user *User, repo *Repository) (err error) {
|
||||||
|
|
||||||
// TransferRepoAction adds new action for transfering repository.
|
// TransferRepoAction adds new action for transfering repository.
|
||||||
func TransferRepoAction(user, newUser *User, repo *Repository) (err error) {
|
func TransferRepoAction(user, newUser *User, repo *Repository) (err error) {
|
||||||
|
if repo.IsPrivate {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
if err = NotifyWatchers(&Action{ActUserId: user.Id, ActUserName: user.Name, ActEmail: user.Email,
|
if err = NotifyWatchers(&Action{ActUserId: user.Id, ActUserName: user.Name, ActEmail: user.Email,
|
||||||
OpType: OP_TRANSFER_REPO, RepoId: repo.Id, RepoName: repo.Name, Content: newUser.Name}); err != nil {
|
OpType: OP_TRANSFER_REPO, RepoId: repo.Id, RepoName: repo.Name, Content: newUser.Name}); err != nil {
|
||||||
log.Error("action.TransferRepoAction(notify watchers): %d/%s", user.Id, repo.Name)
|
log.Error("action.TransferRepoAction(notify watchers): %d/%s", user.Id, repo.Name)
|
||||||
|
|
|
@ -46,6 +46,7 @@ type User struct {
|
||||||
Id int64
|
Id int64
|
||||||
LowerName string `xorm:"unique not null"`
|
LowerName string `xorm:"unique not null"`
|
||||||
Name string `xorm:"unique not null"`
|
Name string `xorm:"unique not null"`
|
||||||
|
FullName string
|
||||||
Email string `xorm:"unique not null"`
|
Email string `xorm:"unique not null"`
|
||||||
Passwd string `xorm:"not null"`
|
Passwd string `xorm:"not null"`
|
||||||
LoginType int
|
LoginType int
|
||||||
|
|
|
@ -21,7 +21,7 @@ type Form interface {
|
||||||
}
|
}
|
||||||
|
|
||||||
type RegisterForm struct {
|
type RegisterForm struct {
|
||||||
UserName string `form:"username" binding:"Required;AlphaDash;MaxSize(30)"`
|
UserName string `form:"username" binding:"Required;AlphaDashDot;MaxSize(30)"`
|
||||||
Email string `form:"email" binding:"Required;Email;MaxSize(50)"`
|
Email string `form:"email" binding:"Required;Email;MaxSize(50)"`
|
||||||
Password string `form:"passwd" binding:"Required;MinSize(6);MaxSize(30)"`
|
Password string `form:"passwd" binding:"Required;MinSize(6);MaxSize(30)"`
|
||||||
RetypePasswd string `form:"retypepasswd"`
|
RetypePasswd string `form:"retypepasswd"`
|
||||||
|
@ -123,6 +123,8 @@ func validate(errors *base.BindingErrors, data base.TmplData, form Form) {
|
||||||
data["ErrorMsg"] = form.Name(field.Name) + " cannot be empty"
|
data["ErrorMsg"] = form.Name(field.Name) + " cannot be empty"
|
||||||
case base.BindingAlphaDashError:
|
case base.BindingAlphaDashError:
|
||||||
data["ErrorMsg"] = form.Name(field.Name) + " must be valid alpha or numeric or dash(-_) characters"
|
data["ErrorMsg"] = form.Name(field.Name) + " must be valid alpha or numeric or dash(-_) characters"
|
||||||
|
case base.BindingAlphaDashDotError:
|
||||||
|
data["ErrorMsg"] = form.Name(field.Name) + " must be valid alpha or numeric or dash(-_) or dot characters"
|
||||||
case base.BindingMinSizeError:
|
case base.BindingMinSizeError:
|
||||||
data["ErrorMsg"] = form.Name(field.Name) + " must contain at least " + getMinMaxSize(field) + " characters"
|
data["ErrorMsg"] = form.Name(field.Name) + " must contain at least " + getMinMaxSize(field) + " characters"
|
||||||
case base.BindingMaxSizeError:
|
case base.BindingMaxSizeError:
|
||||||
|
@ -174,7 +176,7 @@ type InstallForm struct {
|
||||||
RunUser string `form:"run_user"`
|
RunUser string `form:"run_user"`
|
||||||
Domain string `form:"domain"`
|
Domain string `form:"domain"`
|
||||||
AppUrl string `form:"app_url"`
|
AppUrl string `form:"app_url"`
|
||||||
AdminName string `form:"admin_name" binding:"Required"`
|
AdminName string `form:"admin_name" binding:"Required;AlphaDashDot;MaxSize(30)"`
|
||||||
AdminPasswd string `form:"admin_pwd" binding:"Required;MinSize(6);MaxSize(30)"`
|
AdminPasswd string `form:"admin_pwd" binding:"Required;MinSize(6);MaxSize(30)"`
|
||||||
AdminEmail string `form:"admin_email" binding:"Required;Email;MaxSize(50)"`
|
AdminEmail string `form:"admin_email" binding:"Required;Email;MaxSize(50)"`
|
||||||
SmtpHost string `form:"smtp_host"`
|
SmtpHost string `form:"smtp_host"`
|
||||||
|
|
|
@ -75,6 +75,7 @@ type FeedsForm struct {
|
||||||
|
|
||||||
type UpdateProfileForm struct {
|
type UpdateProfileForm struct {
|
||||||
UserName string `form:"username" binding:"Required;AlphaDash;MaxSize(30)"`
|
UserName string `form:"username" binding:"Required;AlphaDash;MaxSize(30)"`
|
||||||
|
FullName string `form:"fullname" binding:"MaxSize(40)"`
|
||||||
Email string `form:"email" binding:"Required;Email;MaxSize(50)"`
|
Email string `form:"email" binding:"Required;Email;MaxSize(50)"`
|
||||||
Website string `form:"website" binding:"MaxSize(50)"`
|
Website string `form:"website" binding:"MaxSize(50)"`
|
||||||
Location string `form:"location" binding:"MaxSize(50)"`
|
Location string `form:"location" binding:"MaxSize(50)"`
|
||||||
|
|
|
@ -45,6 +45,7 @@ func (this *BindingErrors) Combine(other BindingErrors) {
|
||||||
const (
|
const (
|
||||||
BindingRequireError string = "Required"
|
BindingRequireError string = "Required"
|
||||||
BindingAlphaDashError string = "AlphaDash"
|
BindingAlphaDashError string = "AlphaDash"
|
||||||
|
BindingAlphaDashDotError string = "AlphaDashDot"
|
||||||
BindingMinSizeError string = "MinSize"
|
BindingMinSizeError string = "MinSize"
|
||||||
BindingMaxSizeError string = "MaxSize"
|
BindingMaxSizeError string = "MaxSize"
|
||||||
BindingEmailError string = "Email"
|
BindingEmailError string = "Email"
|
||||||
|
|
|
@ -180,9 +180,10 @@ func Validate(obj interface{}) martini.Handler {
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
alphaDashPattern = regexp.MustCompile("[^\\d\\w-_]")
|
alphaDashPattern = regexp.MustCompile("[^\\d\\w-_]")
|
||||||
emailPattern = regexp.MustCompile("[\\w!#$%&'*+/=?^_`{|}~-]+(?:\\.[\\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\\w](?:[\\w-]*[\\w])?\\.)+[a-zA-Z0-9](?:[\\w-]*[\\w])?")
|
alphaDashDotPattern = regexp.MustCompile("[^\\d\\w-_\\.]")
|
||||||
urlPattern = regexp.MustCompile(`(http|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?`)
|
emailPattern = regexp.MustCompile("[\\w!#$%&'*+/=?^_`{|}~-]+(?:\\.[\\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\\w](?:[\\w-]*[\\w])?\\.)+[a-zA-Z0-9](?:[\\w-]*[\\w])?")
|
||||||
|
urlPattern = regexp.MustCompile(`(http|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?`)
|
||||||
)
|
)
|
||||||
|
|
||||||
func validateStruct(errors *base.BindingErrors, obj interface{}) {
|
func validateStruct(errors *base.BindingErrors, obj interface{}) {
|
||||||
|
@ -227,6 +228,11 @@ func validateStruct(errors *base.BindingErrors, obj interface{}) {
|
||||||
errors.Fields[field.Name] = base.BindingAlphaDashError
|
errors.Fields[field.Name] = base.BindingAlphaDashError
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
case rule == "AlphaDashDot":
|
||||||
|
if alphaDashDotPattern.MatchString(fmt.Sprintf("%v", fieldValue)) {
|
||||||
|
errors.Fields[field.Name] = base.BindingAlphaDashDotError
|
||||||
|
break
|
||||||
|
}
|
||||||
case strings.HasPrefix(rule, "MinSize("):
|
case strings.HasPrefix(rule, "MinSize("):
|
||||||
min, err := strconv.Atoi(rule[8 : len(rule)-1])
|
min, err := strconv.Atoi(rule[8 : len(rule)-1])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -21,5 +21,6 @@ func TemplatePreview(ctx *middleware.Context, params martini.Params) {
|
||||||
ctx.Data["Code"] = "2014031910370000009fff6782aadb2162b4a997acb69d4400888e0b9274657374"
|
ctx.Data["Code"] = "2014031910370000009fff6782aadb2162b4a997acb69d4400888e0b9274657374"
|
||||||
ctx.Data["ActiveCodeLives"] = base.Service.ActiveCodeLives / 60
|
ctx.Data["ActiveCodeLives"] = base.Service.ActiveCodeLives / 60
|
||||||
ctx.Data["ResetPwdCodeLives"] = base.Service.ResetPwdCodeLives / 60
|
ctx.Data["ResetPwdCodeLives"] = base.Service.ResetPwdCodeLives / 60
|
||||||
|
ctx.Data["CurDbValue"] = ""
|
||||||
ctx.HTML(200, params["_1"])
|
ctx.HTML(200, params["_1"])
|
||||||
}
|
}
|
||||||
|
|
|
@ -54,6 +54,7 @@ func SettingPost(ctx *middleware.Context, form auth.UpdateProfileForm) {
|
||||||
user.Name = form.UserName
|
user.Name = form.UserName
|
||||||
}
|
}
|
||||||
|
|
||||||
|
user.FullName = form.FullName
|
||||||
user.Email = form.Email
|
user.Email = form.Email
|
||||||
user.Website = form.Website
|
user.Website = form.Website
|
||||||
user.Location = form.Location
|
user.Location = form.Location
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-md-4">
|
<div class="col-md-4">
|
||||||
<p class="desc"><a href="http://gogits.org">Official Website</a></p>
|
<p class="desc"><a href="http://gogs.io">Official Website</a></p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
<nav class="nav">
|
<nav class="nav">
|
||||||
<a id="nav-logo" class="nav-item pull-left{{if .PageIsHome}} active{{end}}" href="/"><img src="/img/favicon.png" alt="Gogs Logo" id="logo"></a>
|
<a id="nav-logo" class="nav-item pull-left{{if .PageIsHome}} active{{end}}" href="/"><img src="/img/favicon.png" alt="Gogs Logo" id="logo"></a>
|
||||||
<a class="nav-item pull-left{{if .PageIsUserDashboard}} active{{end}}" href="/">Dashboard</a>
|
<a class="nav-item pull-left{{if .PageIsUserDashboard}} active{{end}}" href="/">Dashboard</a>
|
||||||
<a class="nav-item pull-left{{if .PageIsHelp}} active{{end}}" target="_blank" href="https://github.com/gogits/gogs/wiki">Help</a>{{if .IsSigned}}
|
<a class="nav-item pull-left{{if .PageIsHelp}} active{{end}}" target="_blank" href="http://gogs.io/docs">Help</a>{{if .IsSigned}}
|
||||||
{{if .HasAccess}}<form class="nav-item pull-left{{if .PageIsNewRepo}} active{{end}}" id="nav-search-form">
|
{{if .HasAccess}}<form class="nav-item pull-left{{if .PageIsNewRepo}} active{{end}}" id="nav-search-form">
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<div class="input-group-btn">
|
<div class="input-group-btn">
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
<a href="http://gravatar.com/emails/" class="center-block" data-toggle="tooltip" data-placement="bottom" title="Change your avatar at gravatar.com">
|
<a href="http://gravatar.com/emails/" class="center-block" data-toggle="tooltip" data-placement="bottom" title="Change your avatar at gravatar.com">
|
||||||
<img id="user-avatar" src="{{.Owner.AvatarLink}}?s=200" alt="user-avatar" title="{{.Owner.Name}}"/>
|
<img id="user-avatar" src="{{.Owner.AvatarLink}}?s=200" alt="user-avatar" title="{{.Owner.Name}}"/>
|
||||||
</a>
|
</a>
|
||||||
|
{{if .Owner.FullName}}<span id="user-name" class="center-block">{{.Owner.FullName}}</span>{{end}}
|
||||||
<span id="user-name" class="center-block">{{.Owner.Name}}</span>
|
<span id="user-name" class="center-block">{{.Owner.Name}}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="profile-info">
|
<div class="profile-info">
|
||||||
|
|
|
@ -17,6 +17,13 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-md-2 control-label">Full Name</label>
|
||||||
|
<div class="col-md-8">
|
||||||
|
<input name="fullname" class="form-control" placeholder="Type your full name" value="{{.SignedUser.FullName}}">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="col-md-2 control-label">Email<strong class="text-danger">*</strong></label>
|
<label class="col-md-2 control-label">Email<strong class="text-danger">*</strong></label>
|
||||||
<div class="col-md-8">
|
<div class="col-md-8">
|
||||||
|
|
Loading…
Reference in New Issue