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