From 3f707b3f3265c4b3e64e47ee172cc878f3325248 Mon Sep 17 00:00:00 2001 From: Unknwon Date: Mon, 22 Sep 2014 17:01:19 -0400 Subject: [PATCH] Add basic submodule support --- README.md | 2 +- README_ZH.md | 2 +- gogs.go | 2 +- modules/git/submodule.go | 52 ++++++++++++++++++++++++++++++++++++++++ routers/repo/view.go | 16 +------------ templates/.VERSION | 2 +- 6 files changed, 57 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index 232aa92a84..a2aed3afad 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ Gogs(Go Git Service) is a painless self-hosted Git Service written in Go. ![Demo](https://gowalker.org/public/gogs_demo.gif) -##### Current version: 0.5.3 Beta +##### Current version: 0.5.4 Beta ### NOTICES diff --git a/README_ZH.md b/README_ZH.md index fcc8b49694..817110b375 100644 --- a/README_ZH.md +++ b/README_ZH.md @@ -5,7 +5,7 @@ Gogs(Go Git Service) 是一个基于 Go 语言的自助 Git 服务。 ![Demo](https://gowalker.org/public/gogs_demo.gif) -##### 当前版本:0.5.3 Beta +##### 当前版本:0.5.4 Beta ## 开发目的 diff --git a/gogs.go b/gogs.go index b1b9fe60d5..d565d7bbb1 100644 --- a/gogs.go +++ b/gogs.go @@ -17,7 +17,7 @@ import ( "github.com/gogits/gogs/modules/setting" ) -const APP_VER = "0.5.3.0922 Beta" +const APP_VER = "0.5.4.0922 Beta" func init() { runtime.GOMAXPROCS(runtime.NumCPU()) diff --git a/modules/git/submodule.go b/modules/git/submodule.go index 28b5b9f375..6927f8cbad 100644 --- a/modules/git/submodule.go +++ b/modules/git/submodule.go @@ -1,6 +1,58 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + package git +import ( + "strings" +) + type SubModule struct { Name string Url string } + +// SubModuleFile represents a file with submodule type. +type SubModuleFile struct { + *Commit + + refUrl string + refId string +} + +func NewSubModuleFile(c *Commit, refUrl, refId string) *SubModuleFile { + return &SubModuleFile{ + Commit: c, + refUrl: refUrl, + refId: refId, + } +} + +// RefUrl guesses and returns reference URL. +func (sf *SubModuleFile) RefUrl() string { + url := strings.TrimSuffix(sf.refUrl, ".git") + + // git://xxx/user/repo + if strings.HasPrefix(url, "git://") { + return "http://" + strings.TrimPrefix(url, "git://") + } + + // http[s]://xxx/user/repo + if strings.HasPrefix(url, "http://") || strings.HasPrefix(url, "https://") { + return url + } + + // sysuser@xxx:user/repo + i := strings.Index(url, "@") + j := strings.LastIndex(url, ":") + if i > -1 && j > -1 { + return "http://" + url[i+1:j] + "/" + url[j+1:] + } + return url +} + +// RefId returns reference ID. +func (sf *SubModuleFile) RefId() string { + return sf.refId +} diff --git a/routers/repo/view.go b/routers/repo/view.go index 77f17e7ae0..4e4a7b18ce 100644 --- a/routers/repo/view.go +++ b/routers/repo/view.go @@ -21,13 +21,6 @@ const ( HOME base.TplName = "repo/home" ) -type fakeCommit struct { - *git.Commit - - RefUrl string - RefId string -} - func Home(ctx *middleware.Context) { ctx.Data["Title"] = ctx.Repo.Repository.Name @@ -153,14 +146,7 @@ func Home(ctx *middleware.Context) { ctx.Handle(404, "GetCommitOfRelPath", err) return } - - commit := fakeCommit{ - Commit: c, - RefUrl: strings.TrimRight(sm.Url, ".git"), - RefId: te.Id.String(), - } - - files = append(files, []interface{}{te, &commit}) + files = append(files, []interface{}{te, git.NewSubModuleFile(c, sm.Url, te.Id.String())}) } } diff --git a/templates/.VERSION b/templates/.VERSION index 19d8171e8f..8a713df042 100644 --- a/templates/.VERSION +++ b/templates/.VERSION @@ -1 +1 @@ -0.5.3.0922 Beta \ No newline at end of file +0.5.4.0922 Beta \ No newline at end of file