Mercurial > hg > mercurial-talk
annotate query-languages.tex @ 343:a4b368f0b3f0
Explain that diff applies min/max
author | Martin Geisler <mg@aragost.com> |
---|---|
date | Wed, 20 Jun 2012 17:11:20 +0200 |
parents | 9c50a8f94f94 |
children | 0fac0c3cf747 |
rev | line source |
---|---|
294 | 1 \documentclass[t,noamsthm,xcolor=dvipsnames]{beamer} |
2 \input{preambel} | |
296 | 3 \title{Mercurial's Query Languages} |
294 | 4 \author{Martin Geisler |
5 \texorpdfstring{\\$\langle$\texttt{mg@aragost.com}$\rangle$} | |
6 {<mg@aragost.com>}} | |
338
9102d0f0f67a
Update title and date for CCDC
Martin Geisler <mg@aragost.com>
parents:
318
diff
changeset
|
7 \date{CCDC, Cambridge\\June 25th--27th, 2012} |
294 | 8 |
9 \begin{document} | |
10 | |
11 \begin{frame}[plain] | |
12 \maketitle | |
13 \begin{tikzpicture}[overlay, remember picture] | |
14 \node[above right] at (current page.south west) | |
15 {\includegraphics[height=3cm]{pixelman-front}}; | |
16 \end{tikzpicture} | |
17 \end{frame} | |
18 | |
19 \begin{frame}{Outline} | |
20 \tableofcontents | |
21 \end{frame} | |
22 | |
23 \section{Introduction} | |
24 | |
302
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
25 \begin{frame}[fragile]{Confusing Histories} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
26 Big projects can give rise to a branchy history: |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
27 \begin{itemize} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
28 \item several concurrent branches |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
29 \item many developers pushing changes |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
30 \end{itemize} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
31 |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
32 \pause |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
33 |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
34 Mercurial help you to cut away the unnecessary fluff: |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
35 \begin{itemize} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
36 \item<2-> Revision sets selects revisions (Mercurial 1.6): |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
37 \begin{lstlisting} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
38 $ hg log -r "branch('stable') and user('Martin')" |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
39 \end{lstlisting} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
40 Can be used in all places where Mercurial expects revisions |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
41 |
339
f4434e29a50d
Filesets was introduced in Mercurial 1.9
Martin Geisler <mg@aragost.com>
parents:
338
diff
changeset
|
42 \item<3-> File sets selects files in revisions (Mercurial 1.9): |
302
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
43 \begin{lstlisting} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
44 $ hg revert "set:added() and size('>20MB')" |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
45 \end{lstlisting} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
46 Can be used in all places where Mercurial expects file names |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
47 |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
48 \end{itemize} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
49 \end{frame} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
50 |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
51 \begin{frame}[fragile]{Flexibility} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
52 The query languages lets you solve hard problems: |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
53 \begin{itemize}[<+->] |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
54 \item Imagine you have a dirty working copy: |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
55 \begin{lstlisting} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
56 $ hg status |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
57 M index.html |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
58 A logo.png |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
59 \end{lstlisting} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
60 But how can you see the diff of \path{index.html} only? |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
61 |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
62 \item Easy! You use your nifty Unix shell: |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
63 \begin{lstlisting} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
64 $ hg diff $(hg status --no-status --modified) |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
65 \end{lstlisting} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
66 |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
67 \item With file sets you can do |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
68 \begin{lstlisting} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
69 $ hg diff "set:modified()" |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
70 \end{lstlisting} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
71 and it will work on all platforms |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
72 |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
73 \end{itemize} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
74 \end{frame} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
75 |
317
c6ee843b4a71
Move implementation slide up front
Martin Geisler <mg@aragost.com>
parents:
316
diff
changeset
|
76 \begin{frame}[fragile]{Implementation} |
c6ee843b4a71
Move implementation slide up front
Martin Geisler <mg@aragost.com>
parents:
316
diff
changeset
|
77 When a revision set is evaluated it is: |
c6ee843b4a71
Move implementation slide up front
Martin Geisler <mg@aragost.com>
parents:
316
diff
changeset
|
78 \begin{description}[<+->] |
c6ee843b4a71
Move implementation slide up front
Martin Geisler <mg@aragost.com>
parents:
316
diff
changeset
|
79 \item[tokenized:] split input into operators, symbols, strings |
c6ee843b4a71
Move implementation slide up front
Martin Geisler <mg@aragost.com>
parents:
316
diff
changeset
|
80 \item[parsed:] build parse tree based on operator precedence |
c6ee843b4a71
Move implementation slide up front
Martin Geisler <mg@aragost.com>
parents:
316
diff
changeset
|
81 \item[optimized:] reorders parse tree to evaluate cheap parts first: |
c6ee843b4a71
Move implementation slide up front
Martin Geisler <mg@aragost.com>
parents:
316
diff
changeset
|
82 \begin{lstlisting} |
c6ee843b4a71
Move implementation slide up front
Martin Geisler <mg@aragost.com>
parents:
316
diff
changeset
|
83 contains("README") and 1.0::1.5 |
c6ee843b4a71
Move implementation slide up front
Martin Geisler <mg@aragost.com>
parents:
316
diff
changeset
|
84 \end{lstlisting} |
c6ee843b4a71
Move implementation slide up front
Martin Geisler <mg@aragost.com>
parents:
316
diff
changeset
|
85 starts with a manifest-based query --- reorder to: |
c6ee843b4a71
Move implementation slide up front
Martin Geisler <mg@aragost.com>
parents:
316
diff
changeset
|
86 \begin{lstlisting} |
c6ee843b4a71
Move implementation slide up front
Martin Geisler <mg@aragost.com>
parents:
316
diff
changeset
|
87 1.0::1.5 and contains("README") |
c6ee843b4a71
Move implementation slide up front
Martin Geisler <mg@aragost.com>
parents:
316
diff
changeset
|
88 \end{lstlisting} |
c6ee843b4a71
Move implementation slide up front
Martin Geisler <mg@aragost.com>
parents:
316
diff
changeset
|
89 \item[executed:] go through tree and evaluate predicates |
c6ee843b4a71
Move implementation slide up front
Martin Geisler <mg@aragost.com>
parents:
316
diff
changeset
|
90 \end{description} |
c6ee843b4a71
Move implementation slide up front
Martin Geisler <mg@aragost.com>
parents:
316
diff
changeset
|
91 \end{frame} |
c6ee843b4a71
Move implementation slide up front
Martin Geisler <mg@aragost.com>
parents:
316
diff
changeset
|
92 |
301 | 93 \begin{frame}[fragile]{Quoting} |
94 How to handle special characters: | |
95 \begin{itemize}[<+->] | |
302
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
96 \item You will need to quote your queries on the command line: |
301 | 97 \begin{lstlisting} |
98 $ hg log -r parents() | |
99 zsh: parse error near `()' | |
100 \end{lstlisting} | |
101 | |
302
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
102 \item Strings in queries can be in single- or double-quotes: |
301 | 103 \begin{lstlisting} |
104 $ hg log -r "user('Martin')" | |
105 \end{lstlisting} | |
106 | |
107 \item Escape characters are supported | |
108 \begin{lstlisting} | |
109 $ hg log -r "keyword('first line\nsecond line')" | |
110 \end{lstlisting} | |
111 | |
112 \item Use a raw string to disable the escape characters: | |
113 \begin{lstlisting} | |
114 $ hg log -r "grep(r'Bug\s*\d+')" | |
115 \end{lstlisting} | |
116 | |
117 \end{itemize} | |
118 \end{frame} | |
119 | |
296 | 120 \section{Revision Sets} |
121 | |
122 \subsection{Predicates} | |
294 | 123 |
298
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
124 \begin{frame}[fragile]{Predicates} |
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
125 Predicates select changesets for inclusion in the resulting set: |
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
126 \begin{itemize} |
302
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
127 \item \cmd{closed()}, \cmd{head()}, \cmd{merge()}: simple changeset properties |
298
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
128 |
302
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
129 \item \cmd{author(string)}, \cmd{date(interval)}: search by user |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
130 name or by commit date |
298
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
131 |
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
132 \begin{lstlisting} |
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
133 $ hg log -r "author('Martin') and merge()" |
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
134 \end{lstlisting} |
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
135 |
302
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
136 \item \cmd{grep(regex)}, \cmd{keyword(string)}: search in commit |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
137 message, user name, changed file names for a regular expression or |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
138 a substring |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
139 |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
140 %\item \cmd{bisected(string)}: changesets marked good/bad/skip while |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
141 % bisecting |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
142 |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
143 \end{itemize} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
144 \end{frame} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
145 |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
146 \begin{frame}[fragile]{Matching by Files in Changesets} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
147 Matching by how a file changed: |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
148 \begin{itemize} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
149 \item \cmd{adds(pattern)}: a file matching pattern was added |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
150 \item \cmd{modifies(pattern)}: a file matching pattern was modified |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
151 \item \cmd{removes(pattern)}: a file matching pattern was removed |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
152 \item<2-> \cmd{file(pattern)}: combination of all the above |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
153 \item<3-> \cmd{contains(pattern)}: a file matching pattern was present |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
154 \end{itemize} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
155 \end{frame} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
156 |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
157 \subsection{Functions} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
158 |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
159 \begin{frame}[fragile]{Following the Changeset Graph} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
160 A common task is to follow the graph from a particular changeset: |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
161 \begin{itemize} |
341
8e4c6ccc7cdb
Shorten items to make them fit on a single line
Martin Geisler <mg@aragost.com>
parents:
340
diff
changeset
|
162 \item \cmd{::Y} or \cmd{ancestors(Y)}: ancestors of changesets in Y |
8e4c6ccc7cdb
Shorten items to make them fit on a single line
Martin Geisler <mg@aragost.com>
parents:
340
diff
changeset
|
163 \item \cmd{X::} or \cmd{descendants(X)}: descendants of changesets |
8e4c6ccc7cdb
Shorten items to make them fit on a single line
Martin Geisler <mg@aragost.com>
parents:
340
diff
changeset
|
164 in X |
302
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
165 \item \cmd{X::Y}: a combination of the above, finding changesets between X and Y |
298
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
166 \end{itemize} |
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
167 |
302
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
168 \pause |
298
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
169 |
302
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
170 Changes that need to be merged into the default branch: |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
171 \begin{lstlisting} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
172 $ hg log -r "ancestors(stable) - ancestors(default)" |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
173 $ hg log -r "::stable - ::default" |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
174 \end{lstlisting} |
298
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
175 |
294 | 176 \end{frame} |
177 | |
302
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
178 \begin{frame}[fragile]{Family Relations} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
179 |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
180 \begin{itemize} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
181 \item \cmd{ancestor(single, single)}: greatest common ancestor of |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
182 the two changesets. Used to find out what needs to be merged in a |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
183 merge between X and Y: |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
184 \begin{lstlisting} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
185 $ hg log -r "ancestor(X, Y)::Y" |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
186 \end{lstlisting} |
298
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
187 |
302
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
188 \item \cmd{children(set)}, \cmd{parents([set])}: set of all children/parents of set |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
189 |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
190 \item \cmd{heads(set)}, \cmd{roots(set)}: changesets from set with |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
191 no children/parents in set |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
192 |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
193 \end{itemize} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
194 \end{frame} |
298
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
195 |
302
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
196 \begin{frame}[fragile]{Parents and Grand Parents} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
197 Going from a changeset to the parent changeset is easy: |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
198 \begin{itemize} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
199 \item \cmd{p1([set])}, \cmd{p2([set])}: the first/second parent of |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
200 changesets in set or of the working copy if no set is given |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
201 |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
202 \item \cmd{x\textasciicircum}, \cmd{x\textasciicircum 2}: the |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
203 first/second parent of \cmd x |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
204 |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
205 \item \cmd{x\textasciitilde n}: the $n$'th first ancestor of \cmd x, |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
206 \cmd{x\textasciitilde 0} is \cmd x, \cmd{x\textasciitilde 3} is |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
207 \cmd{x\textasciicircum\textasciicircum\textasciicircum} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
208 \end{itemize} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
209 |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
210 To see both sides of a merge changeset M use |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
211 \begin{lstlisting} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
212 $ hg diff -r "p1(M):M" && hg diff -r "p2(M):M" |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
213 \end{lstlisting} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
214 or the shorter |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
215 \begin{lstlisting} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
216 $ hg diff -c M && hg diff -r "M^2:M" |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
217 \end{lstlisting} |
298
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
218 |
302
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
219 %\item \cmd{follow([file])}: follow working copy parents or follow a |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
220 % file history across renames (like \cmd{hg log -f}) |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
221 \end{frame} |
298
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
222 |
302
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
223 \begin{frame}[fragile]{The Next Push} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
224 The \cmd{hg outgoing} command tells what will be pushed, and so does |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
225 this function: |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
226 \begin{itemize} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
227 \item \cmd{outgoing([path])}: changesets not in the destination |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
228 repository |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
229 \end{itemize} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
230 |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
231 \pause |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
232 |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
233 It is now easy to see what you will push as a single diff: |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
234 \begin{lstlisting} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
235 $ hg diff -r "outgoing()" |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
236 \end{lstlisting} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
237 % \cmd{hg diff} extracts the first/last revision using \cmd{min()} and |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
238 % \cmd{max()} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
239 |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
240 \pause |
298
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
241 |
302
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
242 It is also easy to reset a repository: |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
243 \begin{lstlisting} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
244 $ hg strip "outgoing()" |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
245 \end{lstlisting} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
246 People familiar with Git will know this as |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
247 \begin{lstlisting} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
248 $ git reset --hard origin/master |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
249 \end{lstlisting} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
250 |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
251 \end{frame} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
252 |
340
6d043c1df267
Mention revsets related to phases
Martin Geisler <mg@aragost.com>
parents:
339
diff
changeset
|
253 \begin{frame}[fragile]{The Next Push (Offline!)} |
6d043c1df267
Mention revsets related to phases
Martin Geisler <mg@aragost.com>
parents:
339
diff
changeset
|
254 With the introduction of \alert{phases} (Mercurial 2.1) you can use: |
6d043c1df267
Mention revsets related to phases
Martin Geisler <mg@aragost.com>
parents:
339
diff
changeset
|
255 \begin{lstlisting} |
6d043c1df267
Mention revsets related to phases
Martin Geisler <mg@aragost.com>
parents:
339
diff
changeset
|
256 $ hg log -r "not public()" |
6d043c1df267
Mention revsets related to phases
Martin Geisler <mg@aragost.com>
parents:
339
diff
changeset
|
257 \end{lstlisting} |
6d043c1df267
Mention revsets related to phases
Martin Geisler <mg@aragost.com>
parents:
339
diff
changeset
|
258 to see unpublished changes without network communication. |
6d043c1df267
Mention revsets related to phases
Martin Geisler <mg@aragost.com>
parents:
339
diff
changeset
|
259 |
6d043c1df267
Mention revsets related to phases
Martin Geisler <mg@aragost.com>
parents:
339
diff
changeset
|
260 Equivalent to: |
6d043c1df267
Mention revsets related to phases
Martin Geisler <mg@aragost.com>
parents:
339
diff
changeset
|
261 \begin{lstlisting} |
6d043c1df267
Mention revsets related to phases
Martin Geisler <mg@aragost.com>
parents:
339
diff
changeset
|
262 $ hg log -r "draft() or secret()" |
6d043c1df267
Mention revsets related to phases
Martin Geisler <mg@aragost.com>
parents:
339
diff
changeset
|
263 \end{lstlisting} |
6d043c1df267
Mention revsets related to phases
Martin Geisler <mg@aragost.com>
parents:
339
diff
changeset
|
264 \end{frame} |
6d043c1df267
Mention revsets related to phases
Martin Geisler <mg@aragost.com>
parents:
339
diff
changeset
|
265 |
316 | 266 %\begin{frame}[fragile]{Handling Missing Revisions} |
267 % If you don't know if a given revision is present, then use: | |
268 % \begin{itemize} | |
269 % \item \cmd{present(set)}: prevents lookup errors if a revision in | |
270 % set is not found. Used like | |
271 %\begin{lstlisting} | |
272 %$ hg log -r "head() and (present('bad'):: - present('fix')::)" | |
273 %\end{lstlisting} | |
274 % where bad is a known buggy changeset and fix is a bugfix. Without | |
275 % the use of \cmd{present()}, an error would be raised if the bugfix | |
276 % is not yet in the repository. | |
277 % \end{itemize} | |
278 %\end{frame} | |
298
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
279 |
343
a4b368f0b3f0
Explain that diff applies min/max
Martin Geisler <mg@aragost.com>
parents:
342
diff
changeset
|
280 \begin{frame}[fragile]{Final Touches on Your Query} |
298
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
281 Trimming, cutting, manipulating the set: |
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
282 \begin{itemize}[<+->] |
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
283 \item \cmd{max(set)}, \cmd{min(set)}: the changeset with |
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
284 minimum/maximum revision number in the set |
343
a4b368f0b3f0
Explain that diff applies min/max
Martin Geisler <mg@aragost.com>
parents:
342
diff
changeset
|
285 |
a4b368f0b3f0
Explain that diff applies min/max
Martin Geisler <mg@aragost.com>
parents:
342
diff
changeset
|
286 Commands that need two revisions apply this as needed: |
a4b368f0b3f0
Explain that diff applies min/max
Martin Geisler <mg@aragost.com>
parents:
342
diff
changeset
|
287 \begin{lstlisting} |
a4b368f0b3f0
Explain that diff applies min/max
Martin Geisler <mg@aragost.com>
parents:
342
diff
changeset
|
288 $ hg diff -r "not public()" |
a4b368f0b3f0
Explain that diff applies min/max
Martin Geisler <mg@aragost.com>
parents:
342
diff
changeset
|
289 \end{lstlisting} |
a4b368f0b3f0
Explain that diff applies min/max
Martin Geisler <mg@aragost.com>
parents:
342
diff
changeset
|
290 behaves like |
a4b368f0b3f0
Explain that diff applies min/max
Martin Geisler <mg@aragost.com>
parents:
342
diff
changeset
|
291 \begin{lstlisting} |
a4b368f0b3f0
Explain that diff applies min/max
Martin Geisler <mg@aragost.com>
parents:
342
diff
changeset
|
292 $ hg diff -r "min(not public())" -r "max(not public())" |
a4b368f0b3f0
Explain that diff applies min/max
Martin Geisler <mg@aragost.com>
parents:
342
diff
changeset
|
293 \end{lstlisting} |
a4b368f0b3f0
Explain that diff applies min/max
Martin Geisler <mg@aragost.com>
parents:
342
diff
changeset
|
294 |
342
9c50a8f94f94
Sets are normally not ordered, but revsets are
Martin Geisler <mg@aragost.com>
parents:
341
diff
changeset
|
295 \item \cmd{reverse(set)}: the ``set'' is ordered; this reverses it |
298
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
296 \item \cmd{limit(set, n)}, \cmd{last(set, n)}: the first/last |
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
297 $n$ changesets |
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
298 \item \cmd{sort(set[, [-]key...])}: sorting the set by revision |
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
299 number, branch name, changeset message, user name, or date |
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
300 \end{itemize} |
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
301 \end{frame} |
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
302 |
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
303 \begin{frame}[fragile]{Solving Ambiguities} |
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
304 When you do \cmd{hg log -r "foo"}, Mercurial checks |
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
305 \begin{enumerate} |
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
306 %\item revision number |
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
307 %\item full changeset ID |
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
308 \item is \cmd{foo} a bookmark? |
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
309 \item is \cmd{foo} a tag? |
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
310 \item is \cmd{foo} a branch name? |
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
311 %\item partial changeset ID |
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
312 \end{enumerate} |
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
313 First match wins. |
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
314 |
302
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
315 \pause |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
316 |
298
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
317 You can override this using predicates: |
302
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
318 \begin{itemize} |
298
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
319 %\item \cmd{rev(number)} |
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
320 %\item \cmd{id(hash)} |
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
321 \item \cmd{bookmark([name])}, \cmd{tag([name])}: the changeset with |
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
322 the given bookmark or tag, or all bookmarked/tagged changesets |
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
323 \item \cmd{branch(name)}: changesets on the given branch |
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
324 \item \cmd{branch(set)}: changesets on the branches of the given set, |
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
325 normally used with a single changeset: |
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
326 \begin{lstlisting} |
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
327 $ hg log -r "branch(tip)" |
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
328 \end{lstlisting} |
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
329 \end{itemize} |
294 | 330 \end{frame} |
331 | |
296 | 332 \subsection{Operators} |
294 | 333 |
334 \begin{frame}{Operators} | |
302
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
335 You can combine two revision sets using: |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
336 \begin{itemize} |
294 | 337 |
302
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
338 \item \cmd{x and y} or \cmd{x \& y}: changesets in both \cmd x and |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
339 \cmd y |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
340 |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
341 \item \cmd{x or y} or \cmd{x | y} or \cmd{x + y}: changesets in |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
342 either \cmd x or \cmd y |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
343 |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
344 \item \cmd{x - y}: changesets in \cmd x but not in \cmd y |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
345 |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
346 \end{itemize} |
294 | 347 \end{frame} |
348 | |
298
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
349 \begin{frame}[fragile]{Examples} |
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
350 \begin{itemize} |
302
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
351 |
298
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
352 |
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
353 \item Heads on the current branch: |
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
354 \begin{lstlisting} |
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
355 $ hg log -r "head() and branch(.)" |
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
356 \end{lstlisting} |
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
357 |
302
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
358 Closed heads: |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
359 \begin{lstlisting} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
360 $ hg log -r "head() and closed()" |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
361 \end{lstlisting} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
362 |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
363 Reopened branches: |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
364 \begin{lstlisting} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
365 $ hg log -r "closed() and not head()" |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
366 \end{lstlisting} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
367 |
298
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
368 \item Open heads on the current branch: |
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
369 \begin{lstlisting} |
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
370 $ hg log -r "head() and branch(.) and not closed()" |
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
371 \end{lstlisting} |
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
372 |
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
373 \item Bugfixes that are not in a tagged release: |
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
374 \begin{lstlisting} |
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
375 $ hg log -r "keyword(bug) and not ::tagged()" |
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
376 \end{lstlisting} |
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
377 |
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
378 |
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
379 \end{itemize} |
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
380 \end{frame} |
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
381 |
294 | 382 |
296 | 383 \section{File Sets} |
384 | |
385 \begin{frame}{Selecting Files} | |
302
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
386 File sets let you: |
296 | 387 \begin{itemize} |
388 \item select files from working copy | |
389 \item select files from old revisions | |
390 \end{itemize} | |
302
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
391 Hopefully part of Mercurial 1.9 (July) or 2.0 (November) |
296 | 392 \end{frame} |
393 | |
318 | 394 \subsection{Working Copy Status and Path} |
395 | |
296 | 396 \begin{frame}[fragile]{Working Copy Status} |
397 The proposed predicates are: | |
398 \begin{itemize}[<+->] | |
399 | |
302
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
400 \item \cmd{modified()}, \cmd{added()}, \cmd{removed()}, |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
401 \cmd{deleted()}, \cmd{unknown()}, \cmd{ignored()}, \cmd{clean()}: |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
402 status flags |
296 | 403 |
302
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
404 \item \cmd{copied()}: copied files, quite hard to extract today |
296 | 405 |
302
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
406 \item \cmd{ignorable()}: tracked files that \emph{would} be ignored |
296 | 407 |
302
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
408 \item \cmd{tracked()}: all tracked files |
296 | 409 |
302
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
410 \item \cmd{conflicted()}: like \cmd{hg resolve --list} after a merge |
296 | 411 |
412 \end{itemize} | |
302
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
413 |
296 | 414 \end{frame} |
415 | |
302
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
416 \begin{frame}[fragile]{Searching by Path} |
296 | 417 We can replace the \cmd{find} Unix command: |
418 \begin{itemize} | |
419 \item \cmd{glob(P)} instead of \cmd{find -path P} | |
420 \item \cmd{regex(P)} instead of \cmd{find -regex P} | |
421 \end{itemize} | |
422 Remember that this also works on old revisions: | |
423 \begin{lstlisting} | |
298
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
424 $ hg status -r 1.0::2.0 "set:glob(src/*.h)" |
296 | 425 A src/foo.h |
426 M src/bar.h | |
427 \end{lstlisting} | |
428 This shows that \path{foo.h} is a new header file in version 2.0. | |
429 \end{frame} | |
430 | |
302
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
431 \begin{frame}{File Type Predicates} |
296 | 432 Other \cmd{find}-like predicates will be: |
433 \begin{itemize} | |
302
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
434 \item \cmd{executable()}, \cmd{symlink()}: file type |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
435 \item \cmd{perm()}, \cmd{owner()}: file permissions |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
436 \item \cmd{date()}, \cmd{size()}: other file meta data |
296 | 437 \end{itemize} |
438 \end{frame} | |
439 | |
318 | 440 \subsection{File Content} |
441 | |
302
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
442 \begin{frame}[fragile]{Looking Into Files} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
443 Matching files by content: |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
444 \begin{itemize}[<+->] |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
445 \item \cmd{grep()}: like the Unix \cmd{grep} we all love |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
446 \item \cmd{contains()}: simple sub-string matching |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
447 \item \cmd{binary()}, \cmd{text()}: does file contain a NUL byte? |
296 | 448 \begin{lstlisting} |
302
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
449 $ hg add "set:unknown() and not binary()" |
296 | 450 \end{lstlisting} |
302
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
451 |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
452 \item \cmd{decodes()}: check if file can be decoded with the given |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
453 character set, such as UTF-8, UTF-16, \dots |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
454 |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
455 Lets you find mistakes: |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
456 \begin{lstlisting} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
457 $ hg status --all "set:glob('**.py') and not decodes('UTF-8')" |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
458 C src/foo.py |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
459 \end{lstlisting} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
460 |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
461 \item \cmd{eol()}: line-ending type, Unix (LF) or DOS (CRLF) |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
462 \end{itemize} |
296 | 463 \end{frame} |
464 | |
302
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
465 \begin{frame}{Adding New Predicates} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
466 The feature will be extensible, some possible future extensions: |
296 | 467 \begin{itemize} |
468 \item \cmd{magic()}: recognize files based on file content, like the | |
469 \cmd{file} program in Unix | |
470 \item \cmd{locked()}: files locked for exclusive access by my | |
471 \ext{lock} extension | |
472 \end{itemize} | |
473 \end{frame} | |
474 | |
302
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
475 \section{Conclusion} |
295 | 476 |
302
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
477 \begin{frame}{Conclusion} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
478 In short: |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
479 \begin{itemize} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
480 \item revision sets lets you zoom in on the right part of the history |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
481 \item file sets will let you pick out the relevant files |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
482 \item both mechanisms are completely general |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
483 \end{itemize} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
484 |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
485 \pause |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
486 |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
487 Please get in touch if you have more questions: |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
488 \begin{itemize} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
489 \item Email: \curl{mg@aragost.com} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
490 \item IRC: \curl{mg} in \curl{\#mercurial} on \curl{irc.freenode.net} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
491 \end{itemize} |
294 | 492 |
302
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
493 \pause |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
494 |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
495 \begin{center} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
496 \begin{tikzpicture} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
497 \tikzstyle{every node}=[font=\Huge\bfseries] |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
498 \node[black, shift={(0.8pt, -0.8pt)}] {Thank you!}; |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
499 \node[orange!50!red] {Thank you!}; |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
500 \end{tikzpicture} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
501 \end{center} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
502 \end{frame} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
503 |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
504 %\appendix |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
505 %\newcounter{finalframe} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
506 %\setcounter{finalframe}{\value{framenumber}} |
78a5a27609a5
Introduction, conclussion, more consistent
Martin Geisler <mg@lazybytes.net>
parents:
301
diff
changeset
|
507 %\setcounter{framenumber}{\value{finalframe}} |
294 | 508 |
509 \end{document} | |
298
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
510 |
6420e2bdb651
More rough slides on revsets
Martin Geisler <mg@aragost.com>
parents:
296
diff
changeset
|
511 % LocalWords: changeset changesets |