Add tags to commit section
diff --git a/bundles/org.eclipse.orion.client.git/web/git/css/git.css b/bundles/org.eclipse.orion.client.git/web/git/css/git.css
index cf7174b..4b0be47 100644
--- a/bundles/org.eclipse.orion.client.git/web/git/css/git.css
+++ b/bundles/org.eclipse.orion.client.git/web/git/css/git.css
@@ -104,7 +104,7 @@
 	background-color: #eee;
 }
 
-.gitComitListSectionTitle {
+.gitCommitListSectionTitle {
 	font-weight: bold;
 	font-size: 8pt;
 	text-transform: uppercase;
@@ -115,10 +115,32 @@
 	padding: 2px;
 }
 
-.gitComitListNoCommit {
+.gitCommitListNoCommit {
 	background-color: #ffffff;
 }
 
+.gitCommitListTagsTitle {
+	margin-right: 4px;
+}
+
+.gitCommitListTag {
+	border: 1px solid #ccc;
+	background-color: LemonChiffon;
+	border-radius: 4px;
+	display: inline-block;
+	margin: 2px;
+	padding: 2px;
+}
+
+.gitCommitListTagClose {
+	padding: 0px;
+	padding-left: 5px;
+}
+
+.gitCommitListNoTag {
+	margin-left: 4px;
+}
+
 .gitAuthorImage {
 	border: 1px solid lightGrey;
 	padding: 2px;
diff --git a/bundles/org.eclipse.orion.client.git/web/git/git-repository.js b/bundles/org.eclipse.orion.client.git/web/git/git-repository.js
index b70b94d..52cfed5 100644
--- a/bundles/org.eclipse.orion.client.git/web/git/git-repository.js
+++ b/bundles/org.eclipse.orion.client.git/web/git/git-repository.js
@@ -78,7 +78,7 @@
 	commandRegistry.registerCommandContribution("itemLevelCommands", "eclipse.openGitLog", 100); //$NON-NLS-1$ //$NON-NLS-0$
 	commandRegistry.registerCommandContribution("itemLevelCommands", "eclipse.orion.git.pull", 200); //$NON-NLS-1$ //$NON-NLS-0$
 	commandRegistry.registerCommandContribution("itemLevelCommands", "eclipse.removeBranch", 1000); //$NON-NLS-1$ //$NON-NLS-0$
-	commandRegistry.registerCommandContribution("itemLevelCommands", "eclipse.checkoutTag", 200); //$NON-NLS-1$ //$NON-NLS-0$
+	commandRegistry.registerCommandContribution("itemLevelCommands", "eclipse.checkoutTag", 0); //$NON-NLS-1$ //$NON-NLS-0$
 	commandRegistry.registerCommandContribution("itemLevelCommands", "eclipse.removeTag", 1000); //$NON-NLS-1$ //$NON-NLS-0$
 	commandRegistry.registerCommandContribution("itemLevelCommands", "eclipse.checkoutBranch", 200); //$NON-NLS-1$ //$NON-NLS-0$
 	commandRegistry.registerCommandContribution("itemLevelCommands", "eclipse.orion.git.applyPatch", 300); //$NON-NLS-1$ //$NON-NLS-0$
@@ -92,6 +92,9 @@
 	commandRegistry.registerCommandContribution("itemLevelCommands", "eclipse.removeRemote", 1000); //$NON-NLS-1$ //$NON-NLS-0$
 	commandRegistry.registerCommandContribution("itemLevelCommands", "eclipse.orion.git.deleteConfigEntryCommand", 1000); //$NON-NLS-1$ //$NON-NLS-0$
 	commandRegistry.registerCommandContribution("itemLevelCommands", "eclipse.orion.git.editConfigEntryCommand", 200); //$NON-NLS-1$ //$NON-NLS-0$
+	commandRegistry.registerCommandContribution("itemLevelCommands", "eclipse.orion.git.addTag", 1); //$NON-NLS-1$ //$NON-NLS-0$
+	commandRegistry.registerCommandContribution("itemLevelCommands", "eclipse.orion.git.cherryPick", 2); //$NON-NLS-1$ //$NON-NLS-0$
+	commandRegistry.registerCommandContribution("itemLevelCommands", "eclipse.orion.git.revert", 3); //$NON-NLS-1$ //$NON-NLS-0$
 	
 	// page navigation contributions
 	commandRegistry.registerCommandContribution("pageNavigationActions", "eclipse.orion.git.previousTagPage", 1);
diff --git a/bundles/org.eclipse.orion.client.git/web/git/nls/root/gitmessages.js b/bundles/org.eclipse.orion.client.git/web/git/nls/root/gitmessages.js
index 32e336f..399712e 100644
--- a/bundles/org.eclipse.orion.client.git/web/git/nls/root/gitmessages.js
+++ b/bundles/org.eclipse.orion.client.git/web/git/nls/root/gitmessages.js
@@ -230,7 +230,7 @@
 	"Link Repository": "Link Repository",
 	"Folder name:": "Folder name:",
 	"Repository was linked to ": "Repository was linked to ",
-	"Checkout the current tag, creating a local branch based on its contents.": "Checkout the current tag, creating a local branch based on its contents.",
+	"Checkout the current tag, creating a local branch based on its contents.": "Checkout this commit, creating a local branch based on its contents.",
 	"Checking out tag ${0}": "Checking out tag ${0}",
 	"Checkout the branch or corresponding local branch and make it active. If the remote tracking branch does not have a corresponding local branch, the local branch will be created first.": "Checkout the branch or corresponding local branch and make it active. If the remote tracking branch does not have a corresponding local branch, the local branch will be created first.",
 	"Checking out branch...": "Checking out branch...",
@@ -435,5 +435,6 @@
 	"Incoming" : "Incoming",
 	"Outgoing" : "Outgoing",
 	"Synchronized" : "Common",
-	"NoBranch" : "No Branch"
+	"NoBranch" : "No Branch",
+	"None": "None"
 });
diff --git a/bundles/org.eclipse.orion.client.git/web/orion/git/gitCommands.js b/bundles/org.eclipse.orion.client.git/web/orion/git/gitCommands.js
index 16e0374..47c534b 100644
--- a/bundles/org.eclipse.orion.client.git/web/orion/git/gitCommands.js
+++ b/bundles/org.eclipse.orion.client.git/web/orion/git/gitCommands.js
@@ -480,7 +480,7 @@
 				}
 			},
 			visibleWhen: function(item){
-				return item.Type === "Tag"; //$NON-NLS-0$
+				return item.Type === "Tag" || item.Type === "Commit"; //$NON-NLS-0$
 			}
 		});
 		commandService.addCommand(checkoutTagCommand);
