Mercurial > jhg
annotate src/com/tmate/hgkit/ll/LocalHgRepo.java @ 63:a47530a2ea12
Typo in the method name
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> | 
|---|---|
| date | Tue, 18 Jan 2011 18:42:50 +0100 | 
| parents | b771e94a4f7c | 
| children | 19e9e220bf68 | 
| rev | line source | 
|---|---|
| 
10
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
9 
diff
changeset
 | 
1 /* | 
| 
20
 
11cfabe692b3
Status operation for two repository revisions (no local dir involved)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
18 
diff
changeset
 | 
2 * Copyright (c) 2010, 2011 Artem Tikhomirov | 
| 
1
 
a3576694a4d1
Repository detection from local/specified directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
3 */ | 
| 
 
a3576694a4d1
Repository detection from local/specified directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
4 package com.tmate.hgkit.ll; | 
| 
 
a3576694a4d1
Repository detection from local/specified directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
5 | 
| 
8
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
6 import java.io.BufferedReader; | 
| 
1
 
a3576694a4d1
Repository detection from local/specified directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
7 import java.io.File; | 
| 
8
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
8 import java.io.FileInputStream; | 
| 
1
 
a3576694a4d1
Repository detection from local/specified directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
9 import java.io.IOException; | 
| 
8
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
10 import java.io.InputStreamReader; | 
| 
3
 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
1 
diff
changeset
 | 
11 import java.lang.ref.SoftReference; | 
| 
8
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
12 import java.util.Arrays; | 
| 
3
 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
1 
diff
changeset
 | 
13 import java.util.HashMap; | 
| 
8
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
14 import java.util.TreeSet; | 
| 
1
 
a3576694a4d1
Repository detection from local/specified directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
15 | 
| 
10
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
9 
diff
changeset
 | 
16 import com.tmate.hgkit.fs.DataAccessProvider; | 
| 
58
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
57 
diff
changeset
 | 
17 import com.tmate.hgkit.fs.FileWalker; | 
| 
10
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
9 
diff
changeset
 | 
18 | 
| 
1
 
a3576694a4d1
Repository detection from local/specified directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
19 /** | 
| 
 
a3576694a4d1
Repository detection from local/specified directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
20 * @author artem | 
| 
 
a3576694a4d1
Repository detection from local/specified directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
21 */ | 
| 
 
