Mirror bug fix on downloading zip
This commit is contained in:
		
							parent
							
								
									67426534ef
								
							
						
					
					
						commit
						c3a52f7dd0
					
				
					 9 changed files with 29 additions and 15 deletions
				
			
		|  | @ -66,6 +66,9 @@ There are 3 ways to install Gogs: | ||||||
| 
 | 
 | ||||||
| This project was launched by [Unknown](https://github.com/Unknwon) and [lunny](https://github.com/lunny); [fuxiaohei](https://github.com/fuxiaohei), [slene](https://github.com/slene) and [codeskyblue](https://github.com/codeskyblue) joined the team soon after. See [contributors page](https://github.com/gogits/gogs/graphs/contributors) for full list of contributors. | This project was launched by [Unknown](https://github.com/Unknwon) and [lunny](https://github.com/lunny); [fuxiaohei](https://github.com/fuxiaohei), [slene](https://github.com/slene) and [codeskyblue](https://github.com/codeskyblue) joined the team soon after. See [contributors page](https://github.com/gogits/gogs/graphs/contributors) for full list of contributors. | ||||||
| 
 | 
 | ||||||
|  | [][koding] | ||||||
|  | [koding]: https://koding.com/Teamwork?import=https://github.com/gogits/gogs/archive/master.zip&c=git1 | ||||||
|  | 
 | ||||||
| ## License | ## License | ||||||
| 
 | 
 | ||||||
| Gogs is under the MIT License. See the [LICENSE](https://github.com/gogits/gogs/blob/master/LICENSE) file for the full license text. | Gogs is under the MIT License. See the [LICENSE](https://github.com/gogits/gogs/blob/master/LICENSE) file for the full license text. | ||||||
|  |  | ||||||
|  | @ -57,6 +57,9 @@ Gogs 完全使用 Go 语言来实现对 Git 数据的操作,实现 **零** 依 | ||||||
| 
 | 
 | ||||||
| 本项目最初由 [Unknown](https://github.com/Unknwon) 和 [lunny](https://github.com/lunny) 发起,随后 [fuxiaohei](https://github.com/fuxiaohei)、[slene](https://github.com/slene) 以及 [codeskyblue](https://github.com/codeskyblue) 加入到开发团队。您可以通过查看 [贡献者页面](https://github.com/gogits/gogs/graphs/contributors) 获取完整的贡献者列表。 | 本项目最初由 [Unknown](https://github.com/Unknwon) 和 [lunny](https://github.com/lunny) 发起,随后 [fuxiaohei](https://github.com/fuxiaohei)、[slene](https://github.com/slene) 以及 [codeskyblue](https://github.com/codeskyblue) 加入到开发团队。您可以通过查看 [贡献者页面](https://github.com/gogits/gogs/graphs/contributors) 获取完整的贡献者列表。 | ||||||
| 
 | 
 | ||||||
|  | [][koding] | ||||||
|  | [koding]: https://koding.com/Teamwork?import=https://github.com/gogits/gogs/archive/master.zip&c=git1 | ||||||
|  | 
 | ||||||
| ## 授权许可 | ## 授权许可 | ||||||
| 
 | 
 | ||||||
| Gogs 采用 MIT 开源授权许可证,完整的授权说明已放置在 [LICENSE](https://github.com/gogits/gogs/blob/master/LICENSE) 文件中。 | Gogs 采用 MIT 开源授权许可证,完整的授权说明已放置在 [LICENSE](https://github.com/gogits/gogs/blob/master/LICENSE) 文件中。 | ||||||
|  | @ -51,6 +51,7 @@ type DiffFile struct { | ||||||
| 	Name               string | 	Name               string | ||||||
| 	Addition, Deletion int | 	Addition, Deletion int | ||||||
| 	Type               int | 	Type               int | ||||||
|  | 	IsBin              bool | ||||||
| 	Sections           []*DiffSection | 	Sections           []*DiffSection | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -96,13 +97,15 @@ func ParsePatch(reader io.Reader) (*Diff, error) { | ||||||
| 		if line == "" { | 		if line == "" { | ||||||
| 			continue | 			continue | ||||||
| 		} | 		} | ||||||
| 		if line[0] == ' ' { | 
 | ||||||
|  | 		switch { | ||||||
|  | 		case line[0] == ' ': | ||||||
| 			diffLine := &DiffLine{Type: DIFF_LINE_PLAIN, Content: line, LeftIdx: leftLine, RightIdx: rightLine} | 			diffLine := &DiffLine{Type: DIFF_LINE_PLAIN, Content: line, LeftIdx: leftLine, RightIdx: rightLine} | ||||||
| 			leftLine++ | 			leftLine++ | ||||||
| 			rightLine++ | 			rightLine++ | ||||||
| 			curSection.Lines = append(curSection.Lines, diffLine) | 			curSection.Lines = append(curSection.Lines, diffLine) | ||||||
| 			continue | 			continue | ||||||
| 		} else if line[0] == '@' { | 		case line[0] == '@': | ||||||
| 			curSection = &DiffSection{} | 			curSection = &DiffSection{} | ||||||
| 			curFile.Sections = append(curFile.Sections, curSection) | 			curFile.Sections = append(curFile.Sections, curSection) | ||||||
| 			ss := strings.Split(line, "@@") | 			ss := strings.Split(line, "@@") | ||||||
|  | @ -114,14 +117,14 @@ func ParsePatch(reader io.Reader) (*Diff, error) { | ||||||
| 			leftLine, _ = base.StrTo(strings.Split(ranges[0], ",")[0][1:]).Int() | 			leftLine, _ = base.StrTo(strings.Split(ranges[0], ",")[0][1:]).Int() | ||||||
| 			rightLine, _ = base.StrTo(strings.Split(ranges[1], ",")[0]).Int() | 			rightLine, _ = base.StrTo(strings.Split(ranges[1], ",")[0]).Int() | ||||||
| 			continue | 			continue | ||||||
| 		} else if line[0] == '+' { | 		case line[0] == '+': | ||||||
| 			curFile.Addition++ | 			curFile.Addition++ | ||||||
| 			diff.TotalAddition++ | 			diff.TotalAddition++ | ||||||
| 			diffLine := &DiffLine{Type: DIFF_LINE_ADD, Content: line, RightIdx: rightLine} | 			diffLine := &DiffLine{Type: DIFF_LINE_ADD, Content: line, RightIdx: rightLine} | ||||||
| 			rightLine++ | 			rightLine++ | ||||||
| 			curSection.Lines = append(curSection.Lines, diffLine) | 			curSection.Lines = append(curSection.Lines, diffLine) | ||||||
| 			continue | 			continue | ||||||
| 		} else if line[0] == '-' { | 		case line[0] == '-': | ||||||
| 			curFile.Deletion++ | 			curFile.Deletion++ | ||||||
| 			diff.TotalDeletion++ | 			diff.TotalDeletion++ | ||||||
| 			diffLine := &DiffLine{Type: DIFF_LINE_DEL, Content: line, LeftIdx: leftLine} | 			diffLine := &DiffLine{Type: DIFF_LINE_DEL, Content: line, LeftIdx: leftLine} | ||||||
|  | @ -129,6 +132,8 @@ func ParsePatch(reader io.Reader) (*Diff, error) { | ||||||
| 				leftLine++ | 				leftLine++ | ||||||
| 			} | 			} | ||||||
| 			curSection.Lines = append(curSection.Lines, diffLine) | 			curSection.Lines = append(curSection.Lines, diffLine) | ||||||
|  | 		case strings.HasPrefix(line, "Binary"): | ||||||
|  | 			curFile.IsBin = true | ||||||
| 			continue | 			continue | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -157,9 +157,9 @@ func (this *service) ServeHTTP(w http.ResponseWriter, r *http.Request) { | ||||||
| 	avatar := New(hash, this.cacheDir) | 	avatar := New(hash, this.cacheDir) | ||||||
| 	avatar.AlterImage = this.altImage | 	avatar.AlterImage = this.altImage | ||||||
| 	if avatar.Expired() { | 	if avatar.Expired() { | ||||||
| 		err := avatar.UpdateTimeout(time.Millisecond * 500) | 		if err := avatar.UpdateTimeout(time.Millisecond * 1000); err != nil { | ||||||
| 		if err != nil { |  | ||||||
| 			log.Trace("avatar update error: %v", err) | 			log.Trace("avatar update error: %v", err) | ||||||
|  | 			return | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	if modtime, err := avatar.Modtime(); err == nil { | 	if modtime, err := avatar.Modtime(); err == nil { | ||||||
|  | @ -250,6 +250,7 @@ func (this *thunderTask) Fetch() { | ||||||
| var client = &http.Client{} | var client = &http.Client{} | ||||||
| 
 | 
 | ||||||
| func (this *thunderTask) fetch() error { | func (this *thunderTask) fetch() error { | ||||||
|  | 	log.Debug("avatar.fetch(fetch new avatar): %s", this.Url) | ||||||
| 	req, _ := http.NewRequest("GET", this.Url, nil) | 	req, _ := http.NewRequest("GET", this.Url, nil) | ||||||
| 	req.Header.Set("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/jpeg,image/png,*/*;q=0.8") | 	req.Header.Set("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/jpeg,image/png,*/*;q=0.8") | ||||||
| 	req.Header.Set("Accept-Encoding", "deflate,sdch") | 	req.Header.Set("Accept-Encoding", "deflate,sdch") | ||||||
|  |  | ||||||
|  | @ -153,7 +153,7 @@ func Single(ctx *middleware.Context, params martini.Params) { | ||||||
| 		} else { | 		} else { | ||||||
| 			ctx.Data["FileSize"] = blob.Size() | 			ctx.Data["FileSize"] = blob.Size() | ||||||
| 			ctx.Data["IsFile"] = true | 			ctx.Data["IsFile"] = true | ||||||
| 			ctx.Data["FileName"] = blob.Name | 			ctx.Data["FileName"] = blob.Name() | ||||||
| 			ext := path.Ext(blob.Name()) | 			ext := path.Ext(blob.Name()) | ||||||
| 			if len(ext) > 0 { | 			if len(ext) > 0 { | ||||||
| 				ext = ext[1:] | 				ext = ext[1:] | ||||||
|  | @ -226,7 +226,7 @@ func Single(ctx *middleware.Context, params martini.Params) { | ||||||
| 				ctx.Data["FileLink"] = rawLink + "/" + treename | 				ctx.Data["FileLink"] = rawLink + "/" + treename | ||||||
| 				_, isTextFile := base.IsTextFile(data) | 				_, isTextFile := base.IsTextFile(data) | ||||||
| 				ctx.Data["FileIsText"] = isTextFile | 				ctx.Data["FileIsText"] = isTextFile | ||||||
| 				ctx.Data["FileName"] = readmeFile.Name | 				ctx.Data["FileName"] = readmeFile.Name() | ||||||
| 				if isTextFile { | 				if isTextFile { | ||||||
| 					ctx.Data["FileContent"] = string(base.RenderMarkdown(data, branchLink)) | 					ctx.Data["FileContent"] = string(base.RenderMarkdown(data, branchLink)) | ||||||
| 				} | 				} | ||||||
|  |  | ||||||
|  | @ -4,7 +4,7 @@ | ||||||
|             <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}}" href="https://github.com/gogits/gogs/wiki">Help</a>{{if .IsSigned}} |             <a class="nav-item pull-left{{if .PageIsHelp}} active{{end}}" href="https://github.com/gogits/gogs/wiki">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"> | ||||||
|                         <button type="button" class="btn btn-sm btn-default dropdown-toggle" data-toggle="dropdown">{{if .Repository}}This Repository{{else}}All Repositories{{end}} <span class="caret"></span></button> |                         <button type="button" class="btn btn-sm btn-default dropdown-toggle" data-toggle="dropdown">{{if .Repository}}This Repository{{else}}All Repositories{{end}} <span class="caret"></span></button> | ||||||
|  | @ -16,7 +16,7 @@ | ||||||
|                     </div> |                     </div> | ||||||
|                     <input type="search" class="form-control input-sm" name="q" placeholder="search code, commits and issues"/> |                     <input type="search" class="form-control input-sm" name="q" placeholder="search code, commits and issues"/> | ||||||
|                 </div> |                 </div> | ||||||
|             </form>{{end}} |             </form> -->{{end}} | ||||||
|             <a id="nav-out" class="nav-item navbar-right navbar-btn btn btn-danger" href="/user/logout/"><i class="fa fa-power-off fa-lg"></i></a> |             <a id="nav-out" class="nav-item navbar-right navbar-btn btn btn-danger" href="/user/logout/"><i class="fa fa-power-off fa-lg"></i></a> | ||||||
|             <a id="nav-avatar" class="nav-item navbar-right{{if .PageIsUserProfile}} active{{end}}" href="{{.SignedUser.HomeLink}}" data-toggle="tooltip" data-placement="bottom" title="{{.SignedUserName}}"> |             <a id="nav-avatar" class="nav-item navbar-right{{if .PageIsUserProfile}} active{{end}}" href="{{.SignedUser.HomeLink}}" data-toggle="tooltip" data-placement="bottom" title="{{.SignedUserName}}"> | ||||||
|                 <img src="{{.SignedUser.AvatarLink}}?s=28" alt="user-avatar" title="username"/> |                 <img src="{{.SignedUser.AvatarLink}}?s=28" alt="user-avatar" title="username"/> | ||||||
|  |  | ||||||
|  | @ -32,7 +32,7 @@ | ||||||
|                 {{range $r}} |                 {{range $r}} | ||||||
|                 <tr> |                 <tr> | ||||||
|                     <td class="author"><img class="avatar" src="{{AvatarLink .Author.Email}}" alt=""/><a href="/user/email2user?email={{.Author.Email}}">{{.Author.Name}}</a></td> |                     <td class="author"><img class="avatar" src="{{AvatarLink .Author.Email}}" alt=""/><a href="/user/email2user?email={{.Author.Email}}">{{.Author.Name}}</a></td> | ||||||
|                     <td class="sha"><a class="label label-success" href="/{{$username}}/{{$reponame}}/commit/{{.Id}} ">{{SubStr .Id.String 0 10}} </a></td> |                     <td class="sha"><a rel="nofollow" class="label label-success" href="/{{$username}}/{{$reponame}}/commit/{{.Id}} ">{{SubStr .Id.String 0 10}} </a></td> | ||||||
|                     <td class="message">{{.Message}} </td> |                     <td class="message">{{.Message}} </td> | ||||||
|                     <td class="date">{{TimeSince .Author.When}}</td> |                     <td class="date">{{TimeSince .Author.When}}</td> | ||||||
|                 </tr> |                 </tr> | ||||||
|  |  | ||||||
|  | @ -5,7 +5,7 @@ | ||||||
|     <div id="source"> |     <div id="source"> | ||||||
|         <div class="panel panel-info diff-box diff-head-box"> |         <div class="panel panel-info diff-box diff-head-box"> | ||||||
|             <div class="panel-heading"> |             <div class="panel-heading"> | ||||||
|                 <a class="pull-right btn btn-primary btn-sm" href="{{.SourcePath}}">Browse Source</a> |                 <a class="pull-right btn btn-primary btn-sm" rel="nofollow" href="{{.SourcePath}}">Browse Source</a> | ||||||
|                 <h4>{{.Commit.Message}}</h4> |                 <h4>{{.Commit.Message}}</h4> | ||||||
|             </div> |             </div> | ||||||
|             <div class="panel-body"> |             <div class="panel-body"> | ||||||
|  | @ -33,7 +33,7 @@ | ||||||
|                 {{range .Diff.Files}} |                 {{range .Diff.Files}} | ||||||
|                 <li> |                 <li> | ||||||
|                     <div class="diff-counter count pull-right"> |                     <div class="diff-counter count pull-right"> | ||||||
|                         {{if Add .Addition .Deletion}} |                         {{if not .IsBin}} | ||||||
|                         <span class="add" data-line="{{.Addition}}">{{.Addition}}</span> |                         <span class="add" data-line="{{.Addition}}">{{.Addition}}</span> | ||||||
|                         <span class="bar"> |                         <span class="bar"> | ||||||
|                             <span class="pull-left add"></span> |                             <span class="pull-left add"></span> | ||||||
|  | @ -56,7 +56,7 @@ | ||||||
|         <div class="panel panel-default diff-file-box diff-box file-content" id="diff-2"> |         <div class="panel panel-default diff-file-box diff-box file-content" id="diff-2"> | ||||||
|             <div class="panel-heading"> |             <div class="panel-heading"> | ||||||
|                 <div class="diff-counter count pull-left"> |                 <div class="diff-counter count pull-left"> | ||||||
|                     {{if Add .Addition .Deletion}} |                     {{if not .IsBin}} | ||||||
|                     <span class="add" data-line="{{.Addition}}">+ {{.Addition}}</span> |                     <span class="add" data-line="{{.Addition}}">+ {{.Addition}}</span> | ||||||
|                     <span class="bar"> |                     <span class="bar"> | ||||||
|                         <span class="pull-left add"></span> |                         <span class="pull-left add"></span> | ||||||
|  | @ -67,7 +67,7 @@ | ||||||
|                     BIN |                     BIN | ||||||
|                     {{end}} |                     {{end}} | ||||||
|                 </div> |                 </div> | ||||||
|                 <a class="btn btn-default btn-sm pull-right" href="{{$.SourcePath}}/{{.Name}}">View File</a> |                 <a class="btn btn-default btn-sm pull-right" rel="nofollow" href="{{$.SourcePath}}/{{.Name}}">View File</a> | ||||||
|                 <span class="file">{{.Name}}</span> |                 <span class="file">{{.Name}}</span> | ||||||
|             </div> |             </div> | ||||||
|             {{$isImage := (call $.IsImageFile .Name)}} |             {{$isImage := (call $.IsImageFile .Name)}} | ||||||
|  |  | ||||||
							
								
								
									
										2
									
								
								web.go
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								web.go
									
									
									
									
									
								
							|  | @ -8,6 +8,7 @@ import ( | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"html/template" | 	"html/template" | ||||||
| 	"net/http" | 	"net/http" | ||||||
|  | 	"os" | ||||||
| 
 | 
 | ||||||
| 	"github.com/codegangsta/cli" | 	"github.com/codegangsta/cli" | ||||||
| 	"github.com/go-martini/martini" | 	"github.com/go-martini/martini" | ||||||
|  | @ -82,6 +83,7 @@ func runWeb(*cli.Context) { | ||||||
| 	}) | 	}) | ||||||
| 
 | 
 | ||||||
| 	avt := avatar.CacheServer("public/img/avatar/", "public/img/avatar_default.jpg") | 	avt := avatar.CacheServer("public/img/avatar/", "public/img/avatar_default.jpg") | ||||||
|  | 	os.MkdirAll("public/img/avatar/", os.ModePerm) | ||||||
| 	m.Get("/avatar/:hash", avt.ServeHTTP) | 	m.Get("/avatar/:hash", avt.ServeHTTP) | ||||||
| 
 | 
 | ||||||
| 	m.Group("/user", func(r martini.Router) { | 	m.Group("/user", func(r martini.Router) { | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue