Skip to main content
summaryrefslogtreecommitdiffstats
blob: 0ccd53341cbb3c9a3854fd61fb2ce1f1f0c62072 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
package org.eclipse.team.internal.ccvs.core.resources;

/*
 * (c) Copyright IBM Corp. 2000, 2001.
 * All Rights Reserved.
 */

import java.io.File;

import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Path;
import org.eclipse.team.ccvs.core.ICVSRemoteResource;
import org.eclipse.team.core.TeamPlugin;
import org.eclipse.team.core.sync.ILocalSyncElement;
import org.eclipse.team.core.sync.IRemoteResource;
import org.eclipse.team.core.sync.LocalSyncElement;
import org.eclipse.team.internal.ccvs.core.CVSException;
import org.eclipse.team.internal.ccvs.core.CVSProvider;

public class CVSLocalSyncElement extends LocalSyncElement {

	protected ICVSResource cvsResource;
	protected IRemoteResource base;
	protected IResource local;

	public CVSLocalSyncElement(IResource local, IRemoteResource base) {

		this.local = local;
		this.base = base;
		
		File file = new File(local.getLocation().toOSString());
		if(local.getType() != IResource.FILE) {
			this.cvsResource = new LocalFolder(file);
		} else {
			this.cvsResource = new LocalFile(file);
		}
	}

	/*
	 * @see RemoteSyncElement#create(IResource, IRemoteResource, IRemoteResource)
	 */
	public ILocalSyncElement create(IResource local, IRemoteResource base, Object data) {
		return new CVSLocalSyncElement(local, base);
	}

	/*
	 * @see ILocalSyncElement#getLocal()
	 */
	public IResource getLocal() {
		return local;
	}

	/*
	 * @see ILocalSyncElement#getBase()
	 */
	public IRemoteResource getBase() {
		try {
			if(base == null && cvsResource.isManaged()) {
				if(cvsResource.isFolder()) {
					FolderSyncInfo syncInfo = ((ICVSFolder)cvsResource).getFolderSyncInfo();
					// We need to create an untraversable remote resource for the base
					base = new RemoteFolderTree(null, CVSProvider.getInstance().getRepository(syncInfo.getRoot()), new Path(syncInfo.getRepository()), syncInfo.getTag());
					((RemoteFolderTree)base).setChildren(new ICVSRemoteResource[0]);		
				} else {
					ResourceSyncInfo info = cvsResource.getSyncInfo();
					if(!info.isDeleted() || !info.isAdded()) {
						ICVSFolder parentFolder = cvsResource.getParent();
						FolderSyncInfo syncInfo = parentFolder.getFolderSyncInfo();
						RemoteFolder parent =  new RemoteFolder(null, CVSProvider.getInstance().getRepository(syncInfo.getRoot()), new Path(syncInfo.getRepository()), syncInfo.getTag());
						base = RemoteFile.getBase(parent, (ICVSFile)cvsResource);
					}
				}
			}
		} catch(CVSException e) {
			TeamPlugin.log(IStatus.ERROR, "CVS error creating the base resource", e);
			return null;
		}
		return base;
	}

	/*
	 * @see ILocalSyncElement#isDirty()
	 */
	public boolean isDirty() {
		if(cvsResource == null) {
			return false;
		} else {
			if(cvsResource.isFolder()) {
				return false;
			} else {
				try {
					if(cvsResource.getSyncInfo()==null) {
						return false;
					}
					return ((ICVSFile)cvsResource).isDirty();
				} catch(CVSException e) {
					return true;
				}
			}
		}
	}

	/*
	 * @see ILocalSyncElement#isCheckedOut()
	 */
	public boolean isCheckedOut() {
		return cvsResource != null;
	}

	/*
	 * @see ILocalSyncElement#hasRemote()
	 */
	public boolean hasRemote() {
		return cvsResource != null;
	}
	
	/*
	 * @see RemoteSyncElement#getData()
	 */
	protected Object getData() {
		return null;
	}
	
	/*
	 * Answers the CVS resource for this sync element
	 */
	 public ICVSResource getCVSResource() {
	 	return cvsResource;
	 }	 
	/*
	 * @see LocalSyncElement#isIgnored(IResource)
	 */
	protected boolean isIgnored(IResource child) {
		if(cvsResource==null || !cvsResource.isFolder() ) {
			return false;
		} else {
			try {
				ICVSResource managedChild = ((ICVSFolder)cvsResource).getChild(child.getName());
				return managedChild.isIgnored();
			} catch(CVSException e) {
				return false;		
			}
		}
	}
}

Back to the top