diff --git a/bundles/org.eclipse.orion.client.git/web/orion/git/gitRepositoryExplorer.js b/bundles/org.eclipse.orion.client.git/web/orion/git/gitRepositoryExplorer.js
index 45a9bcf..985b5ea 100644
--- a/bundles/org.eclipse.orion.client.git/web/orion/git/gitRepositoryExplorer.js
+++ b/bundles/org.eclipse.orion.client.git/web/orion/git/gitRepositoryExplorer.js
@@ -170,7 +170,6 @@
 					that.statusDeferred = that.displayStatus(repositories[0]);
 					that.displayCommits(repositories[0]);
 					that.displayBranches(repositories[0], "full"); //$NON-NLS-0$
-					that.displayTags(repositories[0]);
 					that.displayConfig(repositories[0], "full"); //$NON-NLS-0$
 				} else if (resp.Children[0].Type === "Clone"){ //$NON-NLS-0$
 					repositories = resp.Children;
@@ -202,7 +201,6 @@
 							that.initTitleBar(repositories[0], messages['Tags']);
 							
 							that.displayRepositories(repositories, "mini", true); //$NON-NLS-0$
-							that.displayTags(repositories[0], "full"); //$NON-NLS-0$
 						}, function (error) {
 							that.handleError(error);
 						}
@@ -403,33 +401,6 @@
 		});
 	};
 	
-	// Git tags
-	
-	GitRepositoryExplorer.prototype.displayTags = function(repository, mode){
-		// render section even before initialRender
-		var tableNode = lib.node("table");
-		var titleWrapper = new mSection.Section(tableNode, {
-			id : "tagSection",
-			iconClass : ["gitImageSprite", "git-sprite-tag"], //$NON-NLS-1$ //$NON-NLS-0$
-			title : ("Tags" + (mode === "full" ? "" : " (5 most recent)")),
-			content : '<div id="tagNode"></div>',
-			canHide : true,
-			hidden : true,
-			preferenceService : this.preferencesService
-		});
-
-		var tagsNavigator = new mGitTagList.GitTagListExplorer({
-			serviceRegistry: this.registry,
-			commandRegistry: this.commandService,
-			parentId:"tagNode",
-			actionScopeId: this.actionScopeId,
-			section: titleWrapper,
-			repository: repository,
-			mode: mode
-		});
-		tagsNavigator.display();
-	};
-	
 	// Git Config
 	
 	GitRepositoryExplorer.prototype.displayConfig = function(repository, mode){
diff --git a/bundles/org.eclipse.orion.client.git/web/orion/git/widgets/gitCommitList.js b/bundles/org.eclipse.orion.client.git/web/orion/git/widgets/gitCommitList.js
index c6fee26..9b0eefd 100644
--- a/bundles/org.eclipse.orion.client.git/web/orion/git/widgets/gitCommitList.js
+++ b/bundles/org.eclipse.orion.client.git/web/orion/git/widgets/gitCommitList.js
@@ -310,6 +310,7 @@
 		this.incomingActionScope = "IncomingActions"; //$NON-NLS-0$

 		this.outgoingActionScope = "OutgoingActions"; //$NON-NLS-0$

 		this.syncActionScope = "SynchronizedActions"; //$NON-NLS-0$

+		this.tagsActionScope  = "TagsAction"; //$NON-NLS-0$

 		this.createCommands();

 	}

 	GitCommitListExplorer.prototype = Object.create(mExplorer.Explorer.prototype);

