Mercurial > jhg
annotate src/com/tmate/hgkit/fs/RepositoryLookup.java @ 38:50dfc69c108e
Nodeid is confusing, denote it's reference to manifest
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> | 
|---|---|
| date | Fri, 14 Jan 2011 00:52:19 +0100 | 
| parents | aa1912c70b36 | 
| children | e34f90b9ded1 | 
| rev | line source | 
|---|---|
| 
2
 
08db726a0fb7
Shaping out low-level Hg structures
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
1 /** | 
| 
 
08db726a0fb7
Shaping out low-level Hg structures
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
2 * Copyright (c) 2010 Artem Tikhomirov | 
| 
 
08db726a0fb7
Shaping out low-level Hg structures
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
3 */ | 
| 
 
08db726a0fb7
Shaping out low-level Hg structures
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
4 package com.tmate.hgkit.fs; | 
| 
 
08db726a0fb7
Shaping out low-level Hg structures
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
5 | 
| 
 
08db726a0fb7
Shaping out low-level Hg structures
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
6 import java.io.File; | 
| 
4
 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
2 
diff
changeset
 | 
7 import java.util.ArrayList; | 
| 
 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
2 
diff
changeset
 | 
8 import java.util.Arrays; | 
| 
 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
2 
diff
changeset
 | 
9 import java.util.Collections; | 
| 
 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
2 
diff
changeset
 | 
10 import java.util.Iterator; | 
| 
 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
2 
diff
changeset
 | 
11 import java.util.LinkedList; | 
| 
 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
2 
diff
changeset
 | 
12 import java.util.List; | 
| 
2
 
08db726a0fb7
Shaping out low-level Hg structures
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
13 | 
| 
 
08db726a0fb7
Shaping out low-level Hg structures
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
14 import com.tmate.hgkit.ll.HgRepository; | 
| 
 
08db726a0fb7
Shaping out low-level Hg structures
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
15 import com.tmate.hgkit.ll.LocalHgRepo; | 
| 
 
08db726a0fb7
Shaping out low-level Hg structures
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
16 | 
| 
 
08db726a0fb7
Shaping out low-level Hg structures
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
17 /** | 
| 
 
08db726a0fb7
Shaping out low-level Hg structures
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
18 * @author artem | 
| 
 
08db726a0fb7
Shaping out low-level Hg structures
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
19 */ | 
| 
 
