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 package org.eclipse.jgit.transport;
48
49 import java.io.File;
50 import java.io.FileInputStream;
51 import java.io.FileNotFoundException;
52 import java.io.InputStream;
53 import java.util.Arrays;
54 import java.util.Collections;
55 import java.util.LinkedHashSet;
56 import java.util.Set;
57
58 import org.eclipse.jgit.errors.NotSupportedException;
59 import org.eclipse.jgit.errors.TransportException;
60 import org.eclipse.jgit.internal.JGitText;
61 import org.eclipse.jgit.lib.Repository;
62 import org.eclipse.jgit.util.FS;
63
64 class TransportBundleFile extends Transport implements TransportBundle {
65 static final TransportProtocol PROTO_BUNDLE = new TransportProtocol() {
66 private final String[] schemeNames = { "bundle", "file" };
67
68 private final Set<String> schemeSet = Collections
69 .unmodifiableSet(new LinkedHashSet<String>(Arrays
70 .asList(schemeNames)));
71
72 @Override
73 public String getName() {
74 return JGitText.get().transportProtoBundleFile;
75 }
76
77 public Set<String> getSchemes() {
78 return schemeSet;
79 }
80
81 @Override
82 public boolean canHandle(URIish uri, Repository local, String remoteName) {
83 if (uri.getPath() == null
84 || uri.getPort() > 0
85 || uri.getUser() != null
86 || uri.getPass() != null
87 || uri.getHost() != null
88 || (uri.getScheme() != null && !getSchemes().contains(uri.getScheme())))
89 return false;
90 return true;
91 }
92
93 @Override
94 public Transport open(URIish uri, Repository local, String remoteName)
95 throws NotSupportedException, TransportException {
96 if ("bundle".equals(uri.getScheme())) {
97 File path = FS.DETECTED.resolve(new File("."), uri.getPath());
98 return new TransportBundleFile(local, uri, path);
99 }
100
101
102
103
104
105
106 return TransportLocal.PROTO_LOCAL.open(uri, local, remoteName);
107 }
108
109 public Transport open(URIish uri) throws NotSupportedException,
110 TransportException {
111 if ("bundle".equals(uri.getScheme())) {
112 File path = FS.DETECTED.resolve(new File("."), uri.getPath());
113 return new TransportBundleFile(uri, path);
114 }
115 return TransportLocal.PROTO_LOCAL.open(uri);
116 }
117 };
118
119 private final File bundle;
120
121 TransportBundleFile(Repository local, URIish uri, File bundlePath) {
122 super(local, uri);
123 bundle = bundlePath;
124 }
125
126 public TransportBundleFile(URIish uri, File bundlePath) {
127 super(uri);
128 bundle = bundlePath;
129 }
130
131 @Override
132 public FetchConnection openFetch() throws NotSupportedException,
133 TransportException {
134 final InputStream src;
135 try {
136 src = new FileInputStream(bundle);
137 } catch (FileNotFoundException err) {
138 throw new TransportException(uri, JGitText.get().notFound);
139 }
140 return new BundleFetchConnection(this, src);
141 }
142
143 @Override
144 public PushConnection openPush() throws NotSupportedException {
145 throw new NotSupportedException(
146 JGitText.get().pushIsNotSupportedForBundleTransport);
147 }
148
149 @Override
150 public void close() {
151
152 }
153
154 }