From ba6eb8c99f603e5d570785d9d9a4a165bf8a34ba Mon Sep 17 00:00:00 2001 From: Dariusz Luksza Date: Sat, 19 Jun 2010 18:02:51 +0200 Subject: Fixes strange result set in Synchronize view on Windows On Windows platform Synchronize view returns strange result set when comparing two branches of tags without local changes. This issue occurs of different file separator char on this platform. In Git we always use UNIX file separator char for saving file paths. When we want retrieve a file content from Git repository we should replace all windows file separators with UNIX separators. Bug: 317362 Change-Id: Id85fe3ca802390c42810f7391e16ec9b329141ec Signed-off-by: Dariusz Luksza --- .../core/synchronize/GitResourceVariantTree.java | 45 +++++++++++++--------- 1 file changed, 26 insertions(+), 19 deletions(-) diff --git a/org.eclipse.egit.core/src/org/eclipse/egit/core/synchronize/GitResourceVariantTree.java b/org.eclipse.egit.core/src/org/eclipse/egit/core/synchronize/GitResourceVariantTree.java index 5984a500e7..bcfa476434 100644 --- a/org.eclipse.egit.core/src/org/eclipse/egit/core/synchronize/GitResourceVariantTree.java +++ b/org.eclipse.egit.core/src/org/eclipse/egit/core/synchronize/GitResourceVariantTree.java @@ -397,29 +397,36 @@ abstract class GitResourceVariantTree extends AbstractResourceVariantTree { Set membersSet = new HashSet(); for (IResource member : members) { - if (member.getType() == IResource.FILE) { - String repoWorkDir = repo.getWorkDir().toString(); - String memberRelPath = member.getLocation().toString(); - memberRelPath = memberRelPath.replace(repoWorkDir, ""); //$NON-NLS-1$ - if (memberRelPath.startsWith(File.separator)) { - memberRelPath = memberRelPath.substring(1); - } + String memberRelPath = getMemberRelPath(repo, member); + + // check if this file exists in repository + if (tree.existsBlob(memberRelPath)) { + // read file content and add it into store TreeEntry entry = tree.findBlobMember(memberRelPath); - if (entry != null) { - ObjectLoader objLoader = repo.openBlob(entry.getId()); - store.setBytes(member, objLoader.getCachedBytes()); - membersSet.add(member); - } - } else if (member.getType() == IResource.FOLDER ) { - try { - IResource[] resources = ((IContainer) member).members(); - membersSet.addAll(getAllMembers(repo, tree, resources)); - } catch (CoreException e) { - throw new TeamException(e.getStatus()); - } + ObjectLoader objLoader = repo.openBlob(entry.getId()); + store.setBytes(member, objLoader.getCachedBytes()); + membersSet.add(member); + } else if (tree.existsTree(memberRelPath)) { + // add to members if folder exists in repository + membersSet.add(member); } } return membersSet; } + private String getMemberRelPath(Repository repo, IResource member) { + String repoWorkDir = repo.getWorkDir().toString(); + if (!"/".equals(File.separator)) { //$NON-NLS-1$ + // fix file separator issue on windows + repoWorkDir = repoWorkDir.replace(File.separatorChar, '/'); + } + + String memberRelPath = member.getLocation().toString(); + memberRelPath = memberRelPath.replace(repoWorkDir, ""); //$NON-NLS-1$ + if (memberRelPath.startsWith("/"))//$NON-NLS-1$ + memberRelPath = memberRelPath.substring(1); + + return memberRelPath; + } + } -- cgit v1.2.3