add commit view
This commit is contained in:
		
							parent
							
								
									e656609b0d
								
							
						
					
					
						commit
						3ceb008e1f
					
				
					 4 changed files with 48 additions and 26 deletions
				
			
		|  | @ -416,12 +416,10 @@ var ( | |||
| // RepoFile represents a file object in git repository.
 | ||||
| type RepoFile struct { | ||||
| 	*git.TreeEntry | ||||
| 	Path       string | ||||
| 	Message    string | ||||
| 	Created    time.Time | ||||
| 	Size       int64 | ||||
| 	Repo       *git.Repository | ||||
| 	LastCommit string | ||||
| 	Path   string | ||||
| 	Size   int64 | ||||
| 	Repo   *git.Repository | ||||
| 	Commit *git.Commit | ||||
| } | ||||
| 
 | ||||
| // LookupBlob returns the content of an object.
 | ||||
|  | @ -453,32 +451,28 @@ func GetBranches(userName, reposName string) ([]string, error) { | |||
| } | ||||
| 
 | ||||
| // GetReposFiles returns a list of file object in given directory of repository.
 | ||||
| func GetReposFiles(userName, reposName, branchName, rpath string) ([]*RepoFile, error) { | ||||
| func GetReposFiles(userName, reposName, branchName, commitId, rpath string) ([]*RepoFile, error) { | ||||
| 	repo, err := git.OpenRepository(RepoPath(userName, reposName)) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	ref, err := repo.LookupReference("refs/heads/" + branchName) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	lastCommit, err := repo.LookupCommit(ref.Oid) | ||||
| 	commit, err := GetCommit(userName, reposName, branchName, commitId) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	var repodirs []*RepoFile | ||||
| 	var repofiles []*RepoFile | ||||
| 	lastCommit.Tree.Walk(func(dirname string, entry *git.TreeEntry) int { | ||||
| 	commit.Tree.Walk(func(dirname string, entry *git.TreeEntry) int { | ||||
| 		if dirname == rpath { | ||||
| 			// TODO: size get method shoule be improved
 | ||||
| 			size, err := repo.ObjectSize(entry.Id) | ||||
| 			if err != nil { | ||||
| 				return 0 | ||||
| 			} | ||||
| 
 | ||||
| 			var cm = lastCommit | ||||
| 			var cm = commit | ||||
| 
 | ||||
| 			for { | ||||
| 				if cm.ParentCount() == 0 { | ||||
|  | @ -533,11 +527,9 @@ func GetReposFiles(userName, reposName, branchName, rpath string) ([]*RepoFile, | |||
| 			rp := &RepoFile{ | ||||
| 				entry, | ||||
| 				path.Join(dirname, entry.Name), | ||||
| 				cm.Message(), | ||||
| 				cm.Committer.When, | ||||
| 				size, | ||||
| 				repo, | ||||
| 				cm.Id().String(), | ||||
| 				cm, | ||||
| 			} | ||||
| 
 | ||||
| 			if entry.IsFile() { | ||||
|  | @ -552,6 +544,31 @@ func GetReposFiles(userName, reposName, branchName, rpath string) ([]*RepoFile, | |||
| 	return append(repodirs, repofiles...), nil | ||||
| } | ||||
| 
 | ||||
| func GetCommit(userName, repoName, branchname, commitid string) (*git.Commit, error) { | ||||
| 	repo, err := git.OpenRepository(RepoPath(userName, repoName)) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	if commitid != "" { | ||||
| 		oid, err := git.NewOidFromString(commitid) | ||||
| 		if err != nil { | ||||
| 			return nil, err | ||||
| 		} | ||||
| 		return repo.LookupCommit(oid) | ||||
| 	} | ||||
| 	if branchname == "" { | ||||
| 		return nil, errors.New("no branch name and no commit id") | ||||
| 	} | ||||
| 
 | ||||
| 	r, err := repo.LookupReference(fmt.Sprintf("refs/heads/%s", branchname)) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	return r.LastCommit() | ||||
| } | ||||
| 
 | ||||
| /* | ||||
| // GetLastestCommit returns the latest commit of given repository.
 | ||||
| func GetLastestCommit(userName, repoName string) (*Commit, error) { | ||||
| 	stdout, _, err := com.ExecCmd("git", "--git-dir="+RepoPath(userName, repoName), "log", "-1") | ||||
|  | @ -581,7 +598,7 @@ func GetLastestCommit(userName, repoName string) (*Commit, error) { | |||
| 		} | ||||
| 	} | ||||
| 	return commit, nil | ||||
| } | ||||
| }*/ | ||||
| 
 | ||||
| // GetCommits returns all commits of given branch of repository.
 | ||||
| func GetCommits(userName, reposName, branchname string) ([]*git.Commit, error) { | ||||
|  |  | |||
|  | @ -69,7 +69,7 @@ func Single(ctx *middleware.Context, params martini.Params) { | |||
| 
 | ||||
| 	// Directory and file list.
 | ||||
| 	files, err := models.GetReposFiles(params["username"], params["reponame"], | ||||
| 		params["branchname"], treename) | ||||
| 		params["branchname"], params["commitid"], treename) | ||||
| 	if err != nil { | ||||
| 		log.Error("repo.Single(GetReposFiles): %v", err) | ||||
| 		ctx.Render.Error(404) | ||||
|  | @ -90,13 +90,14 @@ func Single(ctx *middleware.Context, params martini.Params) { | |||
| 	} | ||||
| 
 | ||||
| 	// Get latest commit according username and repo name
 | ||||
| 	commit, err := models.GetLastestCommit(params["username"], params["reponame"]) | ||||
| 	commit, err := models.GetCommit(params["username"], params["reponame"], | ||||
| 		params["branchname"], params["commitid"]) | ||||
| 	if err != nil { | ||||
| 		log.Error("repo.Single(GetLastestCommit): %v", err) | ||||
| 		log.Error("repo.Single(GetCommit): %v", err) | ||||
| 		ctx.Render.Error(404) | ||||
| 		return | ||||
| 	} | ||||
| 	ctx.Data["LatestCommit"] = commit | ||||
| 	ctx.Data["CurrentCommit"] = commit | ||||
| 
 | ||||
| 	var readmeFile *models.RepoFile | ||||
| 
 | ||||
|  |  | |||
|  | @ -45,7 +45,7 @@ | |||
|                 <a href="/{{$username}}/{{$reponame}}/commit/{{.LatestCommit.SHA}}">{{.LatestCommit.Message}}</a> | ||||
|             </div> | ||||
|             <div class="panel-body info-content"> | ||||
|                 <a href="/user/{{.LatestCommit.Author}}">{{.LatestCommit.Author}}</a> <span class="text-muted">{{TimeSince .LatestCommit.Date}}</span> | ||||
|                 <a href="/user/{{.LatestCommit.Author}}">{{.LatestCommit.Author}}</a> <span class="text-muted">{{TimeSince .CurrentCommit.Committer.When}}</span> | ||||
|             </div> | ||||
|             <table class="panel-footer table file-list"> | ||||
|                 <thead class="hidden"> | ||||
|  | @ -57,6 +57,7 @@ | |||
|                 </tr> | ||||
|                 </thead> | ||||
|                 <tbody> | ||||
|                 {{$currentCommit := .CurrentCommit}} | ||||
|                 {{range .Files}} | ||||
|                 <tr | ||||
|                 {{if .IsDir}}class="is-dir"{{end}}> | ||||
|  | @ -73,10 +74,10 @@ | |||
|                     </span> | ||||
|                 </td> | ||||
|                 <td class="text"> | ||||
|                     <span class="wrap"><a href="/{{$username}}/{{$reponame}}/commit/{{.LastCommit}}">{{.Message}}</a></span> | ||||
|                     <span class="wrap"><a href="/{{$username}}/{{$reponame}}/commit/{{.Commit.Oid}}">{{.Commit.Message}}</a></span> | ||||
|                 </td> | ||||
|                 <td class="date"> | ||||
|                     <span class="wrap">{{TimeSince .Created}}</span> | ||||
|                     <span class="wrap">{{TimeSince .Commit.Committer.When}}</span> | ||||
|                 </td> | ||||
|                 </tr> | ||||
|                 {{end}} | ||||
|  |  | |||
							
								
								
									
										3
									
								
								web.go
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								web.go
									
									
									
									
									
								
							|  | @ -82,6 +82,9 @@ func runWeb(*cli.Context) { | |||
| 		middleware.SignInRequire(false), middleware.RepoAssignment(true), repo.Single) | ||||
| 	m.Get("/:username/:reponame/tree/:branchname", | ||||
| 		middleware.SignInRequire(false), middleware.RepoAssignment(true), repo.Single) | ||||
| 	m.Get("/:username/:reponame/commit/:commitid/**", middleware.SignInRequire(false), middleware.RepoAssignment(true), repo.Single) | ||||
| 	m.Get("/:username/:reponame/commit/:commitid", middleware.SignInRequire(false), middleware.RepoAssignment(true), repo.Single) | ||||
| 
 | ||||
| 	m.Get("/:username/:reponame", middleware.SignInRequire(false), middleware.RepoAssignment(true), repo.Single) | ||||
| 
 | ||||
| 	listenAddr := fmt.Sprintf("%s:%s", | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue