From 82522cdc067b996f3c88b6abb034b4d25bbe1d14 Mon Sep 17 00:00:00 2001 From: Robin Rosenberg Date: Mon, 25 Jun 2007 01:30:42 +0200 Subject: [PATCH] Do not crash on new repositories or empty branches An "empty" branch here is one without a single commit in it, ush as is the case with master in a new repository. Signed-off-by: Robin Rosenberg --- .../egit/core/internal/mapping/GitFileHistory.java | 23 ++++++++++++++-------- .../egit/core/project/RepositoryMapping.java | 2 +- .../internal/decorators/GitResourceDecorator.java | 2 +- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/org.spearce.egit.core/src/org/spearce/egit/core/internal/mapping/GitFileHistory.java b/org.spearce.egit.core/src/org/spearce/egit/core/internal/mapping/GitFileHistory.java index 539abe73..35aa5fca 100644 --- a/org.spearce.egit.core/src/org/spearce/egit/core/internal/mapping/GitFileHistory.java +++ b/org.spearce.egit.core/src/org/spearce/egit/core/internal/mapping/GitFileHistory.java @@ -206,15 +206,22 @@ static class EclipseWalker extends Walker { relativeResourceNameString).getObjectId(); } + Collection githistory; ObjectId head = getRepository().resolve("HEAD"); - Commit start = getRepository().mapCommit(head); - EclipseWalker walker = new EclipseWalker(getRepository(), start, relativeResourceName, - resource.getType() == IResource.FILE, - resource, - (flags & IFileHistoryProvider.SINGLE_LINE_OF_DESCENT) == 0, - activeDiffLeafId, - monitor); - Collection githistory = walker.collectHistory(); + if (head != null) { + Commit start = getRepository().mapCommit(head); + EclipseWalker walker = new EclipseWalker( + getRepository(), + start, + relativeResourceName, + resource.getType() == IResource.FILE, + resource, + (flags & IFileHistoryProvider.SINGLE_LINE_OF_DESCENT) == 0, + activeDiffLeafId, monitor); + githistory = walker.collectHistory(); + } else { + githistory = new ArrayList(); + } if (githistory.size() >0) { if (resource.getType()==IResource.FILE) { // TODO: consider index in future versions diff --git a/org.spearce.egit.core/src/org/spearce/egit/core/project/RepositoryMapping.java b/org.spearce.egit.core/src/org/spearce/egit/core/project/RepositoryMapping.java index ec420ca3..a897503d 100644 --- a/org.spearce.egit.core/src/org/spearce/egit/core/project/RepositoryMapping.java +++ b/org.spearce.egit.core/src/org/spearce/egit/core/project/RepositoryMapping.java @@ -217,7 +217,7 @@ public class RepositoryMapping { GitIndex index = repository.getIndex(); String repoRelativePath = getRepoRelativePath(rsrc); Tree headTree = repository.mapTree("HEAD"); - TreeEntry blob = headTree.findBlobMember(repoRelativePath); + TreeEntry blob = headTree!=null ? headTree.findBlobMember(repoRelativePath) : null; Entry entry = index.getEntry(repoRelativePath); if (rsrc instanceof IFile && entry == null && blob == null) return false; diff --git a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/decorators/GitResourceDecorator.java b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/decorators/GitResourceDecorator.java index bf86db28..9156aeea 100644 --- a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/decorators/GitResourceDecorator.java +++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/decorators/GitResourceDecorator.java @@ -259,7 +259,7 @@ public class GitResourceDecorator extends LabelProvider implements GitIndex index = repository.getIndex(); String repoRelativePath = mapped.getRepoRelativePath(rsrc); Tree headTree = repository.mapTree("HEAD"); - TreeEntry blob = headTree.findBlobMember(repoRelativePath); + TreeEntry blob = headTree!=null ? headTree.findBlobMember(repoRelativePath) : null; Entry entry = index.getEntry(repoRelativePath); if (entry == null) { if (blob == null) { -- 2.11.4.GIT