a3576694a4d1
Repository detection from local/specified directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
22 public class LocalHgRepo extends HgRepository { | 
| 
 
a3576694a4d1
Repository detection from local/specified directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
23 | 
| 
8
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
24 private File repoDir; // .hg folder | 
| 
1
 
a3576694a4d1
Repository detection from local/specified directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
25 private final String repoLocation; | 
| 
10
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
9 
diff
changeset
 | 
26 private final DataAccessProvider dataAccess; | 
| 
1
 
a3576694a4d1
Repository detection from local/specified directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
27 | 
| 
 
a3576694a4d1
Repository detection from local/specified directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
28 public LocalHgRepo(String repositoryPath) { | 
| 
 
a3576694a4d1
Repository detection from local/specified directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
29 setInvalid(true); | 
| 
 
a3576694a4d1
Repository detection from local/specified directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
30 repoLocation = repositoryPath; | 
| 
58
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
57 
diff
changeset
 | 
31 dataAccess = null; | 
| 
1
 
a3576694a4d1
Repository detection from local/specified directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
32 } | 
| 
 
a3576694a4d1
Repository detection from local/specified directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
33 | 
| 
 
a3576694a4d1
Repository detection from local/specified directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
34 public LocalHgRepo(File repositoryRoot) throws IOException { | 
| 
 
a3576694a4d1
Repository detection from local/specified directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
35 assert ".hg".equals(repositoryRoot.getName()) && repositoryRoot.isDirectory(); | 
| 
 
a3576694a4d1
Repository detection from local/specified directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
36 setInvalid(false); | 
| 
 
a3576694a4d1
Repository detection from local/specified directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
37 repoDir = repositoryRoot; | 
| 
 
a3576694a4d1
Repository detection from local/specified directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
38 repoLocation = repositoryRoot.getParentFile().getCanonicalPath(); | 
| 
10
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
9 
diff
changeset
 | 
39 dataAccess = new DataAccessProvider(); | 
| 
8
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
40 parseRequires(); | 
| 
1
 
a3576694a4d1
Repository detection from local/specified directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
41 } | 
| 
 
a3576694a4d1
Repository detection from local/specified directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
42 | 
| 
 
a3576694a4d1
Repository detection from local/specified directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
43 @Override | 
| 
 
a3576694a4d1
Repository detection from local/specified directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
44 public String getLocation() { | 
| 
 
a3576694a4d1
Repository detection from local/specified directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
45 return repoLocation; | 
| 
 
a3576694a4d1
Repository detection from local/specified directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
46 } | 
| 
18
 
02ee376bee79
status operation against current working directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
15 
diff
changeset
 | 
47 | 
| 
58
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
57 
diff
changeset
 | 
48 public FileWalker createWorkingDirWalker() { | 
| 
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
57 
diff
changeset
 | 
49 return new FileWalker(repoDir.getParentFile()); | 
| 
57
 
8b0d6f1bd6b4
Local status is back
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
55 
diff
changeset
 | 
50 } | 
| 
 
8b0d6f1bd6b4
Local status is back
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
55 
diff
changeset
 | 
51 | 
| 
10
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
9 
diff
changeset
 | 
52 // XXX package-local, unless there are cases when required from outside (guess, working dir/revision walkers may hide dirstate access and no public visibility needed) | 
| 
59
 
b771e94a4f7c
Introduce Internals to keep LocalHgRepo casts and alike in a single place. WCSC optionally to reuse SC data
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
58 
diff
changeset
 | 
53 final HgDirstate loadDirstate() { | 
| 
 
b771e94a4f7c
Introduce Internals to keep LocalHgRepo casts and alike in a single place. WCSC optionally to reuse SC data
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
58 
diff
changeset
 | 
54 return new HgDirstate(getDataAccess(), new File(repoDir, "dirstate")); | 
| 
10
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
9 
diff
changeset
 | 
55 } | 
| 
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
9 
diff
changeset
 | 
56 | 
| 
15
 
865bf07f381f
Basic hgignore handling
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
10 
diff
changeset
 | 
57 // package-local, see comment for loadDirstate | 
| 
 
865bf07f381f
Basic hgignore handling
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
10 
diff
changeset
 | 
58 public final HgIgnore loadIgnore() { | 
| 
 
865bf07f381f
Basic hgignore handling
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
10 
diff
changeset
 | 
59 return new HgIgnore(this); | 
| 
 
865bf07f381f
Basic hgignore handling
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
10 
diff
changeset
 | 
60 } | 
| 
 
865bf07f381f
Basic hgignore handling
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
10 
diff
changeset
 | 
61 | 
| 
10
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
9 
diff
changeset
 | 
62 /*package-local*/ DataAccessProvider getDataAccess() { | 
| 
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
9 
diff
changeset
 | 
63 return dataAccess; | 
| 
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
9 
diff
changeset
 | 
64 } | 
| 
15
 
865bf07f381f
Basic hgignore handling
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
10 
diff
changeset
 | 
65 | 
| 
 
865bf07f381f
Basic hgignore handling
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
10 
diff
changeset
 | 
66 /*package-local*/ File getRepositoryRoot() { | 
| 
 
865bf07f381f
Basic hgignore handling
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
10 
diff
changeset
 | 
67 return repoDir; | 
| 
 
865bf07f381f
Basic hgignore handling
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
10 
diff
changeset
 | 
68 } | 
| 
10
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
9 
diff
changeset
 | 
69 | 
| 
50
 
f1db8610da62
Log to consult (placeholder, for now) class to find out associated tags
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
24 
diff
changeset
 | 
70 @Override | 
| 
 
f1db8610da62
Log to consult (placeholder, for now) class to find out associated tags
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
24 
diff
changeset
 | 
71 protected HgTags createTags() { | 
| 
 
f1db8610da62
Log to consult (placeholder, for now) class to find out associated tags
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
24 
diff
changeset
 | 
72 return new HgTags(); | 
| 
 
f1db8610da62
Log to consult (placeholder, for now) class to find out associated tags
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
24 
diff
changeset
 | 
73 } | 
| 
 
f1db8610da62
Log to consult (placeholder, for now) class to find out associated tags
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
24 
diff
changeset
 | 
74 | 
| 
3
 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
1 
diff
changeset
 | 
75 private final HashMap<String, SoftReference<RevlogStream>> streamsCache = new HashMap<String, SoftReference<RevlogStream>>(); | 
| 
 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
1 
diff
changeset
 | 
76 | 
| 
 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
1 
diff
changeset
 | 
77 /** | 
| 
 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
1 
diff
changeset
 | 
78 * path - repository storage path (i.e. one usually with .i or .d) | 
| 
 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
1 
diff
changeset
 | 
79 */ | 
| 
 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
1 
diff
changeset
 | 
80 @Override | 
| 
 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
1 
diff
changeset
 | 
81 protected RevlogStream resolve(String path) { | 
| 
 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
1 
diff
changeset
 | 
82 final SoftReference<RevlogStream> ref = streamsCache.get(path); | 
| 
 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
1 
diff
changeset
 | 
83 RevlogStream cached = ref == null ? null : ref.get(); | 
| 
 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
1 
diff
changeset
 | 
84 if (cached != null) { | 
| 
 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
1 
diff
changeset
 | 
85 return cached; | 
| 
 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
1 
diff
changeset
 | 
86 } | 
| 
 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
1 
diff
changeset
 | 
87 File f = new File(repoDir, path); | 
| 
 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
1 
diff
changeset
 | 
88 if (f.exists()) { | 
| 
10
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
9 
diff
changeset
 | 
89 RevlogStream s = new RevlogStream(dataAccess, f); | 
| 
3
 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
1 
diff
changeset
 | 
90 streamsCache.put(path, new SoftReference<RevlogStream>(s)); | 
| 
 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
1 
diff
changeset
 | 
91 return s; | 
| 
 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
1 
diff
changeset
 | 
92 } | 
| 
 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
1 
diff
changeset
 | 
93 return null; | 
| 
 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
1 
diff
changeset
 | 
94 } | 
| 
 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
1 
diff
changeset
 | 
95 | 
| 
 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
1 
diff
changeset
 | 
96 @Override | 
| 
 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
1 
diff
changeset
 | 
97 public HgDataFile getFileNode(String path) { | 
| 
 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
1 
diff
changeset
 | 
98 String nPath = normalize(path); | 
| 
8
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
99 String storagePath = toStoragePath(nPath, true); | 
| 
3
 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
1 
diff
changeset
 | 
100 RevlogStream content = resolve(storagePath); | 
| 
 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
1 
diff
changeset
 | 
101 // XXX no content when no file? or HgDataFile.exists() to detect that? How about files that were removed in previous releases? | 
| 
 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
1 
diff
changeset
 | 
102 return new HgDataFile(this, nPath, content); | 
| 
 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
1 
diff
changeset
 | 
103 } | 
| 
8
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
104 | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
105 private boolean revlogv1; | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
106 private boolean store; | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
107 private boolean fncache; | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
108 private boolean dotencode; | 
| 
3
 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
1 
diff
changeset
 | 
109 | 
| 
8
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
110 | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
111 private void parseRequires() { | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
112 File requiresFile = new File(repoDir, "requires"); | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
113 if (!requiresFile.exists()) { | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
114 return; | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
115 } | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
116 try { | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
117 BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(requiresFile))); | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
118 String line; | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
119 while ((line = br.readLine()) != null) { | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
120 revlogv1 |= "revlogv1".equals(line); | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
121 store |= "store".equals(line); | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
122 fncache |= "fncache".equals(line); | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
123 dotencode |= "dotencode".equals(line); | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
124 } | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
125 } catch (IOException ex) { | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
126 ex.printStackTrace(); // FIXME log | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
127 } | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
128 } | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
129 | 
| 
9
 
d6d2a630f4a6
Access to underlaying file data wrapped into own Access object, implemented with FileChannel and ByteBuffer
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
8 
diff
changeset
 | 
130 // FIXME document what path argument is, whether it includes .i or .d, and whether it's 'normalized' (slashes) or not. | 
| 
 
d6d2a630f4a6
Access to underlaying file data wrapped into own Access object, implemented with FileChannel and ByteBuffer
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
8 
diff
changeset
 | 
131 // since .hg/store keeps both .i files and files without extension (e.g. fncache), guees, for data == false | 
| 
 
d6d2a630f4a6
Access to underlaying file data wrapped into own Access object, implemented with FileChannel and ByteBuffer
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
8 
diff
changeset
 | 
132 // we shall assume path has extension | 
| 
3
 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
1 
diff
changeset
 | 
133 // FIXME much more to be done, see store.py:_hybridencode | 
| 
8
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
134 // @see http://mercurial.selenic.com/wiki/CaseFoldingPlan | 
| 
9
 
d6d2a630f4a6
Access to underlaying file data wrapped into own Access object, implemented with FileChannel and ByteBuffer
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
8 
diff
changeset
 | 
135 @Override | 
| 
8
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
136 protected String toStoragePath(String path, boolean data) { | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
137 path = normalize(path); | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
138 final String STR_STORE = "store/"; | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
139 final String STR_DATA = "data/"; | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
140 final String STR_DH = "dh/"; | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
141 if (!data) { | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
142 return this.store ? STR_STORE + path : path; | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
143 } | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
144 path = path.replace(".hg/", ".hg.hg/").replace(".i/", ".i.hg/").replace(".d/", ".d.hg/"); | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
145 StringBuilder sb = new StringBuilder(path.length() << 1); | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
146 if (store || fncache) { | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
147 // encodefilename | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
148 final String reservedChars = "\\:*?\"<>|"; | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
149 // in fact, \\ is unlikely to match, ever - we've replaced all of them already, above. Just regards to store.py | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
150 int x; | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
151 char[] hexByte = new char[2]; | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
152 for (int i = 0; i < path.length(); i++) { | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
153 final char ch = path.charAt(i); | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
154 if (ch >= 'a' && ch <= 'z') { | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
155 sb.append(ch); // POIRAE | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
156 } else if (ch >= 'A' && ch <= 'Z') { | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
157 sb.append('_'); | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
158 sb.append(Character.toLowerCase(ch)); // Perhaps, (char) (((int) ch) + 32)? Even better, |= 0x20? | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
159 } else if ( (x = reservedChars.indexOf(ch)) != -1) { | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
160 sb.append('~'); | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
161 sb.append(toHexByte(reservedChars.charAt(x), hexByte)); | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
162 } else if ((ch >= '~' /*126*/ && ch <= 255) || ch < ' ' /*32*/) { | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
163 sb.append('~'); | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
164 sb.append(toHexByte(ch, hexByte)); | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
165 } else if (ch == '_') { | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
166 // note, encoding from store.py:_buildencodefun and :_build_lower_encodefun | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
167 // differ in the way they process '_' (latter doesn't escape it) | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
168 sb.append('_'); | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
169 sb.append('_'); | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
170 } else { | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
171 sb.append(ch); | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
172 } | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
173 } | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
174 // auxencode | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
175 if (fncache) { | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
176 x = 0; // last segment start | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
177 final TreeSet<String> windowsReservedFilenames = new TreeSet<String>(); | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
178 windowsReservedFilenames.addAll(Arrays.asList("con prn aux nul com1 com2 com3 com4 com5 com6 com7 com8 com9 lpt1 lpt2 lpt3 lpt4 lpt5 lpt6 lpt7 lpt8 lpt9".split(" "))); | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
179 do { | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
180 int i = sb.indexOf("/", x); | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
181 if (i == -1) { | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
182 i = sb.length(); | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
183 } | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
184 // windows reserved filenames are at least of length 3 | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
185 if (i - x >= 3) { | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
186 boolean found = false; | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
187 if (i-x == 3) { | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
188 found = windowsReservedFilenames.contains(sb.subSequence(x, i)); | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
189 } else if (sb.charAt(x+3) == '.') { // implicit i-x > 3 | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
190 found = windowsReservedFilenames.contains(sb.subSequence(x, x+3)); | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
191 } else if (i-x > 4 && sb.charAt(x+4) == '.') { | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
192 found = windowsReservedFilenames.contains(sb.subSequence(x, x+4)); | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
193 } | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
194 if (found) { | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
195 sb.setCharAt(x, '~'); | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
196 sb.insert(x+1, toHexByte(sb.charAt(x+2), hexByte)); | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
197 i += 2; | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
198 } | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
199 } | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
200 if (dotencode && (sb.charAt(x) == '.' || sb.charAt(x) == ' ')) { | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
201 sb.insert(x+1, toHexByte(sb.charAt(x), hexByte)); | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
202 sb.setCharAt(x, '~'); // setChar *after* charAt/insert to get ~2e, not ~7e for '.' | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
203 i += 2; | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
204 } | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
205 x = i+1; | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
206 } while (x < sb.length()); | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
207 } | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
208 } | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
209 final int MAX_PATH_LEN_IN_HGSTORE = 120; | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
210 if (fncache && (sb.length() + STR_DATA.length() > MAX_PATH_LEN_IN_HGSTORE)) { | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
211 throw HgRepository.notImplemented(); // FIXME digest and fncache use | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
212 } | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
213 if (this.store) { | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
214 sb.insert(0, STR_STORE + STR_DATA); | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
215 } | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
216 sb.append(".i"); | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
217 return sb.toString(); | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
218 } | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
219 | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
220 private static char[] toHexByte(int ch, char[] buf) { | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
221 assert buf.length > 1; | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
222 final String hexDigits = "0123456789abcdef"; | 
| 
9
 
d6d2a630f4a6
Access to underlaying file data wrapped into own Access object, implemented with FileChannel and ByteBuffer
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
8 
diff
changeset
 | 
223 buf[0] = hexDigits.charAt((ch & 0x00F0) >>> 4); | 
| 
8
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
224 buf[1] = hexDigits.charAt(ch & 0x0F); | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
225 return buf; | 
| 
3
 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
1 
diff
changeset
 | 
226 } | 
| 
 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
1 
diff
changeset
 | 
227 | 
| 
9
 
d6d2a630f4a6
Access to underlaying file data wrapped into own Access object, implemented with FileChannel and ByteBuffer
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
8 
diff
changeset
 | 
228 // TODO handle . and .. (although unlikely to face them from GUI client) | 
| 
3
 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
1 
diff
changeset
 | 
229 private static String normalize(String path) { | 
| 
8
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
230 path = path.replace('\\', '/').replace("//", "/"); | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
231 if (path.startsWith("/")) { | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
232 path = path.substring(1); | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
233 } | 
| 
 
a78c980749e3
Filename mangling according to requires options of the store (fncache incomplete for long names)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
3 
diff
changeset
 | 
234 return path; | 
| 
3
 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
1 
diff
changeset
 | 
235 } | 
| 
1
 
a3576694a4d1
Repository detection from local/specified directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
236 } | 
