annotate cmdline/org/tmatesoft/hg/console/Outgoing.java @ 190:9b99d27aeddc

More debug printouts
author Artem Tikhomirov <tikhomirov.artem@gmail.com>
date Thu, 14 Apr 2011 02:48:06 +0200
parents c6fa4dbfc458
children e5407b5a586a
rev   line source
30
de7217a0aa4d Look up changes in the local repo that are not in the remote
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
1 /*
74
6f1b88693d48 Complete refactoring to org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 30
diff changeset
2 * Copyright (c) 2011 TMate Software Ltd
6f1b88693d48 Complete refactoring to org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 30
diff changeset
3 *
6f1b88693d48 Complete refactoring to org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 30
diff changeset
4 * This program is free software; you can redistribute it and/or modify
6f1b88693d48 Complete refactoring to org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 30
diff changeset
5 * it under the terms of the GNU General Public License as published by
6f1b88693d48 Complete refactoring to org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 30
diff changeset
6 * the Free Software Foundation; version 2 of the License.
6f1b88693d48 Complete refactoring to org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 30
diff changeset
7 *
6f1b88693d48 Complete refactoring to org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 30
diff changeset
8 * This program is distributed in the hope that it will be useful,
6f1b88693d48 Complete refactoring to org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 30
diff changeset
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
6f1b88693d48 Complete refactoring to org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 30
diff changeset
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
6f1b88693d48 Complete refactoring to org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 30
diff changeset
11 * GNU General Public License for more details.
6f1b88693d48 Complete refactoring to org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 30
diff changeset
12 *
6f1b88693d48 Complete refactoring to org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 30
diff changeset
13 * For information on how to redistribute this software under
6f1b88693d48 Complete refactoring to org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 30
diff changeset
14 * the terms of a license other than GNU General Public License
102
a3a2e5deb320 Updated contact address to support@hg4j.com
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 98
diff changeset
15 * contact TMate Software at support@hg4j.com
30
de7217a0aa4d Look up changes in the local repo that are not in the remote
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
16 */
74
6f1b88693d48 Complete refactoring to org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 30
diff changeset
17 package org.tmatesoft.hg.console;
30
de7217a0aa4d Look up changes in the local repo that are not in the remote
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
18
de7217a0aa4d Look up changes in the local repo that are not in the remote
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
19 import java.util.Collection;
185
c6fa4dbfc458 Complete Outgoing cmdline, with both lite (revisions) and complete (changeset) information dump
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 181
diff changeset
20 import java.util.Collections;
30
de7217a0aa4d Look up changes in the local repo that are not in the remote
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
21 import java.util.List;
de7217a0aa4d Look up changes in the local repo that are not in the remote
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
22
185
c6fa4dbfc458 Complete Outgoing cmdline, with both lite (revisions) and complete (changeset) information dump
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 181
diff changeset
23 import org.tmatesoft.hg.core.HgBadStateException;
171
2c3e96674e2a Towards outgoing changes - initial detection logic, get connected with remote repo stub
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
24 import org.tmatesoft.hg.core.HgException;
74
6f1b88693d48 Complete refactoring to org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 30
diff changeset
25 import org.tmatesoft.hg.core.Nodeid;
181
cd3371670f0b Refactor incoming and outgoing code to be shared with RepositoryComparator. Placeholders for in/out commands. Refactor common remote lookup code
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 178
diff changeset
26 import org.tmatesoft.hg.internal.RepositoryComparator;
97
ee2c750b036d Changelog to HgChangelog
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 74
diff changeset
27 import org.tmatesoft.hg.repo.HgChangelog;
171
2c3e96674e2a Towards outgoing changes - initial detection logic, get connected with remote repo stub
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
28 import org.tmatesoft.hg.repo.HgLookup;
2c3e96674e2a Towards outgoing changes - initial detection logic, get connected with remote repo stub
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
29 import org.tmatesoft.hg.repo.HgRemoteRepository;
74
6f1b88693d48 Complete refactoring to org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 30
diff changeset
30 import org.tmatesoft.hg.repo.HgRepository;
185
c6fa4dbfc458 Complete Outgoing cmdline, with both lite (revisions) and complete (changeset) information dump
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 181
diff changeset
31 import org.tmatesoft.hg.repo.HgChangelog.RawChangeset;
74
6f1b88693d48 Complete refactoring to org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 30
diff changeset
32
30
de7217a0aa4d Look up changes in the local repo that are not in the remote
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
33
de7217a0aa4d Look up changes in the local repo that are not in the remote
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
34 /**
74
6f1b88693d48 Complete refactoring to org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 30
diff changeset
35 * WORK IN PROGRESS, DO NOT USE
171
2c3e96674e2a Towards outgoing changes - initial detection logic, get connected with remote repo stub
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
36 * hg outgoing
74
6f1b88693d48 Complete refactoring to org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 30
diff changeset
37 *
6f1b88693d48 Complete refactoring to org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 30
diff changeset
38 * @author Artem Tikhomirov
6f1b88693d48 Complete refactoring to org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 30
diff changeset
39 * @author TMate Software Ltd.
30
de7217a0aa4d Look up changes in the local repo that are not in the remote
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
40 */
de7217a0aa4d Look up changes in the local repo that are not in the remote
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
41 public class Outgoing {
de7217a0aa4d Look up changes in the local repo that are not in the remote
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
42
de7217a0aa4d Look up changes in the local repo that are not in the remote
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
43 public static void main(String[] args) throws Exception {
74
6f1b88693d48 Complete refactoring to org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 30
diff changeset
44 Options cmdLineOpts = Options.parse(args);
6f1b88693d48 Complete refactoring to org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 30
diff changeset
45 HgRepository hgRepo = cmdLineOpts.findRepository();
30
de7217a0aa4d Look up changes in the local repo that are not in the remote
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
46 if (hgRepo.isInvalid()) {
de7217a0aa4d Look up changes in the local repo that are not in the remote
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
47 System.err.printf("Can't find repository in: %s\n", hgRepo.getLocation());
de7217a0aa4d Look up changes in the local repo that are not in the remote
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
48 return;
de7217a0aa4d Look up changes in the local repo that are not in the remote
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
49 }
185
c6fa4dbfc458 Complete Outgoing cmdline, with both lite (revisions) and complete (changeset) information dump
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 181
diff changeset
50 HgRemoteRepository hgRemote = new HgLookup().detectRemote(cmdLineOpts.getSingle(""), hgRepo);
181
cd3371670f0b Refactor incoming and outgoing code to be shared with RepositoryComparator. Placeholders for in/out commands. Refactor common remote lookup code
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 178
diff changeset
51 if (hgRemote.isInvalid()) {
cd3371670f0b Refactor incoming and outgoing code to be shared with RepositoryComparator. Placeholders for in/out commands. Refactor common remote lookup code
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 178
diff changeset
52 System.err.printf("Remote repository %s is not valid", hgRemote.getLocation());
cd3371670f0b Refactor incoming and outgoing code to be shared with RepositoryComparator. Placeholders for in/out commands. Refactor common remote lookup code
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 178
diff changeset
53 return;
172
87f40938c9b2 Configuration handling out of HgLookup (bad idea to use URL to pass keys)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 171
diff changeset
54 }
171
2c3e96674e2a Towards outgoing changes - initial detection logic, get connected with remote repo stub
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
55
185
c6fa4dbfc458 Complete Outgoing cmdline, with both lite (revisions) and complete (changeset) information dump
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 181
diff changeset
56 HgChangelog changelog = hgRepo.getChangelog();
c6fa4dbfc458 Complete Outgoing cmdline, with both lite (revisions) and complete (changeset) information dump
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 181
diff changeset
57 HgChangelog.ParentWalker pw = changelog.new ParentWalker();
30
de7217a0aa4d Look up changes in the local repo that are not in the remote
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
58 pw.init();
171
2c3e96674e2a Towards outgoing changes - initial detection logic, get connected with remote repo stub
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
59
181
cd3371670f0b Refactor incoming and outgoing code to be shared with RepositoryComparator. Placeholders for in/out commands. Refactor common remote lookup code
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 178
diff changeset
60 RepositoryComparator repoCompare = new RepositoryComparator(pw, hgRemote);
cd3371670f0b Refactor incoming and outgoing code to be shared with RepositoryComparator. Placeholders for in/out commands. Refactor common remote lookup code
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 178
diff changeset
61 repoCompare.compare(null);
cd3371670f0b Refactor incoming and outgoing code to be shared with RepositoryComparator. Placeholders for in/out commands. Refactor common remote lookup code
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 178
diff changeset
62 List<Nodeid> commonKnown = repoCompare.getCommon();
171
2c3e96674e2a Towards outgoing changes - initial detection logic, get connected with remote repo stub
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
63 dump("Nodes known to be both locally and at remote server", commonKnown);
2c3e96674e2a Towards outgoing changes - initial detection logic, get connected with remote repo stub
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
64 // sanity check
2c3e96674e2a Towards outgoing changes - initial detection logic, get connected with remote repo stub
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
65 for (Nodeid n : commonKnown) {
2c3e96674e2a Towards outgoing changes - initial detection logic, get connected with remote repo stub
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
66 if (!pw.knownNode(n)) {
2c3e96674e2a Towards outgoing changes - initial detection logic, get connected with remote repo stub
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
67 throw new HgException("Unknown node reported as common:" + n);
30
de7217a0aa4d Look up changes in the local repo that are not in the remote
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
68 }
de7217a0aa4d Look up changes in the local repo that are not in the remote
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
69 }
171
2c3e96674e2a Towards outgoing changes - initial detection logic, get connected with remote repo stub
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
70 // find all local children of commonKnown
2c3e96674e2a Towards outgoing changes - initial detection logic, get connected with remote repo stub
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
71 List<Nodeid> result = pw.childrenOf(commonKnown);
185
c6fa4dbfc458 Complete Outgoing cmdline, with both lite (revisions) and complete (changeset) information dump
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 181
diff changeset
72 dump("Lite", result);
c6fa4dbfc458 Complete Outgoing cmdline, with both lite (revisions) and complete (changeset) information dump
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 181
diff changeset
73 // another approach to get all changes after common:
c6fa4dbfc458 Complete Outgoing cmdline, with both lite (revisions) and complete (changeset) information dump
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 181
diff changeset
74 // find index of earliest revision, and report all that were later
c6fa4dbfc458 Complete Outgoing cmdline, with both lite (revisions) and complete (changeset) information dump
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 181
diff changeset
75 int earliestRevision = Integer.MAX_VALUE;
c6fa4dbfc458 Complete Outgoing cmdline, with both lite (revisions) and complete (changeset) information dump
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 181
diff changeset
76 for (Nodeid n : commonKnown) {
c6fa4dbfc458 Complete Outgoing cmdline, with both lite (revisions) and complete (changeset) information dump
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 181
diff changeset
77 if (pw.childrenOf(Collections.singletonList(n)).isEmpty()) {
c6fa4dbfc458 Complete Outgoing cmdline, with both lite (revisions) and complete (changeset) information dump
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 181
diff changeset
78 // there might be (old) nodes, known both locally and remotely, with no children
c6fa4dbfc458 Complete Outgoing cmdline, with both lite (revisions) and complete (changeset) information dump
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 181
diff changeset
79 // hence, we don't need to consider their local revision number
c6fa4dbfc458 Complete Outgoing cmdline, with both lite (revisions) and complete (changeset) information dump
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 181
diff changeset
80 continue;
c6fa4dbfc458 Complete Outgoing cmdline, with both lite (revisions) and complete (changeset) information dump
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 181
diff changeset
81 }
c6fa4dbfc458 Complete Outgoing cmdline, with both lite (revisions) and complete (changeset) information dump
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 181
diff changeset
82 int lr = changelog.getLocalRevision(n);
c6fa4dbfc458 Complete Outgoing cmdline, with both lite (revisions) and complete (changeset) information dump
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 181
diff changeset
83 if (lr < earliestRevision) {
c6fa4dbfc458 Complete Outgoing cmdline, with both lite (revisions) and complete (changeset) information dump
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 181
diff changeset
84 earliestRevision = lr;
c6fa4dbfc458 Complete Outgoing cmdline, with both lite (revisions) and complete (changeset) information dump
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 181
diff changeset
85 }
c6fa4dbfc458 Complete Outgoing cmdline, with both lite (revisions) and complete (changeset) information dump
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 181
diff changeset
86 }
c6fa4dbfc458 Complete Outgoing cmdline, with both lite (revisions) and complete (changeset) information dump
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 181
diff changeset
87 if (earliestRevision < 0 || earliestRevision >= changelog.getLastRevision()) {
c6fa4dbfc458 Complete Outgoing cmdline, with both lite (revisions) and complete (changeset) information dump
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 181
diff changeset
88 throw new HgBadStateException(String.format("Invalid index of common known revision: %d in total of %d", earliestRevision, 1+changelog.getLastRevision()));
c6fa4dbfc458 Complete Outgoing cmdline, with both lite (revisions) and complete (changeset) information dump
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 181
diff changeset
89 }
c6fa4dbfc458 Complete Outgoing cmdline, with both lite (revisions) and complete (changeset) information dump
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 181
diff changeset
90 System.out.println("Full");
c6fa4dbfc458 Complete Outgoing cmdline, with both lite (revisions) and complete (changeset) information dump
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 181
diff changeset
91 // show all, starting from next to common
c6fa4dbfc458 Complete Outgoing cmdline, with both lite (revisions) and complete (changeset) information dump
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 181
diff changeset
92 changelog.range(earliestRevision+1, changelog.getLastRevision(), new HgChangelog.Inspector() {
c6fa4dbfc458 Complete Outgoing cmdline, with both lite (revisions) and complete (changeset) information dump
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 181
diff changeset
93
c6fa4dbfc458 Complete Outgoing cmdline, with both lite (revisions) and complete (changeset) information dump
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 181
diff changeset
94 public void next(int revisionNumber, Nodeid nodeid, RawChangeset cset) {
c6fa4dbfc458 Complete Outgoing cmdline, with both lite (revisions) and complete (changeset) information dump
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 181
diff changeset
95 System.out.printf("changeset: %d:%s\n", revisionNumber, nodeid.toString());
c6fa4dbfc458 Complete Outgoing cmdline, with both lite (revisions) and complete (changeset) information dump
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 181
diff changeset
96 System.out.printf("user: %s\n", cset.user());
c6fa4dbfc458 Complete Outgoing cmdline, with both lite (revisions) and complete (changeset) information dump
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 181
diff changeset
97 System.out.printf("date: %s\n", cset.dateString());
c6fa4dbfc458 Complete Outgoing cmdline, with both lite (revisions) and complete (changeset) information dump
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 181
diff changeset
98 System.out.printf("comment: %s\n\n", cset.comment());
c6fa4dbfc458 Complete Outgoing cmdline, with both lite (revisions) and complete (changeset) information dump
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 181
diff changeset
99 }
c6fa4dbfc458 Complete Outgoing cmdline, with both lite (revisions) and complete (changeset) information dump
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 181
diff changeset
100 });
171
2c3e96674e2a Towards outgoing changes - initial detection logic, get connected with remote repo stub
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
101 }
2c3e96674e2a Towards outgoing changes - initial detection logic, get connected with remote repo stub
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
102
30
de7217a0aa4d Look up changes in the local repo that are not in the remote
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
103
de7217a0aa4d Look up changes in the local repo that are not in the remote
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
104 private static void dump(String s, Collection<Nodeid> c) {
de7217a0aa4d Look up changes in the local repo that are not in the remote
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
105 System.out.println(s);
de7217a0aa4d Look up changes in the local repo that are not in the remote
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
106 for (Nodeid n : c) {
de7217a0aa4d Look up changes in the local repo that are not in the remote
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
107 System.out.println(n);
de7217a0aa4d Look up changes in the local repo that are not in the remote
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
108 }
de7217a0aa4d Look up changes in the local repo that are not in the remote
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
109 }
de7217a0aa4d Look up changes in the local repo that are not in the remote
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
110 }