protected static void AssertRequestIsCopiedToModel(RepositoryNavigationRequest request, RepositoryNavigationRequest model) { Assert.AreEqual(request.RepositoryName, model.RepositoryName); Assert.AreEqual(request.RepositoryLocation, model.RepositoryLocation); Assert.AreEqual(request.Path, model.Path); Assert.AreEqual(request.Treeish, model.Treeish); }
public PathViewModel(RepositoryNavigationRequest request, AbstractTreeNode node) { Elements = new List<Element>(); CurrentItem = new Element( new RepositoryNavigationRequest(request) { Path = node.Path }, request.Treeish, node); var currentNode = node; while (currentNode.Parent != null) { currentNode = currentNode.Parent; if (currentNode.Parent != null) { Elements.Add( new Element(new RepositoryNavigationRequest(request) { Path = currentNode.Path }, request.Treeish, currentNode)); } } Elements = new List<Element>(Elements.Reverse()); Root = new Element(request, request.Treeish, currentNode); IsRootEqualToCurrentItem = (currentNode == node); }
public static string RepositoryRootUrl(this UrlHelper helper, RepositoryNavigationRequest request) { var url = helper.Action("Details", "Repository", new { repositoryName = request.RepositoryName, location = request.RepositoryLocation }); return url; }
public RepositoryNavigationViewModelBase(Repository repository, RepositoryNavigationRequest request) : this() { RepositoryName = request.RepositoryName; Treeish = request.Treeish; Path = request.Path; RepositoryLocation = request.RepositoryLocation; FillFromRepository(repository, request); }
public CommitViewModel(Repository repository, RepositoryNavigationRequest request, Commit commit, bool fillParents) : base(new RepositoryNavigationRequest(request) { Treeish = commit.Hash }) { if (fillParents) { Parents = new List<CommitViewModel>(commit.Parents.Select(x => new CommitViewModel(repository, request, x, false))); } Tree = new TreeNodeViewModel(repository, request, commit.Tree); Commit = commit; }
public static string GitUrl(this UrlHelper helper, string action, RepositoryNavigationRequest request) { var url = helper.Action(action, "Repository", new { repositoryName = request.RepositoryName, id = request.Treeish, path = request.Path, location = request.RepositoryLocation }); return url; }
public void CopiesRequestDataToViewModel() { var request = new RepositoryNavigationRequest { Treeish = "master", RepositoryName = "Test", Path = "src", RepositoryLocation = _testRepositoryLocation }; var model = ExectueTreeAction(request); AssertRequestIsCopiedToModel(request, model); }
public void WhenNested_ProducesValidRepositoryTree() { var request = new RepositoryNavigationRequest { Treeish = "master", RepositoryName = "Test", Path = "src", }; var model = ExectueTreeAction(request); Assert.AreEqual(2, model.Items.Count); Assert.AreEqual(1, model.Items.Count(x => x.Path == "src/file001.txt" && x.Type == ListItemViewModel.ItemType.Blob)); Assert.AreEqual(1, model.Items.Count(x => x.Path == "src/file002.txt" && x.Type == ListItemViewModel.ItemType.Blob)); }
public void WhenOnRoot_ProducesValidRepositoryTree() { var request = new RepositoryNavigationRequest { Treeish = "master", RepositoryName = "Test", }; var model = ExectueTreeAction(request); Assert.AreEqual(4, model.Items.Count); Assert.AreEqual(1, model.Items.Count(x => x.Path == "src" && x.Type == ListItemViewModel.ItemType.Tree)); Assert.AreEqual(1, model.Items.Count(x => x.Path == "doc" && x.Type == ListItemViewModel.ItemType.Tree)); Assert.AreEqual(1, model.Items.Count(x => x.Path == "LICENSE.txt" && x.Type == ListItemViewModel.ItemType.Blob)); Assert.AreEqual(1, model.Items.Count(x => x.Path == "README.txt" && x.Type == ListItemViewModel.ItemType.Blob)); }
public void CopiesRequestDataToViewModel() { var request = new RepositoryNavigationRequest { Treeish = "master", RepositoryName = "Test", Path = "src/file001.txt", RepositoryLocation = _testRepositoryLocation }; var model = ExectueTreeAction(request); Assert.AreEqual(request.RepositoryName, model.RepositoryName); Assert.AreEqual(request.RepositoryLocation, model.RepositoryLocation); Assert.AreEqual(request.Path, model.Path); }
public override void OnActionExecuting(ActionExecutingContext filterContext) { base.OnActionExecuting(filterContext); RepositoryController controller = GetController(filterContext); if (filterContext.ActionParameters.Count != 1 || !filterContext.ActionParameters.ContainsKey("request") || filterContext.ActionParameters["request"].GetType() != typeof(RepositoryNavigationRequest)) { return; } // Building request to pass to controller action. var request = new RepositoryNavigationRequest { RepositoryName = filterContext.RouteData.GetRequiredString("repositoryName") }; var repoLocation = (string)filterContext.HttpContext.Request.QueryString["location"]; if (!String.IsNullOrEmpty(repoLocation)) { repoLocation = HttpUtility.UrlDecode(repoLocation); request.RepositoryLocation = repoLocation; } else { repoLocation = request.RepositoryName; } var repository = RepositoryResolver.GetRepository(repoLocation); if (repository == null) { throw new RepositoryNotFoundException(request.RepositoryName) { RepositoryLocation = repoLocation }; } controller.Repository = repository; request.Treeish = (string)filterContext.RouteData.Values["id"]; request.Treeish = request.Treeish ?? "master"; request.Path = (string)filterContext.RouteData.Values["path"]; // Each action should expect a request. filterContext.ActionParameters["request"] = request; }
public void CompyConstructor_Works() { var request = new RepositoryNavigationRequest() { RepositoryName = "a", Treeish = "b", Path = "c", RepositoryLocation = "d", }; var newRequest = new RepositoryNavigationRequest(request); string requestString = AssertEx.XmlSerialize(request); string newRequestString = AssertEx.XmlSerialize(newRequest); Assert.AreEqual(requestString, newRequestString, "Copied request should equal the template but it doesn't. '{0}' != '{1}'", requestString, newRequestString); }
public CommitDetailsViewModel(Repository repository, RepositoryNavigationRequest request, Commit commit) : this(repository, new RepositoryNavigationRequest(request) { Treeish = commit.Hash }) { CurrentCommit = new CommitViewModel(repository, request, commit, true); foreach (var change in commit.Changes) { // PASTE-START : borrowed from GitSharp.Demo var a = (change.ReferenceObject != null ? (change.ReferenceObject as Blob).RawData : new byte[0]); var b = (change.ComparedObject != null ? (change.ComparedObject as Blob).RawData : new byte[0]); a = (Diff.IsBinary(a) == true ? Encoding.ASCII.GetBytes("Binary content\nFile size: " + a.Length) : a); b = (Diff.IsBinary(b) == true ? Encoding.ASCII.GetBytes("Binary content\nFile size: " + b.Length) : b); // PASTE-END : borrowed from GitSharp.Demo var diff = new Diff(a, b); Changes.Add(new ChangeViewModel(request, change, diff)); } }
public ChangeViewModel(RepositoryNavigationRequest request, Change change, Diff diff) : base(request) { Change = change; Treeish = change.ComparedCommit.Hash; Name = System.IO.Path.GetFileName(change.Path); Path = change.Path; Diff = new UnifiedDiffViewModel(diff); Summary = new SummaryViewModel(); Summary.Inserts = Diff.Lines.Count(x => x.LineType == GitSharp.Diff.EditType.Inserted || (x.LineType == GitSharp.Diff.EditType.Replaced && x.LineB.HasValue) // new ones ); Summary.Deletes = Diff.Lines.Count(x => x.LineType == GitSharp.Diff.EditType.Deleted || (x.LineType == GitSharp.Diff.EditType.Replaced && x.LineA.HasValue) // replaced with new one(s) ); }
public TreeViewModel(Repository repository, RepositoryNavigationRequest request, Tree tree) : base(repository, request) { PathModel = new PathViewModel(request, tree); Tree = tree; Path = tree.Path; IsRoot = Tree.IsRoot; Items = new List<ListItemViewModel>(); foreach (var child in Tree.Children) { ListItemViewModel.ItemType type; AbstractTreeNode node = child as AbstractTreeNode; if (child is Leaf) { type = ListItemViewModel.ItemType.Blob; } else if (child is Tree) { type = ListItemViewModel.ItemType.Tree; } else { throw new InvalidOperationException("Unexpected child in tree."); } Commit lastCommit = null;// node.GetLastCommitBefore(commit); Items.Add(new ListItemViewModel(request) { Name = node.Name, Author = lastCommit != null ? lastCommit.Author.Name : String.Empty, AuthorDate = lastCommit != null ? lastCommit.AuthorDate : (DateTimeOffset?)null, CommitDate = lastCommit != null ? lastCommit.CommitDate : (DateTimeOffset?)null, Message = lastCommit != null ? lastCommit.Message : String.Empty, Type = type, Path = node.Path, }); } }
public ActionResult Blob(RepositoryNavigationRequest request) { var tree = GetTreeFromRequest(request); var node = tree.Node(request.Path); if (node == null) { throw new InvalidOperationException("Invalid path"); } var blob = node as Leaf; if (blob == null) { throw new InvalidOperationException("Path is not pointing to a tree."); } var viewModel = new BlobViewModel(Repository, request, blob) { FormattedData = _hightlightingService.GenerateHtml(blob.Data, blob.Path, null) }; return View(viewModel); }
public Element(RepositoryNavigationRequest request, string treeish, AbstractTreeNode node) { Text = !String.IsNullOrEmpty(node.Name) ? node.Name : request.RepositoryName; RepositoryName = request.RepositoryName; Path = node.Path; Treeish = treeish; RepositoryLocation = request.RepositoryLocation; }
public ActionResult Commits(RepositoryNavigationRequest request) { var commit = GetCommitFromRequest(request); var harvester = new CommitHarvester(commit, DateTime.UtcNow.AddDays(-30), 20); var viewModel = new CommitsViewModel(Repository, request); viewModel.AddCommits(harvester.Collect()); viewModel.ApplyGrouping(); return View(viewModel); }
public ActionResult Details(RepositoryNavigationRequest request) { return Tree(request); }
private TreeViewModel ExectueTreeAction(RepositoryNavigationRequest request) { var result = _controller.Tree(request); return result.AssertViewRendered().WithViewData<TreeViewModel>(); }
public ActionResult Tree(RepositoryNavigationRequest request) { var treeRoot = GetTreeFromRequest(request); var tree = treeRoot.Node(request.Path) as Tree; if (tree == null) { throw new InvalidOperationException("Supplied path '{0}' is not pointing to a tree." .Fill(request.Path)); } var viewModel = new TreeViewModel(Repository, request, tree); return View("Tree", viewModel); }
private Commit GetCommitFromRequest(RepositoryNavigationRequest request) { var obj = Repository.Get<AbstractObject>(request.Treeish); Commit commit = null; if (obj.IsCommit) { commit = obj as Commit; } else if (obj.IsTree) { commit = (obj as Tree).GetLastCommit(); } if (commit == null) { throw new InvalidOperationException("Unable to resolve a commit for supplied treeish '{0}'." .Fill(request.Treeish)); } return commit; }
private Tree GetTreeFromRequest(RepositoryNavigationRequest request) { var obj = Repository.Get<AbstractObject>(request.Treeish); Tree tree = null; if (obj is Commit) { tree = (obj as Commit).Tree; } else if (obj is Tree) { tree = obj as Tree; } if (tree == null) { throw new InvalidOperationException("Unable to resolve a tree for supplied treeish '{0}'." .Fill(request.Treeish)); } return tree; }
public static string BlobUrl(this UrlHelper helper, RepositoryNavigationRequest request) { return GitUrl(helper, "blob", request); }
public CommitsViewModel(Repository repository, RepositoryNavigationRequest request) : base(repository, request) { List = new List<Commit>(); }
public void FillFromRepository(Repository repository, RepositoryNavigationRequest request) { Branches.AddRange(repository.Branches.Keys.Select(x => new BranchViewModel(x, new RepositoryNavigationRequest() { RepositoryName = request.RepositoryName, Treeish = x, RepositoryLocation = request.RepositoryLocation }))); Tags.AddRange(repository.Tags.Keys.Select(x => new BranchViewModel(x, new RepositoryNavigationRequest() { RepositoryName = request.RepositoryName, Treeish = x, RepositoryLocation = request.RepositoryLocation }))); var obj = repository.Get<AbstractObject>(Treeish); if (obj.IsTag) { obj = (obj as Tag).Target; } if (obj.IsCommit) { CurrentCommit = new CommitViewModel(repository, request, obj as Commit, true); } }
public ActionResult Commit(RepositoryNavigationRequest request) { var commit = Repository.Get<Commit>(request.Treeish); var viewModel = new CommitDetailsViewModel(Repository, request, commit); return View(viewModel); }
public static string TreeUrl(this UrlHelper helper, RepositoryNavigationRequest request) { return GitUrl(helper, "tree", request); }
public TreeNodeViewModel(Repository repository, RepositoryNavigationRequest request, AbstractTreeNode node) : base(request) { Node = node; }
public static string CommitUrl(this UrlHelper helper, RepositoryNavigationRequest request) { return GitUrl(helper, "commit", request); }