1 /*******************************************************************************
2 * Copyright (C) 2007, Robin Rosenberg <robin.rosenberg@dewire.com>
3 * Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org>
5 * All rights reserved. This program and the accompanying materials
6 * are made available under the terms of the Eclipse Public License v1.0
7 * which accompanies this distribution, and is available at
8 * http://www.eclipse.org/legal/epl-v10.html
9 *******************************************************************************/
10 package org
.eclipse
.egit
.core
.op
;
12 import java
.io
.ByteArrayInputStream
;
14 import java
.io
.IOException
;
15 import java
.util
.Date
;
16 import java
.util
.TimeZone
;
18 import org
.eclipse
.core
.resources
.IFile
;
19 import org
.eclipse
.core
.runtime
.CoreException
;
20 import org
.eclipse
.core
.runtime
.IProgressMonitor
;
21 import org
.eclipse
.core
.runtime
.IStatus
;
22 import org
.eclipse
.core
.runtime
.jobs
.Job
;
23 import org
.eclipse
.egit
.core
.op
.ConnectProviderOperation
;
24 import org
.eclipse
.egit
.core
.test
.GitTestCase
;
25 import org
.eclipse
.team
.core
.RepositoryProvider
;
26 import org
.eclipse
.jgit
.lib
.Commit
;
27 import org
.eclipse
.jgit
.lib
.Constants
;
28 import org
.eclipse
.jgit
.lib
.FileTreeEntry
;
29 import org
.eclipse
.jgit
.lib
.ObjectId
;
30 import org
.eclipse
.jgit
.lib
.ObjectWriter
;
31 import org
.eclipse
.jgit
.lib
.PersonIdent
;
32 import org
.eclipse
.jgit
.lib
.RefUpdate
;
33 import org
.eclipse
.jgit
.lib
.Repository
;
34 import org
.eclipse
.jgit
.lib
.Tree
;
36 public class T0001_ConnectProviderOperationTest
extends GitTestCase
{
38 public void testNoRepository() throws CoreException
{
40 ConnectProviderOperation operation
= new ConnectProviderOperation(
41 project
.getProject(), new File("../..", Constants
.DOT_GIT
));
44 assertFalse(RepositoryProvider
.isShared(project
.getProject()));
45 assertTrue(!gitDir
.exists());
48 public void testNewRepository() throws CoreException
, IOException
{
50 File gitDir
= new File(project
.getProject().getWorkspace().getRoot()
51 .getRawLocation().toFile(), Constants
.DOT_GIT
);
52 Repository repository
= new Repository(gitDir
);
55 ConnectProviderOperation operation
= new ConnectProviderOperation(
56 project
.getProject(), new File("..", Constants
.DOT_GIT
));
59 assertTrue(RepositoryProvider
.isShared(project
.getProject()));
61 assertTrue(gitDir
.exists());
64 public void testNewUnsharedFile() throws CoreException
, IOException
,
65 InterruptedException
{
67 project
.createSourceFolder();
68 IFile fileA
= project
.getProject().getFolder("src").getFile("A.java");
69 String srcA
= "class A {\n" + "}\n";
70 fileA
.create(new ByteArrayInputStream(srcA
.getBytes()), false, null);
72 File gitDir
= new File(project
.getProject().getWorkspace().getRoot()
73 .getRawLocation().toFile(), Constants
.DOT_GIT
);
74 Repository thisGit
= new Repository(gitDir
);
76 Tree rootTree
= new Tree(thisGit
);
77 Tree prjTree
= rootTree
.addTree(project
.getProject().getName());
78 Tree srcTree
= prjTree
.addTree("src");
79 FileTreeEntry entryA
= srcTree
.addFile("A.java");
80 ObjectWriter writer
= new ObjectWriter(thisGit
);
81 entryA
.setId(writer
.writeBlob(fileA
.getRawLocation().toFile()));
82 srcTree
.setId(writer
.writeTree(srcTree
));
83 prjTree
.setId(writer
.writeTree(prjTree
));
84 rootTree
.setId(writer
.writeTree(rootTree
));
85 Commit commit
= new Commit(thisGit
);
86 commit
.setTree(rootTree
);
87 commit
.setAuthor(new PersonIdent("J. Git", "j.git@egit.org", new Date(
88 60876075600000L), TimeZone
.getTimeZone("GMT+1")));
89 commit
.setCommitter(commit
.getAuthor());
90 commit
.setMessage("testNewUnsharedFile\n\nJunit tests\n");
91 ObjectId id
= writer
.writeCommit(commit
);
92 RefUpdate lck
= thisGit
.updateRef("refs/heads/master");
93 assertNotNull("obtained lock", lck
);
94 lck
.setNewObjectId(id
);
95 assertEquals(RefUpdate
.Result
.NEW
, lck
.forceUpdate());
97 ConnectProviderOperation operation
= new ConnectProviderOperation(
98 project
.getProject(), new File("..", Constants
.DOT_GIT
));
101 final boolean f
[] = new boolean[1];
103 protected IStatus
run(IProgressMonitor monitor
) {
105 System
.out
.println("MyJob");
111 setRule(project
.getProject());
116 System
.out
.println("Waiting");
119 System
.out
.println("DONE");
121 assertNotNull(RepositoryProvider
.getProvider(project
.getProject()));