@@ -461,6 +462,8 @@
 //					"ViewAllTooltip" : messages["See the full log"]

 //				}, this, "button"); //$NON-NLS-7$ //$NON-NLS-6$ //$NON-NLS-5$ //$NON-NLS-3$ //$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-0$

 	

+				commandService.registerCommandContribution(this.tagsActionScope, "eclipse.removeTag", 1000); //$NON-NLS-1$ //$NON-NLS-0$

+					

 				var tracksRemoteBranch = model.tracksRemoteBranch();

 				var localBranch = model.getLocalBranch();

 				var remoteBranch = model.getRemoteBranch();

@@ -532,7 +535,7 @@
 						horizontalBox.appendChild(expandContainer);

 						tableRow.classList.add("gitCommitListSection"); //$NON-NLS-0$

 					} else {

-						tableRow.classList.add("gitComitListNoCommit"); //$NON-NLS-0$

+						tableRow.classList.add("gitCommitListNoCommit"); //$NON-NLS-0$

 						sectionItem.classList.add("sectionTableItem"); //$NON-NLS-0$

 					}

 					

@@ -543,7 +546,7 @@
 					var title = document.createElement("div"); //$NON-NLS-0$

 					title.textContent = messages[item.Type];

 					if (item.Type !== "NoCommits") { //$NON-NLS-0$

-						title.classList.add("gitComitListSectionTitle"); //$NON-NLS-0$

+						title.classList.add("gitCommitListSectionTitle"); //$NON-NLS-0$

 					}

 					detailsView.appendChild(title);

 			

@@ -588,11 +591,37 @@
 					var d = document.createElement("div"); //$NON-NLS-0$

 					detailsView.appendChild(d);

 	

-					description = document.createElement("span"); //$NON-NLS-0$

+					description = document.createElement("div"); //$NON-NLS-0$

 					description.textContent = messages[" (SHA "] + commit.Name + messages[") by "] + commit.AuthorName + messages[" on "]

 							+ new Date(commit.Time).toLocaleString();

 					detailsView.appendChild(description);

 					

+					var tags = document.createElement("div"); //$NON-NLS-0$

+					tags.textContent = messages["Tags:"];

+					tags.className = "gitCommitListTagsTitle"; //$NON-NLS-0$

+					if (commit.Tags && commit.Tags.length) {

+						commit.Tags.forEach(function (tag) {

+							var tagSpan = document.createElement("span"); //$NON-NLS-0$

+							tagSpan.textContent = tag.Name;

+							tagSpan.className = "gitCommitListTag"; //$NON-NLS-0$

+							tags.appendChild(tagSpan);

+							

+							var tagSpanAction = document.createElement("span"); //$NON-NLS-0$

+							tagSpanAction.className = "core-sprite-close gitCommitListTagClose"; //$NON-NLS-0$

+							tagSpanAction.addEventListener("click", function(){ //$NON-NLS-0$

+								explorer.commandService.runCommand("eclipse.removeTag", tag, explorer); //$NON-NLS-0$

+							});

+							tagSpan.appendChild(tagSpanAction);

+						});

+					}

+					else {

+						var tagsNone = document.createElement("span"); //$NON-NLS-0$

+						tagsNone.textContent = messages["None"];

+						tags.className = "gitCommitListNoTag"; //$NON-NLS-0$

+						tags.appendChild(tagsNone);

+					}

+					detailsView.appendChild(tags);

+					

 					var itemActionScope = "itemLevelCommands"; //$NON-NLS-0$

 					actionsArea = document.createElement("ul"); //$NON-NLS-0$

 					actionsArea.className = "layoutRight commandList"; //$NON-NLS-0$