Mercurial > jhg
annotate src/com/tmate/hgkit/fs/RepositoryLookup.java @ 159:f5aed108754e wrap-data-access
Approach with DataAccess instead of plain byte[] was merged into default branch
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> | 
|---|---|
| date | Wed, 09 Mar 2011 13:28:02 +0100 | 
| parents | 26e3eeaa3962 | 
| children | 
| 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: 
2diff
changeset | 7 import java.util.ArrayList; | 
| 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 8 import java.util.Arrays; | 
| 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 9 import java.util.Collections; | 
| 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 10 import java.util.Iterator; | 
| 49 
26e3eeaa3962
branch and user filtering for log operation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
48diff
changeset | 11 import java.util.LinkedHashSet; | 
| 4 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 12 import java.util.LinkedList; | 
| 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 13 import java.util.List; | 
| 49 
26e3eeaa3962
branch and user filtering for log operation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
48diff
changeset | 14 import java.util.Set; | 
| 2 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 15 | 
| 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 16 import com.tmate.hgkit.ll.HgRepository; | 
| 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 17 import com.tmate.hgkit.ll.LocalHgRepo; | 
| 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 18 | 
| 
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 * @author artem | 
| 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 21 */ | 
| 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 22 public class RepositoryLookup { | 
| 4 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 23 | 
| 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 24 public HgRepository detect(Options opts) throws Exception { | 
| 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 25 if (opts.repoLocation != null) { | 
| 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 26 return detect(opts.repoLocation); | 
| 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 27 } | 
| 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 28 return detectFromWorkingDir(); | 
| 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 29 } | 
| 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 30 | 
| 2 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 31 public HgRepository detect(String[] commandLineArgs) throws Exception { | 
| 4 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 32 return detect(Options.parse(commandLineArgs)); | 
| 2 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 33 } | 
| 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 34 | 
| 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 35 public HgRepository detectFromWorkingDir() throws Exception { | 
| 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 36 return detect(System.getProperty("user.dir")); | 
| 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 37 } | 
| 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 38 | 
| 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 39 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 | 40 File dir = new File(location); | 
| 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 41 File repository; | 
| 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 42 do { | 
| 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 43 repository = new File(dir, ".hg"); | 
| 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 44 if (repository.exists() && repository.isDirectory()) { | 
| 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 45 break; | 
| 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 46 } | 
| 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 47 repository = null; | 
| 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 48 dir = dir.getParentFile(); | 
| 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 49 | 
| 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 50 } while(dir != null); | 
| 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 51 if (repository == null) { | 
| 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 52 return new LocalHgRepo(location); | 
| 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 53 } | 
| 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 54 return new LocalHgRepo(repository); | 
| 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 55 } | 
| 4 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 56 | 
| 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 57 public static class Options { | 
| 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 58 | 
| 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 59 public String repoLocation; | 
| 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 60 public List<String> files; | 
| 48 
e34f90b9ded1
Limit option for history/log
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
4diff
changeset | 61 public int limit = -1; | 
| 49 
26e3eeaa3962
branch and user filtering for log operation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
48diff
changeset | 62 public Set<String> users; | 
| 
26e3eeaa3962
branch and user filtering for log operation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
48diff
changeset | 63 public Set<String> branches; | 
| 4 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 64 | 
| 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 65 public static Options parse(String[] commandLineArgs) { | 
| 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 66 Options rv = new Options(); | 
| 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 67 List<String> args = Arrays.asList(commandLineArgs); | 
| 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 68 LinkedList<String> files = new LinkedList<String>(); | 
| 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 69 for (Iterator<String> it = args.iterator(); it.hasNext(); ) { | 
| 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 70 String arg = it.next(); | 
| 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 71 if (arg.charAt(0) == '-') { | 
| 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 72 // option | 
| 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 73 if (arg.length() == 1) { | 
| 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 74 throw new IllegalArgumentException("Bad option: -"); | 
| 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 75 } | 
| 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 76 switch ((int) arg.charAt(1)) { | 
| 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 77 case (int) 'R' : { | 
| 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 78 if (! it.hasNext()) { | 
| 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 79 throw new IllegalArgumentException("Need repo location"); | 
| 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 80 } | 
| 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 81 rv.repoLocation = it.next(); | 
| 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 82 break; | 
| 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 83 } | 
| 48 
e34f90b9ded1
Limit option for history/log
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
4diff
changeset | 84 case (int) 'l' : { | 
| 
e34f90b9ded1
Limit option for history/log
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
4diff
changeset | 85 if (!it.hasNext()) { | 
| 
e34f90b9ded1
Limit option for history/log
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
4diff
changeset | 86 throw new IllegalArgumentException(); | 
| 
e34f90b9ded1
Limit option for history/log
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
4diff
changeset | 87 } | 
| 
e34f90b9ded1
Limit option for history/log
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
4diff
changeset | 88 rv.limit = Integer.parseInt(it.next()); | 
| 
e34f90b9ded1
Limit option for history/log
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
4diff
changeset | 89 break; | 
| 
e34f90b9ded1
Limit option for history/log
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
4diff
changeset | 90 } | 
| 49 
26e3eeaa3962
branch and user filtering for log operation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
48diff
changeset | 91 case (int) 'u' : { | 
| 
26e3eeaa3962
branch and user filtering for log operation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
48diff
changeset | 92 if (rv.users == null) { | 
| 
26e3eeaa3962
branch and user filtering for log operation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
48diff
changeset | 93 rv.users = new LinkedHashSet<String>(); | 
| 
26e3eeaa3962
branch and user filtering for log operation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
48diff
changeset | 94 } | 
| 
26e3eeaa3962
branch and user filtering for log operation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
48diff
changeset | 95 rv.users.add(it.next()); | 
| 
26e3eeaa3962
branch and user filtering for log operation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
48diff
changeset | 96 break; | 
| 
26e3eeaa3962
branch and user filtering for log operation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
48diff
changeset | 97 } | 
| 
26e3eeaa3962
branch and user filtering for log operation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
48diff
changeset | 98 case (int) 'b' : { | 
| 
26e3eeaa3962
branch and user filtering for log operation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
48diff
changeset | 99 if (rv.branches == null) { | 
| 
26e3eeaa3962
branch and user filtering for log operation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
48diff
changeset | 100 rv.branches = new LinkedHashSet<String>(); | 
| 
26e3eeaa3962
branch and user filtering for log operation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
48diff
changeset | 101 } | 
| 
26e3eeaa3962
branch and user filtering for log operation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
48diff
changeset | 102 rv.branches.add(it.next()); | 
| 
26e3eeaa3962
branch and user filtering for log operation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
48diff
changeset | 103 break; | 
| 
26e3eeaa3962
branch and user filtering for log operation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
48diff
changeset | 104 } | 
| 4 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 105 } | 
| 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 106 } else { | 
| 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 107 // filename | 
| 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 108 files.add(arg); | 
| 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 109 } | 
| 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 110 } | 
| 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 111 if (!files.isEmpty()) { | 
| 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 112 rv.files = new ArrayList<String>(files); | 
| 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 113 } else { | 
| 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 114 rv.files = Collections.emptyList(); | 
| 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 115 } | 
| 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 116 return rv; | 
| 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 117 } | 
| 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 118 } | 
| 2 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 119 } | 