08db726a0fb7
Shaping out low-level Hg structures
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
20 public class RepositoryLookup { | 
| 
4
 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
2 
diff
changeset
 | 
21 | 
| 
 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
2 
diff
changeset
 | 
22 public HgRepository detect(Options opts) throws Exception { | 
| 
 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
2 
diff
changeset
 | 
23 if (opts.repoLocation != null) { | 
| 
 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
2 
diff
changeset
 | 
24 return detect(opts.repoLocation); | 
| 
 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
2 
diff
changeset
 | 
25 } | 
| 
 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
2 
diff
changeset
 | 
26 return detectFromWorkingDir(); | 
| 
 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
2 
diff
changeset
 | 
27 } | 
| 
 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
2 
diff
changeset
 | 
28 | 
| 
2
 
08db726a0fb7
Shaping out low-level Hg structures
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
29 public HgRepository detect(String[] commandLineArgs) throws Exception { | 
| 
4
 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
2 
diff
changeset
 | 
30 return detect(Options.parse(commandLineArgs)); | 
| 
2
 
08db726a0fb7
Shaping out low-level Hg structures
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
31 } | 
| 
 
08db726a0fb7
Shaping out low-level Hg structures
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
32 | 
| 
 
08db726a0fb7
Shaping out low-level Hg structures
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
33 public HgRepository detectFromWorkingDir() throws Exception { | 
| 
 
08db726a0fb7
Shaping out low-level Hg structures
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
34 return detect(System.getProperty("user.dir")); | 
| 
 
08db726a0fb7
Shaping out low-level Hg structures
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
35 } | 
| 
 
08db726a0fb7
Shaping out low-level Hg structures
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
36 | 
| 
 
08db726a0fb7
Shaping out low-level Hg structures
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
37 public HgRepository detect(String location) throws Exception /*FIXME Exception type, RepoInitException? */ { | 
| 
 
08db726a0fb7
Shaping out low-level Hg structures
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
38 File dir = new File(location); | 
| 
 
08db726a0fb7
Shaping out low-level Hg structures
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
39 File repository; | 
| 
 
08db726a0fb7
Shaping out low-level Hg structures
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
40 do { | 
| 
 
08db726a0fb7
Shaping out low-level Hg structures
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
41 repository = new File(dir, ".hg"); | 
| 
 
08db726a0fb7
Shaping out low-level Hg structures
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
42 if (repository.exists() && repository.isDirectory()) { | 
| 
 
08db726a0fb7
Shaping out low-level Hg structures
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
43 break; | 
| 
 
08db726a0fb7
Shaping out low-level Hg structures
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
44 } | 
| 
 
08db726a0fb7
Shaping out low-level Hg structures
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
45 repository = null; | 
| 
 
08db726a0fb7
Shaping out low-level Hg structures
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
46 dir = dir.getParentFile(); | 
| 
 
08db726a0fb7
Shaping out low-level Hg structures
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
47 | 
| 
 
08db726a0fb7
Shaping out low-level Hg structures
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
48 } while(dir != null); | 
| 
 
08db726a0fb7
Shaping out low-level Hg structures
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
49 if (repository == null) { | 
| 
 
08db726a0fb7
Shaping out low-level Hg structures
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
50 return new LocalHgRepo(location); | 
| 
 
08db726a0fb7
Shaping out low-level Hg structures
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
51 } | 
| 
 
08db726a0fb7
Shaping out low-level Hg structures
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
52 return new LocalHgRepo(repository); | 
| 
 
08db726a0fb7
Shaping out low-level Hg structures
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
53 } | 
| 
4
 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
2 
diff
changeset
 | 
54 | 
| 
 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
2 
diff
changeset
 | 
55 public static class Options { | 
| 
 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
2 
diff
changeset
 | 
56 | 
| 
 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
2 
diff
changeset
 | 
57 public String repoLocation; | 
| 
 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
2 
diff
changeset
 | 
58 public List<String> files; | 
| 
 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
2 
diff
changeset
 | 
59 | 
| 
 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
2 
diff
changeset
 | 
60 public static Options parse(String[] commandLineArgs) { | 
| 
 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
2 
diff
changeset
 | 
61 Options rv = new Options(); | 
| 
 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
2 
diff
changeset
 | 
62 List<String> args = Arrays.asList(commandLineArgs); | 
| 
 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
2 
diff
changeset
 | 
63 LinkedList<String> files = new LinkedList<String>(); | 
| 
 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
2 
diff
changeset
 | 
64 for (Iterator<String> it = args.iterator(); it.hasNext(); ) { | 
| 
 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
2 
diff
changeset
 | 
65 String arg = it.next(); | 
| 
 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
2 
diff
changeset
 | 
66 if (arg.charAt(0) == '-') { | 
| 
 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
2 
diff
changeset
 | 
67 // option | 
| 
 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
2 
diff
changeset
 | 
68 if (arg.length() == 1) { | 
| 
 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
2 
diff
changeset
 | 
69 throw new IllegalArgumentException("Bad option: -"); | 
| 
 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
2 
diff
changeset
 | 
70 } | 
| 
 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
2 
diff
changeset
 | 
71 switch ((int) arg.charAt(1)) { | 
| 
 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
2 
diff
changeset
 | 
72 case (int) 'R' : { | 
| 
 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
2 
diff
changeset
 | 
73 if (! it.hasNext()) { | 
| 
 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
2 
diff
changeset
 | 
74 throw new IllegalArgumentException("Need repo location"); | 
| 
 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
2 
diff
changeset
 | 
75 } | 
| 
 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
2 
diff
changeset
 | 
76 rv.repoLocation = it.next(); | 
| 
 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
2 
diff
changeset
 | 
77 break; | 
| 
 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
2 
diff
changeset
 | 
78 } | 
| 
 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
2 
diff
changeset
 | 
79 } | 
| 
 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
2 
diff
changeset
 | 
80 } else { | 
| 
 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
2 
diff
changeset
 | 
81 // filename | 
| 
 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
2 
diff
changeset
 | 
82 files.add(arg); | 
| 
 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
2 
diff
changeset
 | 
83 } | 
| 
 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
2 
diff
changeset
 | 
84 } | 
| 
 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
2 
diff
changeset
 | 
85 if (!files.isEmpty()) { | 
| 
 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
2 
diff
changeset
 | 
86 rv.files = new ArrayList<String>(files); | 
| 
 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
2 
diff
changeset
 | 
87 } else { | 
| 
 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
2 
diff
changeset
 | 
88 rv.files = Collections.emptyList(); | 
| 
 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
2 
diff
changeset
 | 
89 } | 
| 
 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
2 
diff
changeset
 | 
90 return rv; | 
| 
 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
2 
diff
changeset
 | 
91 } | 
| 
 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
2 
diff
changeset
 | 
92 } | 
| 
2
 
08db726a0fb7
Shaping out low-level Hg structures
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
93 } | 
