1 /*******************************************************************************
2 * Copyright (C) 2009, Stefan Lay <stefan.lay@sap.com>
4 * All rights reserved. This program and the accompanying materials
5 * are made available under the terms of the Eclipse Public License v1.0
6 * which accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
8 *******************************************************************************/
9 package org
.eclipse
.egit
.ui
.internal
.actions
;
11 import java
.io
.IOException
;
12 import java
.lang
.reflect
.InvocationTargetException
;
14 import org
.eclipse
.compare
.CompareUI
;
15 import org
.eclipse
.compare
.ITypedElement
;
16 import org
.eclipse
.core
.resources
.IFile
;
17 import org
.eclipse
.core
.resources
.IResource
;
18 import org
.eclipse
.egit
.core
.project
.RepositoryMapping
;
19 import org
.eclipse
.egit
.ui
.internal
.CompareUtils
;
20 import org
.eclipse
.egit
.ui
.internal
.GitCompareFileRevisionEditorInput
;
21 import org
.eclipse
.jface
.action
.IAction
;
22 import org
.eclipse
.jgit
.lib
.Constants
;
23 import org
.eclipse
.jgit
.lib
.Ref
;
24 import org
.eclipse
.jgit
.lib
.Repository
;
25 import org
.eclipse
.jgit
.revwalk
.RevCommit
;
26 import org
.eclipse
.jgit
.revwalk
.RevWalk
;
27 import org
.eclipse
.team
.ui
.synchronize
.SaveableCompareEditorInput
;
30 * Compares the working tree content of a file with the version of the file
33 public class CompareWithHeadAction
extends RepositoryAction
{
35 public void execute(IAction action
) throws InvocationTargetException
{
36 final IResource resource
= getSelectedResources()[0];
37 final RepositoryMapping mapping
= RepositoryMapping
.getMapping(resource
.getProject());
38 final Repository repository
= mapping
.getRepository();
39 final String gitPath
= mapping
.getRepoRelativePath(resource
);
42 final IFile baseFile
= (IFile
) resource
;
43 final ITypedElement base
= SaveableCompareEditorInput
.createFileElement(baseFile
);
47 Ref head
= repository
.getRef(Constants
.HEAD
);
48 RevWalk rw
= new RevWalk(repository
);
49 RevCommit commit
= rw
.parseCommit(head
.getObjectId());
51 next
= CompareUtils
.getFileRevisionTypedElement(gitPath
, commit
,
53 } catch (IOException e
) {
54 // this exception is handled by TeamAction.run
55 throw new InvocationTargetException(e
);
59 final GitCompareFileRevisionEditorInput in
= new GitCompareFileRevisionEditorInput(
61 CompareUI
.openCompareEditor(in
);
65 public boolean isEnabled() {
66 final IResource
[] selectedResources
= getSelectedResources();
67 if (selectedResources
.length
!= 1)
70 final IResource resource
= selectedResources
[0];
71 if (!(resource
instanceof IFile
)) {
74 final RepositoryMapping mapping
= RepositoryMapping
.getMapping(resource
.getProject());
75 return mapping
!= null;