p&      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"# $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < =!>!?!@!A!B"C"D"E"F"G"H"I"J"K"L"M"N"O"P"Q"R"S"T"U"V"W"X"Y"Z"[#\#]#^#_#`#a#b#c#d#e$f%g%h%i%j%k%l%m%n%o%p%q%r%s%t%u%v%w%x%y%z%{%|%}%~&&&&&&&&&&&&&&&&&&&&&&&&&&&&''''''((((((((())))))))))))))))))))))))))))****+++++++++++++++++++++++++,,------------------------------------- - - - - ---................ .!.".#.$.%.&.'.(.).*.+.,.-.../.0.1.2.3/4/5/6/7/8/9/:/;/</=/>/?/@0A0B0C0D0E0F0G0H0I0J0K0L0M0N0O0P0Q0R0S0T0U0V0W0X0Y0Z0[0\0]0^0_0`0a0b0c0d0e0f0g0h0i0j0k0l0m0n0o0p0q0r0s0t0u0v0w0x0y0z0{0|0}0~00000000000000000111111111111111111111122333333333333445566666666666666666666666666667777777777777788888888899::::::::::::::::::;;;;;;;;;;; ; ; ; < <================== =!="=#=$=%=&>'>(>)>*>+>,>->.>/>0>1>2?3@4@5@6A7A8A9A:A;B<B=B>B?B@BABBBCBDBEBFBGBHCICJDKDLDMENEOEPEQERESFTFUFVFWFXFYFZF[F\F]F^F_F`FaFbFcFdFeFfFgFhFiFjFkGlGmGnGoGpGqGrGsGtGuGvHwHxHyHzH{H|H}H~IIIIIIIIIIIIIIJJJJJKKLLLLLLLLLMMMMMMMMMMMMMMMMMMMMNNNNNNNNNNNNNNNNOOOOOOOOOOOOOPPPQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQRRRRR R S S S SSSTTTTTTTTTTTTTTTT T!T"T#T$T%T&T'T(T)T*T+T,T-T.T/T0T1T2T3T4T5T6T7T8T9T:T;T<T=T>T?T@TATBTCTDTETFTGTHTITJTKTLTMTNTOTPTQTRTSTTTUTVTWTXTYTZT[T\T]T^T_T`TaTbTcTdTeTfTgThTiTjTkTlTmTnToTpTqTrTsTtTuTvTwTxTyTzT{T|T}T~TTTTTTTTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUVVVVWWWXYZZ[[\\]^^^_`abccdefghiiiiiiiiiiiiiiiijklmnooopppppqqrrrrrrrrrrrrstuvw w w w w xyz{{{{|}}~ !"#$%    &'()*+,-./012345      8676 is a wrapper around 8 which allows # for empty Documents. The simplest  Documents are built from 9s  using H. 88 represents a # by the function  which concatenates another # to its right. @A set of printers to print different types of text to a handle. :EThe State associated with a doc. Contains a set of printers for each 1 hanlde, and the current prefix of the document. a !  is a bit of enriched text. ! s get concatanated using  Z, which is right-associative. #A #4 is either a String, a packed string, or a chunk of ! text with both representations. ;; is the # representation of a space. << is the # representation of a newline. (Minimal ! %s representing the common characters ', (  ), *, and +. ,, is the !  that represents "(" -- is the !  that represents ")" .. doc returns a !  with the content of doc put within  a pair of parenthesis. 00/ puts a doc on stdout using the given printer. 113 puts a doc, followed by a newline on stdout using  the given printer. 22/ puts a doc on stdout using the simple printer U. 333 puts a doc, followed by a newline on stdout using  U 4 hputDocWith9 puts a doc on the given handle using the given printer. 5 hputDocLnWith0 puts a doc, followed by a newline on the given ! handle using the given printer. 6hputDoc& puts a doc on the given handle using U == h prints a list of #s to the handle h >hPrintPrintable h prints a # to the handle h. 8 renders a !  into a 9 with control codes for the  special features of the doc. 9 renders a !  into a 9 using a given set of printers. : renders a !  into ? with control codes for the ' special features of the Doc. See also  readerString. ; renders a !  into a list of  PackedStrings, one for each line. <renders a doc into a ? using a given set of printers. = renders a !  into a list of  PackedStrings, one for each A chunk of text that was added to the doc, using the given set of  printers. @ renders a !  into a list of  Printables using a set of B printers. Each item of the list corresponds to a string that was  added to the doc. AA builds a Doc from a 9 and a ? representing 1 the same text, but does not check that they do. BB builds a !  from a 9. The string is stored in the  Doc as both a String and a ?. CC builds a !  from a ? using T DD builds a !  from a ? using V EE creates a !  with invisible text from a ? FF creates a ! " representing a user chunk from a ?. GG. creates a Doc containing just one character. HH creates a !  from a String, using T. II creates a !  from a 9, using V directly JJ creates a ! " containing invisible text from a String KK creates a !  containing hidden text from a String LL creates a !  containing a user chunk from a String NM creates a !  containing blue text from a String RR creates a !  containing colored text from a String SS n s is a !  representing s line-wrapped at n characters A' printable x' creates a !  from any #. UU is a  which uses the set 'simplePriners\'' on any  handle. BGA set of default printers suitable for any handle. Does not use color. VV is the simplest  : it just concatenates together  the pieces of the !  WW is the  for hidden text. It seems to  just replace the document with X. I'm confused (Florent). X The empty ! . Z'( )'# is the concatenation operator for ! s [a [ b is a if it is not empty, else b. \a \ b is a followed by a space, then b. ]a ] b is a above b. ^^ piles vertically a list of ! s. __ piles vertically a list of ! %s leaving a blank line between each. ``' concatenates (horizontally) a list of ! s R !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`R#&%$ !"6723450189:<;=?>RJK@LHTSMNOPQIABGECDFUWVYXZ[\]^_`)(*'+,-./R !"!"#&%$$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`aRead/2interpret a date string, assuming UTC if timezone " is not specified in the string C"Case-insensitive variant of Parsec's D function. E"Case-insensitive variant of Parsec's F function. GMatch a parser at least n times. HMatch a parser at least n times, but no more than m times. ababab/cAn  MCalenderTime is an underspecified IJ D It is used for parsing dates. For example, if you want to parse  the date ' 4 January',, it may be useful to underspecify the year  by setting it to K'. This uses almost the same fields as  IJ$, a notable exception being that we  introduce q/ to indicate if a weekday was specified or not sRead/2interpret a date string, assuming UTC if timezone ' is not specified in the string (see L) 8 Warning! This errors out if we fail to interpret the  date t>Convert a date string into ISO 8601 format (yyyymmdd variant) : assuming local timezone if not specified in the string = Warning! This errors out if we fail to interpret the date uRead/8interpret a date string, assuming local timezone if not  specified in the string v5Return the local timezone offset from UTC in seconds LParse a date string with w = Warning! This errors out if we fail to interpret the date 5 Uses its first argument as the default time zone. w4Parse a date string, assuming a default timezone if ; the date string does not specify one. The date formats  understood are those of M and N M Display a IJ$ in the ISO 8601 format without any # separators, e.g. 20080825142503 x+The current time in the format returned by M O"Case-insensitive variant of Parsec's D function. P"Case-insensitive variant of Parsec's F function. QMatch a parser at least n times. RMatch a parser at least n times, but no more than m times. N6Try each of these date parsers in the following order  S  T  'old_date_time SCVS-style date/ times, e.g.  20070825 14:25:39 GMT + Note that time-zones are optional here. U"Old"-style dates, e.g.  Tue Jan 3 14:08:07 EST 1999 $ darcs-doc: Question (what does the old stand for really?) T<ISO 8601 dates and times. Please note the following flaws: I am reluctant to implement:  years > 9999 ? truncated representations with implied century (89 for 1989) I have not implemented: # repeated durations (not relevant) / lowest order component fractions in intervals  negative dates (BC) .I have not verified or have left too relaxed: # the difference between 24h and 0h E allows stuff like 2005-1212; either you use the hyphen all the way  (2005-12-12) or you don''t use it at all (20051212), but you don't use ' it halfway, likewise with time - No bounds checking whatsoever on intervals! K (next action: read iso doc to see if bounds-checking required?) -} VThree types of ISO 8601 date: 8 calendar date, e.g., 1997-07-17, 1997-07, 199707, 1997 % week+day in year, e.g., 1997-W32-4  day in year, e.g, 1997-273 W9Note that this returns a function which sets the time on  another calendar (see T for a list of  flaws yIntervals in ISO 8601, e.g.,  2008-09/2012-08-17T16:30  2008-09/P2Y11MT16H30M  P2Y11MT16H30M/2012-08-17T16:30 See z zDurations in ISO 8601, e.g.,  P4Y (four years)  P5M (five months) $ P4Y5M (four years and five months) 4 P4YT3H6S (four years, three hours and six seconds) XX p xs% parses a string with the obligatory  parser p+. If this suceeds, it continues on to the 5 rest of the input using the next parsers down the 7 chain. Each part of the chain consists of a parser 4 for a separator and for the content itself. The  separator is optional. 6A good use of this function is to help in parsing ISO 6 ISO 8601 dates and times. For example, the parser  )optchain year [(dash, month), (dash, day)] accepts : dates like 2007 (only the year is used), 2007-07 (only 8 the year and month), 200707 (only the year and month 9 with no separator), 2007-07-19 (year, month and day). YOne or more space. = WARNING! This only matches on the space character, not on  whitespace in general Z<English three-letter day abbreviations (e.g. Mon, Tue, Wed) [Four-digit year \;One or two digit month (e.g. 3 for March, 11 for November) ]!January is 1, February is 2, etc ^>English three-letter month abbreviations (e.g. Jan, Feb, Mar) _!day in one or two digit notation `hour in two-digit notation aminute in two-digit notation bsecond in two-digit notation climited timezone support  +HHMM or -HHMM  Universal timezones: UTC, UT A Some American timezones: EST, EDT, CST, CDT, MST, MDT, PST, PDT . Some European timezones: UT, GMT, CEST, EEST @ any sequence of alphabetic characters (WARNING! treated as 0!) {BIn English, either a date followed by a time, or vice-versa, e.g,  yesterday at noon  yesterday tea time  12:00 yesterday See d and e  Uses its first argument as now", i.e. the time relative to which   yesterday, today etc are to be interpreted d;Specific dates in English as specific points of time, e.g,  today  yesterday 1 last week (i.e. the beginning of that interval)  4 months ago (via f) The first argument is now. f1English expressions for points in the past, e.g.  4 months ago  1 day ago  day before yesterday See g |+English expressions for intervals of time, 3 before tea time (i.e. from the beginning of time) ( after 14:00 last month (i.e. till now) " between last year and last month 4 in the last three months (i.e. from then till now) " 4 months ago (i.e. till now; see f) }.Durations in English that begin with the word "last",  E.g. " last 4 months"$ is treated as the duration between  4 months ago and now e Either an W or one of several common ! English time expressions like noon or 'tea time' gSome English durations, e.g.  day  4 score  7 years  12 months 7This is not particularly strict about what it accepts.  For example, 7 yeares, 4 scores or 1 days are  just fine. h,The very beginning of time, i.e. 1970-01-01 ~Trivially convert a IJ to a fully specified  dc (note that this sets the q flag to  False Returns the first IJ that falls within a dc D This is only unsafe in the sense that it plugs in default values + for fields that have not been set, e.g. January for the month  or 0 for the seconds field. 0 Maybe we should rename it something happier.  See also  ii i d multiplies every field in d with i 6FIXME; this seems like a terrible idea! it seems like = we should get rid of it if at all possible, maybe adding an  invertDiff function DSet a calendar to UTC time any eliminate any inconsistencies within / (for example, where the weekday is given as Thursday, but this does not ; match what the numerical date would lead one to expect) jj c mc replaces any field which is  specified in mc with the equivalent field in c  -copyCalendar c nullMCalendar == nullMCalendar Zero the time fields of a IJ !cdefghijklmnopqrstuvwxyz{|}~!xuswv{|}yztcdefghijklmnopq~r!cdefghijklmnopqdefghijklmnopqrstuvwxyz{|}~ portable experimentaldroundy@abridgegame.orgkGRead an entire file, which may or may not be gzip compressed, directly  into a ?. =Do something with the internals of a PackedString. Beware of  altering the contents! EreadIntPS skips any whitespace at the beginning of its argument, and F reads an Int from the beginning of the PackedString. If there is no J integer at the beginning of the string, it returns Nothing, otherwise it E just returns the int read, along with a B.ByteString containing the  remainder of its input.   efficiently returns the  ByteString argument with E white space Chars removed from the front. It is more efficient than 1 calling dropWhile for removing whitespace. I.e.  dropWhile isSpace == dropSpace  6 returns the pair of ByteStrings when the argument is + broken at the first whitespace byte. I.e.  break isSpace == breakSpace $This function acts exactly like the Prelude unlines function, or like Data.ByteString.Char8 l-, but with one important difference: it will <produce a string which may not end with a newline! That is:   unlinesPS ["foo", "bar"]  evaluates to "foo\nbar", not "foo\nbar\n""! This point should hold true for   as well. TODO: rename this function. ;Like readFilePS, this reads an entire file directly into a  ?7, but it is even more efficient. It involves directly J mapping the file to memory. This has the advantage that the contents of I the file never need to be copied. Also, under memory pressure the page J may simply be discarded, wile in the case of readFilePS it would need to G be written to swap. If you read many small files, mmapFilePS will be I less memory-efficient than readFilePS, since each mmapFilePS takes up a I separate page of memory. Also, you can run into bus errors if the file  is modified. NOTE: as with  readFilePS, the string representation in ' the file is assumed to be ISO-8859-1. EbetweenLinesPS returns the B.ByteString between the two lines given, # or Nothing if they do not appear. m   1 singular This (Noun "batch") "" == "this batch" 4 plural This (Noun "batch") "" == "these batches" 8This only distinguishes between nouns with a final -ch,  and nouns which do not. > More irregular nouns will just need to have their own type ' plural (Noun "batch") "" == "batches" $ plural (Noun "bat") "" == "bats" - plural (Noun "mouse") "" == "mouses" -- :-( 0Things that have a plural and singular spelling - englishNum 0 (Noun "watch") "" == "watches" + englishNum 1 (Noun "watch") "" == "watch" - englishNum 2 (Noun "watch") "" == "watches"  A  . combines a potential parse for a date string  with a matcher) function that operates on a given date. 6 We use an existential type on the matcher to allow ? the date string to either be interpreted as a point in time  or as an interval. nn x y is true if x <= y < (x + one_day) * Note that this converts the two dates to  ClockTime to avoid  any timezone-related errors oo x1 x2 y is true if x1 <= y < x2  Since x1 and x2- can be underspecified, we simply assume the ) first date that they could stand for. pp x1 x2 y is true if x1 <= y < x2 qq x1 x2 y is true if x1 <= y < x2 rr  range exact is true if exact falls . within the a range of dates represented by range. D The purpose of this function is to support matching on partially A specified dates. That is, if you only specify the date 2007, B this function should match any dates within that year. On the D other hand, if you specify 2007-01, this function will match any B dates within that month. This function only matches up to the  second.   s return the first matcher in    that can parse s   d+ returns the list of matchers that will be  applied on d0. If you wish to extend the date parsing code, > this will likely be the function that you modify to do so. ss ms' returns the first successful match in ms * It is an error if there are no matches   !Split a file path at the slashes     beginTedious k. starts a tedious process and registers it in  t with the key k(. A tedious process is one for which we  want a progress indicator. Wouldn'*t it be safer if it had type String -> IO ? ProgressDataKey, so that we can ensure there is no collision? K What happens if you call beginTedious twice with the same string, without % calling endTedious in the meantime?   endTedious k* unregisters the tedious process with key k , printing Done if such  a tedious process exists.                   ! ! !"#$%"#$%"#$% experimental&&&u)assoc list mapping characters to strings ) eg (c,s) means that %c is replaced by s '1parse a commandline returning a list of strings 6 (intended to be used as argv) and a bool value which 1 specifies if the command expects input on stdin 9 format specifiers with a mapping in ftable are accepted : and replaced by the given strings. E.g. if the ftable is  [(s, Some subject)], then %s is replaced by  Some subject (8for every mapping (c,s), add a mapping with uppercase c  and the urlencoded string s '('('()*+,)*+,)*+,:-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdef:ACBD=>;<9:78021-/.?@cefd]ZWQUTRSV^_[YX\JIMNKLGOP`a3456bHEF:-/../0211234564567889::;<<=>>?@@ACBBCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklijkghlghijklp6Relative to the local darcs repository and normalized ; Note: these are understood not to have the dot in front u8Make the second path relative to the first, if possible wEInterpret a possibly relative path wrt the current working directory mnopqrstuvwxyz{|}~oxwypuvnz{|m}~stqrmnopqrrsttuvwxyz{|}~The . type is a list of all flags that can ever be - passed to darcs, or to one of its commands.       !"      !"           !" )_The firstJustM returns the first Just entry in a list of monadic operations. This is close to  ` listToMaybe v sequence`A, but the sequence operator evaluates all monadic members of the _ list before passing it along (i.e. sequence is strict). The firstJustM is lazy in that list [ member monads are only evaluated up to the point where the first Just entry is obtained. *<The firstJustIO is a slight modification to firstJustM: the : entries in the list must be IO monad operations and the ? firstJustIO will silently turn any monad call that throws an > exception into Nothing, basically causing it to be ignored. 4aReturns Just l where l is first non-blank string in input array; Nothing if no non-blank entries #$%&'()*+,-./0123456789:;<'-76+,./0123#$(4)*%&98:;<5#$%&'()*+,-./0123456789:;<!=>?@A>=?A@=>?@A"C6Tries to perform some task if it can obtain the lock, 1 Otherwise, just gives up without doing the task EE"9 safely creates an empty file (not open for writing) and  returns its name. JThe temp file operations are rather similar to the locking operations, in K that they both should always try to clean up, so exitWith causes trouble. FF"# creates an already open temporary I file. Both of them run their argument and then delete the file. Also, J both of them (to my knowledge) are not susceptible to race conditions on J the temporary file (as long as you never delete the temporary file; that & would reintroduce a race condition). II" is like J", except that it doesn't " delete the directory afterwards. JJ"8 creates an empty directory and then removes it when it G is no longer needed. withTempDir creates a temporary directory. The = location of that directory is determined by the contents of  _darcsprefs#tmpdir, if it exists, otherwise by  $DARCS_TMPDIR , and if  that doesn'>t exist then whatever your operating system considers to be a  a temporary directory (e.g. $TMPDIR under Unix, $TEMP under  Windows). :If none of those exist it creates the temporary directory J in the current directory, unless the current directory is under a _darcs O directory, in which case the temporary directory in the parent of the highest 8 _darcs directory to avoid accidentally corrupting darcs' s internals. K This should not fail, but if it does indeed fail, we go ahead and use the  current directory anyway. If $DARCS_KEEP_TMPDIR variable is set G temporary directory is not removed, this can be useful for debugging. =?BCDEFGHIJKLMNOPQRSTUVWXYZBCEFGJIKNYZSTQROPUVWXLD=?MHBCDEFGHIJKLMNOPQRSTUVWXYZ# [\]^_`abcd a`_dcb[^]\ [^]\\]^_`abcd$eee%w9Note: we ignore timezone information in the date string, ; systematically treating a time as UTC. So if the patch  tells me it's 17:00 EST, we're actually treating it as 5 17:00 UTC, in other words 11:00 EST. This is for ? backwards compatibility to darcs prior to 2003-11, sometime > before 1.0. Fortunately, newer patch dates are written in : UTC, so this timezone truncation is harmless for them. |)Patch is stored between square brackets.   [ <patch name>  <patch author>*<patch date> , <patch log (may be empty)> (indented one) * <can have multiple lines in patch log,> + <as long as they're preceded by a space> ) <and don't end with a square bracket.>  ] 8note that below I assume the name has no newline in it. fghijklmnopqrstuvwxyz{|}fgkmgjl{z}noihpyuvqrsxw|tfgghijklmnopqrstuvwxyz{|}& name of the element "last patch modifying this element how was it modified -this can be unknown when restored backwards! !the original name of the element info of a directory member directory listing 6the population of a darcs repository (simpler Slurpy) the state when last modified the directory listing !was an Info record not modified? $set the modifier for an Info record +read the population from a given directory dirname 0 all folders and documents get the given time t >This needs to be here in order to avoid a circular dependency # between Population and Pristine. ~~~ 'Ccreate a list of changes between a and b, each change has the form A (starta, lima, startb, limb) which means that a[starta, lima) ) has to be replaced by b[startb, limb) x(mark hash value where collision occured yHreturn arrays with changes in a and b (1 indexed), offsets start with 0 zAset changes array for a and b and return number of changed lines {1return (xmid, ymid, cost) for the two substrings  a[off_a+1..off_a+1+l_a] and b |,find position on diag d with one more insert/delete going forward }Ifollow snake from northwest to southeast, x and y are absolute positions ~,find position on diag d with one more insert/delete going backward Ifollow snake from southeast to northwest, x and y are absolute positions Ftry to create nicer diffs by shifting around regions of changed lines =goto next unchanged line, return the given line if unchanged ;skip at least one unchanged line, if there is none advance  behind the last line goto n-th next unchanged line 9goto next changed line, return the given line if changed Agoto previous unchanged line, return the given line if unchanged (>Return the command and arguments needed to run an ssh command A along with any extra features like use of the control master.  See  ?Return the command and arguments needed to run an ssh command. E First try the appropriate darcs environment variable and SSH_PORT  defaulting to ssh and no specified port. ?Return True if this version of ssh has a ControlMaster feature = The ControlMaster functionality allows for ssh multiplexing >Launch an SSH control master in the background, if available.  We don'#t have to wait for it or anything. B Note also that this will cleanup after itself when darcs exits 6Tell the SSH control master for a given path to exit. ACreate the directory ssh control master path for a given address   )fetchFile fileOrUrl cache% returns the content of its argument B (either a file or an URL). If it has to download an url, then it 6 will use a cache as required by its second argument. CRun a command on a remote location without passing it any input or , reading its output. Return its ExitCode 4Send an email, optionally containing a patch bundle ; (more precisely, its description and the bundle itself) [\]^ [^]\*the 9 type is a record containing the variables which control  how ! #s will be rendered on some output. overall use of color overall use of escaping 2overall use of colored lines (only hunks for now) %alternative to color (bold, inverse) don't escape isprints don't escape 8-bit chars extra chars to never escape extra chars to always escape escape trailing spaces ignore r at end of lines %escape spaces (used with poTrailing) / returns a suitable policy for a given handle. E The policy is chosen according to environment variables, and to the . type of terminal which the handle represents * h3 returns a set of printers suitable for outputting  to h  policy/ tries to color a Doc, according to policy po.  That is, if policy has  poLineColor& set, then colors the line, otherwise  does nothing.  policy string escapes string according to the rules  defined in policy, turning it into a ! .  policy c tells wether c will be left as-is  when escaping according to policy 3 tells wether a character is a printable character  of the ascii range. - represents a special character as a string.  *  quoteChar '^c' (where ^c is a control character) is ^c  * Otherwise,  quoteChar returns hex, where hex is the * hexadecimal number of the character.  policy doc marks doc with the appropriate - marking for escaped characters according to policy  policy color doc colors doc with color color if  policy: is not set to use an alternative to color. In that case, ! it makes the text bold instead.  doc tries to make doc (usually a < single escaped char) stand out with the help of only plain & ascii, i.e., no color or font style.  the string to reset the terminal' s color.  color doc returns a colorized version of doc.  color/ is a string that represents a color, given by   boldens a doc. + returns an invert video version of a doc. + ,-!Here are a few access functions. /slurp is how we get a slurpy in the first placeldots Iget_slurp_context navigates to a specified filename in the given slurpy, ] and returns the child slurpy at that point together with a update function that can be used S to reconstruct the original slurpy from a replacement value for the child slurpy.  A variant of + that allows for removing the child slurpy  altogether by passing in K to the update function. 9 If the child slurpy happened to be at the top level and K was passed in, 5 then the result of the update function will also be K, otherwise it will always  be a  value.  A variant of / that allows for replacing the child slurpy by R a list of slurpies. The result of the update function will always be a singleton 4 list unless the child slurpy was at the top level.  Currently unused. ? get_slurp_context_list :: FileName -> Slurpy -> Maybe ([Slurpy] -> [Slurpy] , Slurpy) > get_slurp_context_list = get_slurp_context_generic return id 7It is important to be able to readily modify a slurpy. )Code to modify a given file in a slurpy. ,     ,     ,     &     &     .# !"#$%&'()*+,-./012#)%&'(* !"#$.-,+/012#  !"#$!"#$%&'(&'()*+,-./012/3 split an 0 into left and rightA lists according to a predicate, using commutation as necessary. ] If a patch does satisfy the predicate but cannot be commuted past one that does not satisfy  the predicate, it goes in the right list. 4 split an - into left and rightA lists according to a predicate, using commutation as necessary. ] If a patch does satisfy the predicate but cannot be commuted past one that does not satisfy  the predicate, it goes in the left list. 3456789:;<=>? 9:856734=?>;< 3456789:;<=>?0r?Tells you if two patches are in the same category, human-wise. A Currently just returns true if they are filepatches on the same  file. 0 ps coalesces as many patches in ps as A possible, sorting the results according to the scheme defined  in   The heart of sort_coalesceFL  new ps is almost like  new :>: ps except : as an alternative to consing, we first try to coalesce new with  the head of ps2. If this fails, we try again, using commutation  to push new2 down the list until we find a place where either  (a) new is LT" the next member of the list [see ]  (b) commutation fails or  (c) coalescing succeeds. D The basic principle is to coalesce if we can and cons otherwise. BAs an additional optimization, push_coalesce_patch outputs a Left  value if it wasn'0t able to shrink the patch sequence at all, and E a Right value if it was indeed able to shrink the patch sequence. A This avoids the O(N) calls to lengthFL that were in the older  code. AAlso note that push_coalesce_patch is only ever used (and should 4 only ever be used) as an internal function in in  sort_coalesceFL2.  p2 :< p1 tries to combine p1 and p2 into a single F patch without intermediary changes. For example, two hunk patches G modifying adjacent lines can be coalesced into a bigger hunk patch. C Or a patch which moves file A to file B can be coalesced with a D patch that moves file B into file C, yielding a patch that moves  file A to file C.  p1 p22 is used to provide an arbitrary ordering between  p1 and p2.. Basically, identical patches are equal and  Move < DP < FP < Split < Identity < ChangePref. E Everything else is compared in dictionary order of its arguments. O@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~OgmlkjihHIDGFE^`_afedcbVWZYXnpoq[]\zx}~|{ysuvwrtTUOPQRSJKLMN@ABCO@ABCABCDGFEEFGHIIJKLMNKLMNOPQPQRSSTUUVWZYXXYZ[]\\]^`__`afedcbbcdefgmlkjihhijklmnopqrstuvwxyz{|}~1OO23#PP# 4Modify a binary file  binary FILENAME  oldhex  *HEXHEXHEX  ...  newhex  *HEXHEXHEX  ... 566= computes the cache hash (i.e. filename) of a packed string. (hashedFilePath cachelocation subdir hash" returns the physical filename of  hash hash in the subdir section of  cachelocation. peekInCache cache subdir hash tells whether cache and  contains an object with hash hash in a writable position. : Florent: why do we want it to be in a writable position? /speculateFileUsingCache cache subdirectory name takes note that  the file name2 is likely to be useful soon: pipelined downloads E will add it to the (low-priority) queue, for the rest it is a noop. "write compression filename content writes content to the file filename according  to the policy given by  compression. 5writeFileUsingCache cache compression subdir contents write the string contents to Y the directory subdir, except if it is already in the cache, in which case it is a noop. _ Warning (?) this means that in case of a hash collision, writing using writeFileUsingCache is J a noop. The returned value is the filename that was given to the string. 7  RepoFormat* is the representation of the format of a > repository. Each sublist corresponds to a line in the format + file. Each line is decomposed into words. 1The file where the format information should be. identifyRepoFormat URL) identifies the format of the repository  at the given address. Return  Left reason if it fails, where  reason explains why we weren't able to identify the format. writeRepoFormat+ writes the repo format to the given file. ;The repo format we assume if we do not find a format file. write_problem from+ tells if we can write to a repo in format form.  it returns Nothing if there'+s no problem writing to such a repository. write_problem from- tells if we can read and write to a repo in  format form. it returns Nothing if there's no problem reading # and writing to such a repository. read_problem from+ tells if we can write to a repo in format form.  it returns Nothing if there'-s no problem reading from such a repository. =Does this version of darcs know how to handle this property? AThis is the list of properties which this version of darcs knows  how to handle. 8   9@Fetch and return the message of the day for a given repository. 7Display the message of the day for a given repository,  unless either the  or the  flags are passed in :;         <      === stores a context with a g0 patch.  !"#$% !"#$% !"#$%>& Duplicate x!: This patch has no effect since x& is already present in the repository  !Etacilpud x: invert (Duplicate x) Normal prim: A primitive patch Conflictor ix xx x:  ix is the set of patches:  that conflict with x8 and also conflict with another patch in the repository / that conflict with a patch that conflict with x xx6 is the sequence of patches that conflict *only* with x x is the current patch ix and x are stored as Non& objects, which include any necessary < context to uniquely define the patch that is referred to. InvConflictor ix xx x: like invert (Conflictor ix xx x) mergeAfterConflicting* takes as input a sequence of conflicting  patches xxx4 (which therefore have no effect) and a sequence of  primitive patches yyy* that follow said sequence of conflicting D patches, and may depend upon some of the conflicting patches (as a  resolution). &'()*+,-./01 &+*)('0/-,1. &+*)(''()*+,-./01?]!"#$&)-.12@AKLPQUgrstuvwxyz{|}~     &2]2g&)QUPyx{z|~}rsuw#!"$L@Avt12.-&   K  2@3GA convenience function to call from all darcs command functions before F applying any patches. It checks for malicious paths in patches, and 5 prints an error message and fails if it finds one. 4:Filter out patches that contains some malicious file path What is a malicious path? $A spoofed path is a malicious path. @1. Darcs only creates explicitly relative paths (beginning with "./"), < so any not explicitly relative path is surely spoofed. 02. Darcs normalizes paths so they never contain "/../", so paths with  "/../" are surely spoofed. A path to a darcs repository's meta data can modify "trusted" patches or C change safety defaults in that repository, so we check for paths  containing "/_darcs/"( which is the entry to darcs meta data. To do?  How about get repositories? B Would it be worth adding a --semi-safe-paths option for allowing / changes to certain preference files (_darcs/prefs/ ) in sub  repositories'? 345345345A6IThe unsafeDiffAtPaths function calls diff_at_path for a set of files and M and directories, and returns all changes to those files. It recurses into 1 given directories when searching for changes. 9Comparing paths and not slurpies is useful when the user N requests a diff for a file that is created or removed in the working copy: / then there is no slurpy for the file in the current or working slurpy  respectively. FThe given paths must always be fixed repository paths starting with a  .(. It is safe to pass overlapping paths. JThe booleans in the first argument tell whether to ignore mtimes, whether ' we must look for additions and if we're diffing for a summary only. JIt returns an FL of patches, that contains all the changes that have been  made at all those paths. .We take a B.ByteString which represents a file' s contents, and we check to see whether it is a 0 file or a textual, file. We define a textual file as any file -which does not contain two magic characters, '\0'" (the NULL character on Unix) and '^Z' (Control-Z, a DOS convention). (Note that to improve performance, we won',t examine *all* of the string, because that @falls down on large files, but just the first 4096 characters. 6789:679:86789:B;;B p $ represents a hope we have to get a  patch through its info. We'&re not sure we have the patch, but we  know its info. SimpleHopefully is a variant of  Either String adapted for  type witnesses. Actually is the equivalent of Right, while   Unavailable is Left. <<B p C (x y) is  String (p C (x y)) in a $ form adapted to darcs patches. The C (x y) represents the type 1 witness for the patch that should be there. The  Hopefully type A just tells whether we expect the patch to be hashed or not, and  ! does the real work of emulating  .  Hopefully sh, represents an expected unhashed patch, and  Hashed hash sh4 represents an expected hashed patch with its hash. >>B i p2 creates a PatchInfoAnd containing p with info i. ?n2pia& creates a PatchInfoAnd represeting a Named patch. AAB hp tries to get a patch from a ;B ) value. If it fails, it outputs an error "failed to read patch:  <description of the patch>"&. We get the description of the patch  from the info part of hp BBB er hp! tries to extract a patch from a ;B. 5 If it fails, it applies the error handling function er to a description  of the patch info component of hp. C hopefullyM is a version of  hopefully which calls fail in a  monad instead of erroring. ;<=>?@ABCDEFG <;>?@BA=CEFDG ;<=>?@ABCDEFGCIAA PatchSet is in reverse order, plus has information about which B tags are clean, meaning all patches applied prior to them are in @ the tag itself, so we can stop reading at that point. Just to A clarify, the first patch in a PatchSet is the one most recently  applied to the repo. ICs have the property that if   2 (info $ last $ head a) == (info $ last $ head b)    then (tail a) and (tail b) are identical repositories  Questions: +Does this mean that in a patch set such as [[a b t1 c d e t2][f g  t3] [h i]]3, t1, t2 and t3 are tags, and t2 and t3 are clean? -Can we have PatchSet with length at least 3?  Florent HIIHHIDJ Evaluate an 0 list and report progress. K Evaluate an - list and report progress. L Evaluate an -3 list and report progress. In addition to printing E the number of patches we got, show the name of the last tag we got. JKLKJLJKLEOAIn make_bundle2, it is presumed that the two patch sequences are E identical, but that they may be lazily generated. If two different E patch sequences are passed, a bundle with a mismatched hash will be 6 generated, which is not the end of the world, but isn't very useful  either. MNOPQRMNOPQRMNOPQRFSTUVWXYZ[\]^_`abcdefghijW\]a`_^dcghbfeijXYZ[SVUTSVUTTUVWXYZ[\]^_`abcdefghijG$with_partial_intersection takes two ICs and splits them into a common Jintersection portion and two sets of patches. The intersection, however, Jis only lazily determined, so there is no guarantee that all intersecting -patches will be included in the intersection IC. This is a pretty Lefficient function, because it makes use of the already-broken-up nature of ICs. ICs have the property that if  1(info $ last $ head a) == (info $ last $ head b)  then (tail a) and (tail b)1 are identical repositories, and we want to take Jadvantage of this if possible, to avoid reading too many inventories. In Kthe case of --partial repositories or patch bundles, it is crucial that we don'.t need to read the whole history, since it isn' t available. TODO: The length equalising isn')t necessarily right. We probably also be Ithinking about not going past the end of a partial repository, or favour 5local repository stuff over remote repository stuff. AAlso, when comparing l1 to l2, we should really be comparing the newly discovered one to all" the lasts in the other patch set that we've got so far.  determines a list of common' patches and patches unique to each of the two ICs. The list of common# patches only needs to include all +patches that are not interspersed with the unique patches, but including more patches in the list of common patches doesn't really hurt, except Jfor efficiency considerations. Mostly, we want to access as few elements as possible of the IC( list, since those can be expensive (or #unavailable). In other words, the common patches need not be minimal,  whereas the IC-s should be minimal for performance reasons. ICs have the property that if  1(info $ last $ head a) == (info $ last $ head b)  then (tail a) and (tail b)1 are identical repositories, and we want to take Jadvantage of this if possible, to avoid reading too many inventories. In Kthe case of --partial repositories or patch bundles, it is crucial that we don'.t need to read the whole history, since it isn' t available. TODO: The length equalising isn')t necessarily right. We probably also be Ithinking about not going past the end of a partial repository, or favour /local repository stuff over remote repo stuff. AAlso, when comparing l1 to l2, we should really be comparing the newly discovered one to all" the lasts in the other patch set that we've got so far. !Filters the common elements from ps1 and ps2' and returns the simplified sequences. Returns a sub-sequence from patches, where all the elements of common have % been removed by commuting them out. nget_patches_in_tag t ps returns a HC of all  patches in ps which are contained in t. klmnopqrstu kolqprmnuts klmnopqrstuHvA Matcher is made of a wH which we will use to match  patches and a String representing it. w;A type for predicates over patches which do not care about  contexts y apply_matcher applies a matcher to a patch. }.The string that is emitted when the user runs darcs help --match. vwxyz{|} vw{yxz|}vwxyz{|}I~~~JKLreadHashFile c subdir hash reads the file with hash hash in dir subdir,  fetching it from 6 c if needed. geta objtype name stuff tries to get an object of type objtype named name  in stuff. DCreate a Slurpy representing the pristine content determined by the B supplied root hash (which uniquely determines the pristine tree) JWrite contents of a Slurpy into hashed pristine. Only files that have not J not yet been hashed (that is, the hash corresponding to their content is M already present in hashed pristine) will be written out, so it is efficient G to use this function to update existing pristine cache. Note that the I pristine root hash will *not* be updated. You need to do that manually. LUpdate timestamps on pristine files to match those in the working directory K (which is passed to this function in form of a Slurpy). It needed for the : mtime-based unsafeDiff optimisation to work efficiently. (Seems to list all hashes reachable from root.   MNO   PQBRepository IO monad. This monad-like datatype is responsible for C sequencing IO actions that modify the tentative recorded state of  the repository.  converts RIO a to IO a. This is just like >>=% from the Monad class except that it E respects type witness safe repository transformations. Even so, it < only tracks modifications to the tentative recorded state. This corresponds to >> from the Monad class. This corresponds to return from the Monad class.  This the RIO equivalent of liftIO. Similar to the ask$ function of the MonadReader class. 9 This allows actions in the RIO monad to get the current  repository.  FIXME: Don't export this. If we don't export this 7 it makes it harder for arbitrary IO actions to access 7 the repository and hence our code is easier to audit. &hunt upwards for the darcs repository > This keeps changing up one parent directory, testing at each : step if the current directory is a repository or not. $ I WARNING this changes the current directory for good if matchFn succeeds JGets the unrecorded changes in the given paths in the current repository. The  unrecorded9 includes the pending and the working directory changes. ; The third argument is a list of paths: if this list is [], it will diff M the whole repo, but if there are elements in it, the function will return K only changes to files under those paths. The paths must be fixed paths  starting with ., but need not yet be unique. NThis fuction is unsafe because it accepts a patch that works on the tentative  pending and we don'6t currently track the state of the tentative pending. isetTentativePending is basically unsafe. It overwrites the pending state with a new one, not related to  the repository state. >prepend is basically unsafe. It overwrites the pending state 6 with a new one, not related to the repository state. \Sets scripts in or below the current directory executable. A script is any file that starts  with the bytes '#!'J. This is used sometimes for --set-scripts-executable, but at other times J --set-scripts-executable is handled by the hunk patch case of applyFL. :HI:IH4R   S @writePatchSet is like patchSetToRepository, except that it doesn't 0 touch the working directory or pristine cache. ]patchSetToRepository takes a patch set, and writes a new repository in the current directory N that contains all the patches in the patch set. This function is used when ' darcs get'ing a W repository with the --to-match flag and the new repository is not in hashed format. L This function does not (yet) work for hashed repositories. If the passed  DarcsFlags tell @ darcs to create a hashed repository, this function will call error. ZUnless a flag has been given in the first argument that tells darcs not to do so (--lazy, _ --partial or --ephemeral), this function fetches all patches that the given repository has M with fetchFileUsingCache. This is used as a helper in copyFullRepository. 8;HI    8    IH;    TA type for darcs'. options. The value contains the command line E switch(es) for the option, a help string, and a function to build a   DarcsFlag9 from the command line arguments. for each constructor,   shortSwitches4 represents the list of short command line switches E which invoke the option, longSwitches the list of long command line P switches, optDescr the description of the option, and argDescr the description = of its argument, if any. mkFlag is a function which makes a  DarcsFlag from  the arguments of the option. =A constructor for grouping related options together, such as  --hashed,  --darcs-2 and --old-fashioned-inventory. ;DarcsNoArgOption shortSwitches longSwitches mkFlag optDescr 0 The constructon fon options with no arguments. BDarcsOptAbsPathOrStdOption shortSwitches longSwitches defaultPath  mkFlag ArgDescr OptDescr& where defaultPath is a default value @ for the Path, as a string to be parsed as if it had been given  on the command line. E The constructor for options with an optional path argument, such as -O KDarcsAbsPathOrStdOption shortSwitches longSwitches mkFlag ArgDescr OptDescr ; The constructor for options with a path argument, such as -o FDarcsAbsPathOption shortSwitches longSwitches mkFlag ArgDescr OptDescr E The constructor for options with an absolute path argument, such as   --sibling BDarcsArgOption shortSwitches longSwitches mkFlag ArgDescr OptDescr = The constructor for options with a string argument, such as  --tag ( returns the content of a flag, if any.  For instance, the content of Author " Louis Aragon" is StringContent  " Louis Aragon", while the content of Pipe is  NoContent a `'isa'` b tests whether a is flag b with a string argument.  b4 typically is a Flag constructor expecting a string  For example, (Author " Ted Hughes")  Author returns true. a `'isAnAbsolute'` b tests whether a is flag b! with an absolute path argument.  bE typically is a Flag constructor expecting an absolute path argument  For example, (Context contextfile)  Context returns true. a `'isAnAbsoluteOrStd'` b tests whether a is flag b with a path argument.  b; typically is a Flag constructor expecting a path argument  For example,  (Output o)   returns true.  concat_option3 creates a DarcsMultipleChoicOption from a list of ? option, flattening any DarcsMultipleChoiceOption in the list.  list_option% is an option which lists the command' s arguments &&T2 takes a list of flags and returns the url of the  repository specified by Repodir " directory" in that list of flags, if any. 0 This flag is present if darcs was invoked with --repodir=DIRECTORY ''T5 is the option used to specify the URL of the remote  repository to work with 11T/ takes a list of flags and returns the context  specified by  Context c in that list of flags, if any. 0 This flag is present if darcs was invoked with --context=FILE ??T5 takes a list of flags and returns the author of the  change specified by Author " Leo Tolstoy" in that list of flags, if any.  Otherwise, if Pipe1 is present, asks the user who is the author and F returns the answer. If neither are present, try to guess the author,  from _darcs/prefs , and if it's not possible, ask the user. @@TE tries to get the author name first from the repository preferences, H then from global preferences, then from environment variables. Returns K if it  could not get it. JJTC takes a list of flags and returns the addresses to send a copy of  the patch bundle to when using  darcs send. % looks for a cc address specified by Cc "address" in that list of flags. 4 Returns the addresses as a comma separated string. LLT; takes a list of flags and returns the subject of the mail  to be sent by  darcs send#. Looks for a subject specified by  Subject "subject" in that list of flags, if any. 0 This flag is present if darcs was invoked with --subject=SUBJECT kkT flags patch returns a   representing the right  way to show patch given the list flags" of flags darcs was invoked with. llT action opts patches prints a string 4 representing the action that would be taken if the  --dry-run option > had not been passed to darcs. Then darcs exits successfully.  action- is the name of the action being taken, like "push"  opts/ is the list of flags which were sent to darcs  patches6 is the sequence of patches which would be touched by action. xxT< returns the list of all non-boring files in the repository yyT1 returns the list of all non-boring unregistered  files in the repository. zzT= returns the list of all registered files in the repository. T collects the contents of all Sibling flags in a list of flags. T8 takes a list of flags and returns the sendmail command  to be used by  darcs send#. Looks for a command specified by   SendmailCmd "command" in that list of flags, if any. 0 This flag is present if darcs was invoked with --sendmail-command=COMMAND  Alternatively the user can set  $SENDMAIL. which will be used as a fallback if present. T8 takes a list of flags and returns the posthook command  specified by  PosthookCmd a in that list of flags, if any. T7 takes a list of flags and returns the prehook command  specified by  PrehookCmd a in that list of flags, if any. T f holds whenever f is a way of selecting  patches such as  PatchName n.        !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~       x!#"23$5'4%&zy=?@(R;<>KLMNHIJOPSTU967:X\Q]^Wfegh_ABw{mnYsqrp*,)1vtuCDa`bcFoEVdjilk+-./Z0[8|}~G !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~UFOutput functions equivalent to (putStrLn, hPutStrLn stderr, putDocLn) &*&VV opts patch prints patch in accordance with the  flags in opts, ie, whether  --verbose or  --summary were passed at  the command-line. V$ prints a patch on standard output. V runs '$PAGER' and shows a patch in it. V, prints a patch, together with its context,  on standard output. WX:FIXME: this documentation makes *no* sense to me, and the ? ramifications of using this option are not clear. --twb, 2008 YZ[(resolve is an alias for mark-conflicts. \]^_`$A list of all valid preferences for _darcsprefsprefs. abcdefghiA MatchMonad p m+ is a monad in which we match patches from p  by playing with them in m, a + monad. How we 2 play with the patches depends on the instance of  MatchMonad we're  using. If we use IO , then we'!ll apply the patches directly in  m , if we use  SlurpMonad , then we'll apply the patches to a 6 slurpy, and write to disk at the end. Note that both IO and   SlurpMonad have an instance of + that . implicitely writes in the current directory. withRecordedMatch/ is responsible for getting the recorded state < into the monad, and then applying the second argument, and A finally placing the resulting state into the current directory. withRecordedMatchOnlySomeFiles is a variant of : withRecordedMatch that may only return some of the files 4 (e.g. if we want to run diff on just a few files). have_nonrange_match flags" tells whether there is a flag in  flags& which corresponds to a match that is  non-range. Thus,  --match, --patch and --index make have_nonrange_match  true, but not  --from-patch or  --to-patch. have_patchset_match flags tells whether there is a patchset match' in the flag list. A patchset match is --match or  --patch, or  --context , but not  --from-patch nor (!)  --index. 0 Question: Is it supposed not to be a subset of have_nonrange_match? first_match fs tells whether fs implies a  first match, that D is if we match against patches from a point in the past on, rather @ than against all patches since the creation of the repository. first_match fs tells whether fs implies a  second match, that E is if we match against patches up to a point in the past on, rather % than against all patches until now. GstrictJust is a strict version of the Just constructor, used to ensure  that if we claim we'.ve got a pattern match, that the pattern will 9 actually match (rathern than fail to compile properly). 2First matcher, Second matcher and Nonrange matcher BWhen we match for patches, we have a PatchSet, of which we want a B subset. This subset is formed by the patches in a given interval C which match a given criterion. If we represent time going left to  right (which means the IC! is written right to left), then  we have (up to) three vHs: the  is the ? criterion we use to select among patches in the interval, the  , is the left bound of the interval, and the   last_matcher3 is the right bound. Each of these matchers can be * present or not according to the options. nonrange_matcher0 is the criterion that is used to match against  patches in the interval. It is 'Just m' when the --patch, --match,  --tag0 options are passed (or their plural variants). nonrange_matcher_is_tag) returns true if the matching option was  '--tag'  first_matcher1 returns the left bound of the matched interval. E This left bound is also specified when we use the singular versions  of --patch, --match and --tag . Otherwise,  first_matcher  returns Nothing. match_a_patchread fs p tells whether p matches the matchers in  the flags listed in fs. match_a_patch fs p tells whether p matches the matchers in  the flags fs  has_lastn fs return the --last argument in fs , if any. match_first_patchset fs ps returns the part of ps before its C first matcher, ie the one that comes first dependencywise. Hence,  patches in match_first_patchset fs ps are the ones we don't want. #Question: are they really? Florent  dropn n ps drops the n last patches from ps. match_second_patchset fs ps returns the part of ps before its < second matcher, ie the one that comes last dependencywise. find_a_patch m ps returns the last patch in ps matching m, and  calls  if there is none. match_a_patchset m ps$ returns a (the largest?) subset of ps  ending in patch which matches m. Calls  if there is none. get_matching_tag m ps, where m is a vH which matches tags  returns a HC. containing all patches in the last tag which  matches m:. Last tag means the most recent tag in repository order,  i.e. the last one you'"d see if you ran darcs changes -t m. Calls   if there is no matching tag. match_exists m ps) tells whether there is a patch matching  m in ps maybe_read_file, recursively gets the contents of all files ? in a directory, or just the contents of a file if called on a  simple file.  apply_invp tries to get the patch that's in a ' PatchInfoAnd  patch':, and to apply its inverse. If we fail to fetch the patch A (presumably in a partial repositiory), then we share our sorrow  with the user.  a version of  for - lists that cater for contexts. withRecordedMatchSmart hides away the choice of the  - to use in order to apply .  If we have the --store-in-memory flag, then use -, else  use IO%. In both case, the result is in the IO monad. Suggestion: shouldn' t we name withRecordedMatchSmart  withRecordedMatch0, and give the monad function another name such  as withRecordedMatchRaw? withRecordedMatchOnlySomeSmart is the smart version of  withRecordedMatchOnlySome . It runs withRecordedMatchOnlySome  either in the - or in IO according to the  --store-in-memory flag. jLReturns the command we should use for diff as a tuple (command, arguments). L This will either be whatever the user specified via --diff-command or the  default  3. Note that this potentially involves parsing the  user'Es diff-command, hence the possibility for failure with an exception. klmnop"population of an empty repository !apply a patchset to a population apply Patches to a population (get the pristine population from a repo     qrThe only difference with  is the [FilePath] argument @wasc and wasc_ are just shorthand for with_any_selected_changes aThis ensures that the selected patch commutes freely with the skipped patches, including pending _ and also that the skipped sequences has an ending context that matches the recorded state, z,  of the repository. :Returns the results of a patch selection user interaction   sGsendSanitizedEmail sends a sanitized email using the given sendmailcmd  It takes  DacrsFlag( options a file with the mail contents, # To:, Subject:, CC:, and mail body tuvw            x   yzsend patch via email POST the patch via HTTP {|}~=The commands that darcs knows about (e.g. whatsnew, record), > organized into thematic groups. Note that hidden commands  are also listed here.  !"# #"! !"#$$$%%%                    ! " # $ % & ' ( ) * * + + , - . /  0 1 2 3 4 5 6 7 89:;<=>?@AABBCCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                          !!!!!"""""""""""""""""""""""""##########$%%%%%%%%%%%%%%%%%%%%%%%%&&&&&&&&&&& & & & & &&&&&&&&&&&&&'''''' (!("(#($(%(&('((())*)+),)-).)/)0)1)2)3)4)5)6)7)8)9):);)<)=)>)?)@)A)B)C)D)E**F*G*H+I+J+K+L+M+N+O+P+Q+R+S+T+U+V+W+X+Y+Z+[+\+]+^+_+`+a,b,c-d-e-f-g-h-i-i-j-k-l-m-n-o-p--q-r-s-t-u-v-w-x-y-z-{-|-}-~---------------.................................../////////////0000000000000000000000000000000000000000000000000000000000000000000000000000 0 0 0 1 111111111111111111111 2!2"333333#3$3%3&3'3(3)4*4+5,5-6.6/606.6162636465666768696:6;6<6=6>6?6@6A6B6C6D6E6F6G6H7I7J7K7L7M7N7O7P7Q7R7S7T7U7V8W8X8Y838Z8[8\8]8^9_9`:a:b:c:d:e:f:g:h:i:j:k:l:m:n:o:p:q:r;s;t;u;v;w;x;y;z;{;|;};~;;<<========================>>>>>>>>>>>>?@@@AAAAABBBBBBBBBBBBBCCDDDEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFGGGGGGGGGGGHHHHHHHHIIIIIIIIIIIIIIJJJJJKKLLL L L L L LLMMMMMMMMMMMMMMMMM M!M"M#N$N%N&N'N(N)N*N+N,NNN-N.N/N0N1OO2O3O4OO5OOO6OO7OOP8P9P:Q;Q<Q=Q>Q?Q@QAQBQCQDQEQFQGQHQIQJQKQLQQMQ!QNQOQPQQQRQSQTQUQVQWQXQYQZQ[Q\Q]Q^Q_Q`QaQbQcQQQdQeQfQgQhQiQjRkRlRmRnRoRpSqSrSsStSuSvTwTxTyTzT{T|T}T~TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUUU U U U U UUUUUUUUUUUUUUkUUUUVV V!V"W#W$W%XY&Z'Z([)[*\+\],^-^.^/_0`1a2b3c4c5d6e7f8g9h:i;i<i=i>i?i@iAiBiCiDiEiFiGiHiIiJjKkLlMmNnOoPoQoRpSpTpUpVpWqXqYrZr[r\r]r^r_r`rarbrcrdrestfugvhwiwjwwkwlxmyzn{o{p{q{r|s}t}u~vwxyz{|}~~       %'''''''''''''(((((***************************----00004 6 6 7 7 77>@ABGGGGLLQQQQQQ Q!S"T#T$T%T&T'T(X)`*i+i,i-i.i/i0i1i2i3i456i7i8i9i:i;i<=>i?i@jApBpCpDrErFrGrHrIsJzKzLM darcs-2.2.1 ThisVersionAutoconf WorkaroundUTF8RegCharsPrinterOldDateIsoDateByteStringUtilsSHA1English DateMatcherDarcs.SignalHandler Darcs.Show Darcs.SealedDarcs.Patch.ReadMonadsDarcs.Patch.MatchDataDarcs.Patch.FileNameDarcs.Patch.Check Darcs.GlobalProgressExec Darcs.Email Darcs.Bug Crypt.SHA256 CommandLineHTTP Darcs.Ordered Darcs.URLDarcs.RepoPath Darcs.Flags Darcs.Utils Darcs.Compat Darcs.LockURLDarcs.CheckFileSystemDarcs.Patch.InfoDarcs.PopulationDataLcsSshDarcs.ExternalDarcs.ColorPrinterDarcs.IODarcs.FilePathMonadDarcs.SlurpDirectory.InternalDarcs.Patch.PatchyDarcs.Patch.PermutationsDarcs.Patch.PrimDarcs.Patch.CoreDarcs.Patch.ShowDarcs.Patch.CommuteDarcs.Patch.ReadDarcs.RemoteApplyDarcs.Repository.CacheDarcs.Repository.FormatDarcs.Repository.InternalTypesDarcs.Repository.MotdDarcs.Repository.PrefsDarcs.Patch.ApplyDarcs.Patch.ViewingDarcs.Patch.NonDarcs.Patch.Real Darcs.PatchDarcs.CommandsAux Darcs.DiffDarcs.HopefullyDarcs.Patch.SetDarcs.ProgressPatchesDarcs.Patch.BundleDarcs.Patch.ChoicesDarcs.Patch.DependsDarcs.Patch.MatchDarcs.Patch.PropertiesDarcs.Patch.TouchesFilesDarcs.Repository.ApplyPatchesDarcs.Repository.HashedIODarcs.Repository.HashedRepoDarcs.Repository.PristineDarcs.Repository.DarcsRepoDarcs.ResolutionDarcs.Repository.InternalDarcs.Repository.CheckpointDarcs.RepositoryDarcs.ArgumentsDarcs.CommandsDarcs.PrintPatch Darcs.TestDarcs.Commands.AddDarcs.Commands.ConvertDarcs.Commands.InitDarcs.Commands.MarkConflictsDarcs.Commands.MvDarcs.Commands.OptimizeDarcs.Commands.RemoveDarcs.Commands.ReplaceDarcs.Commands.SetPrefDarcs.Commands.ShowAuthorsDarcs.Commands.ShowBugDarcs.Commands.ShowFilesDarcs.Commands.ShowRepoDarcs.Commands.ShowTagsDarcs.Commands.TrackDownDarcs.Commands.TransferModeDarcs.Commands.WhatsNew Darcs.MatchDarcs.Commands.DiffDarcs.Commands.DistDarcs.Commands.GetDarcs.Commands.PutDarcs.Commands.ShowContentsDarcs.Commands.ShowDarcs.PopulationDarcs.Commands.AnnotateDarcs.SelectChangesDarcs.Commands.ApplyDarcs.Commands.ChangesDarcs.Commands.PullDarcs.Commands.PushDarcs.Commands.RecordDarcs.Commands.AmendRecordDarcs.Commands.TagDarcs.Commands.SendDarcs.Commands.UnrecordDarcs.Commands.RollbackDarcs.Commands.UnrevertDarcs.Commands.RevertDarcs.Repository.RepairDarcs.Commands.CheckDarcs.Commands.RepairDarcs.TheCommandsDarcs.Commands.HelpDarcs.ArgumentDefaultsDarcs.RunCommandbase Data.Charbytestring-0.9.1.4Data.ByteString.Internalparsec-2.1.0.1"Text.ParserCombinators.Parsec.Charold-time-1.0.0.2 System.Time Data.Maybe Data.List Control.MonadDarcs.SlurpDirectory Data.EitherPrelude darcs_version have_libcurl have_libwww have_HTTP use_coloruse_mmap sendmail_path have_sendmail have_mapi diff_programpath_separator big_endian setExecutableencoderegCharsColorMagentaCyanGreenRedBlue Printers'PrinterscolorP invisiblePhiddenP userchunkPdefP lineColorT lineColorSDocunDoc PrintableBothPSSspacenewlineminusplus backslashlparenrparenparenserrorDoc putDocWith putDocLnWithputDocputDocLn hPutDocWith hPutDocLnWithhPutDoc hPutDocLn renderStringrenderStringWithrenderPS renderPSs renderPSWith renderPSsWithprefix lineColor hiddenPrefix unsafeBothunsafeBothText packedStringunsafePackedString invisiblePS userchunkPS unsafeChartext unsafeText invisibleText hiddenText userchunkblueTextredText greenText magentaTextcyanText colorText wrap_text printablesimplePrinters simplePrinterinvisiblePrinteremptydoc<><+>$$vcatvsephcat readUTCDateshowIsoDateTime MCalendarTimemctYearmctMonthmctDaymctHourmctMinmctSec mctPicosecmctWDaymctYDay mctTZNamemctTZmctIsDSTmctWeek TimeIntervalcleanLocalDate readLocalDate getLocalTz parseDategetIsoDateTimeiso8601_intervaliso8601_durationenglishDateTimeenglishInterval englishLasttoMCalendarTimeunsafeToCalendarTime addToMCalsubtractFromMCal resetCalendar unsetTimeunsafeWithInternals readIntPSunpackPSfromUTF8ifHeadThenTail dropSpace breakSpaceis_funkyhashPSsubstrPS breakFirstPS breakLastPSlinesPS unlinesPS gzReadFilePS gzWriteFilePSgzWriteFilePSs mmapFilePS fromPS2Hex fromHex2PSbetweenLinesPSbreak_after_nth_newlinebreak_before_nth_newlinesha1PSThisNounNumberedpluralsingular englishNumDMparseDateMatcher getMatchersstdout_is_a_pipewithSignalsHandledcatchNonSignalcatchInterrupt tryNonSignalwithSignalsBlockedShow2show2 showsPrec2Show1show1 showsPrec1showOp2app_prec FlippedSealSealed2Sealedsealseal2flipSeal unsafeUnsealunsafeUnflippedseal unsafeUnseal2unsealunsealMliftSMmapSeal mapFlippedunseal2mapSeal2 unsealFlippedParserMwork maybe_work peek_inputlex_char lex_stringlex_eof lex_stringsmy_lex alter_inputparse_strictly parse_lazily PatchMatch PatternMatch patch_matchFileNamefp2fnfn2fp niceps2fn fn2nicepsfn2psps2fn encode_white decode_whiteown_name super_name break_on_dir norm_pathbreakup///movedirfilenamePossibly PSomethingPNothingPJust PatchCheckdo_checkdo_verbose_checkis_valid modify_file insert_line delete_line file_empty create_file create_dir remove_file remove_dir check_move file_exists dir_existsatexit with_atexit setDebugMode whenDebugMode withDebugMode debugMessage debugFail putTimingsetTimingsMode timingsModesetVerboseMode verboseModesetSshControlMasterDisabledsshControlMasterDisableddarcsdir beginTedious endTedious tediousSizeminlist progressListprogressprogressKeepLatest finishedOne finishedOneIOsetProgressModewithoutProgress ExecExceptionRedirectStdoutFileNullAsIs Redirectsexecexec_interactivewithoutNonBlock make_email read_email_bug_bugDoc _impossible _fromJust sha256sumparseCmd addUrlencodedfetchUrlpostUrl request_url wait_next_urlRLNilRL:<:FLNilFL:>:MyEq unsafeCompare=\/==/\=:/\::\/::<:>ProofEqCheckNotEqIsEqisEq unsafeCoercePunsafeCoerceP2nullFLnullRLfilterFLfilterE+>++<+ reverseFL reverseRLconcatFLconcatRLspanFL splitAtFLbunchFLallFLfoldlFLfoldlRLmapFL_FL zipWithFLmapRL_RLmapFLmapRL unsafeMap_l2flengthFLlengthRLisShorterThanRLconcatReverseFLheadRL consRLSealed unsafeUnFL unsafeUnRLunsafeFLunsafeRL is_relative is_absoluteis_fileis_urlis_ssh is_ssh_nopathAbsoluteOrRemotePathAbsolutePathOrStd AbsolutePathSubPath FilePathLike toFilePath FilePathOrURLtoPath makeSubPathOf simpleSubPath ioAbsolute makeAbsolute rootDirectorymakeAbsoluteOrStdioAbsoluteOrStduseAbsoluteOrStdioAbsoluteOrRemoteisRemotegetCurrentDirectorysetCurrentDirectorysp2fn CompressionGzipCompression NoCompression DarcsFlagNullFlagAllowUnrelatedReposNoCacheNoHTTPPipeliningHTTPPipelining StoreInMemoryUMask RunPrehook AskPrehook NoPrehook PrehookCmd RunPosthook AskPosthook NoPosthook PosthookCmd NoPendingPending NoDirectories DirectoriesNoFilesFilesNoLinksRelinkPristineRelinkSiblingNoUpdateWorking PristineNone PristinePlain UseFormat2UseOldFashionedInventoryUseHashedInventoryDontSetScriptsExecutableSetScriptsExecutableDisableNoFancyMoveAdd FancyMoveAdd NoSetDefault SetDefaultDryRunNonForce NonVerifyNonApply UpToPattern AfterPatternSeveralPattern OnePattern ForceReplace XMLOutput DiffFlags FixFilePath EphemeralLazyCompletePartial CheckPointReverseUnified NoSummarySummary ExternalMergeDiffCmd InteractivePipe HumanReadableMachineReadableApplyAsReplyNewRepo RemoteRepo WorkRepoUrl WorkRepoDir UnCompress NoCompressCompressPromptForDependenciesDontPromptForDependencies DontGrabDepsAllowWindowsReserved AllowCaseOnlyBoringNoAllowConflicts MarkConflictsAllowConflictsPromptLongCommentNoEditLongCommentEditLongCommentToksNoEditDescriptionEditDescriptionNoSSHControlMasterSSHControlMaster VerifySSLVerifyHappyForwardingSignSSLNoSignSignAsSign ComplementUnion Intersection CreatorHashAnyOrder NoLookForAdds LookForAdds IgnoreTimes NoAskDepsAskDepsDontRestrictPaths RestrictPathsReorder NoRecursive RecursiveAllDistName RmLogFileLogFileCountContextUpToTagAfterTagOneTag NumberPatchesPatchIndexRangeLastNTagName UpToPatch AfterPatch SeveralPatchOnePatch PatchNameAuthor SendmailCmd InReplyToSubjectOutputAutoNameOutputCcTargetQuietNormalVerbosityVerbose DebugHTTP DebugVerboseDebugTimingsNoLeaveTestDir LeaveTestDirOnlyChangesToFiles HelpOnMatchTestNoTest ListOptionsHelp compressionwant_external_merge isInteractive showHexLenadd_to_error_locisUnsupportedOperationErrorisHardwareFaultErrorcatchall maybeGetEnv firstJustM firstJustIOclarify_errorsprettyException ortryrunning putStrLnError putDocLnErrorwithCurrentDirectory withUMaskaskUserstripCr firstNotBlank formatPath breakCommandnubsort edit_file get_viewer promptYornpromptCharFancywithout_buffering canonFilenamemk_stdout_temp maybeRelinksloppy_atomic_create atomic_createwithLockwithLockCanFailremoveFileMayNotExistwithTemp withOpenTempwithStdoutTemp tempdir_loc withPermDir withTempDirwithDelayedDir rm_recursiveworld_readable_temp withNamedTemp readBinFilereadDocBinFile appendBinFileappendDocBinFile writeBinFilewriteDocBinFilewriteAtomicFilePSgzWriteAtomicFilePSgzWriteAtomicFilePSsgzWriteDocFile writeToFile appendToFileCachableMaxAge UncachablepipeliningEnabledByDefault copyUrlFirstcopyUrlwaitUrlsetHTTPPipelining setDebugHTTPcan_I_use_mmap PatchInfo is_inverted RepoPatchInfo repopatchinfo idpatchinfo patchinfoadd_junk invert_name just_name just_authorhuman_friendlypi_name pi_rename pi_authoris_tagpi_date set_pi_datepi_logpi_tagto_xmlmake_alt_filename make_filename showPatchInfo readPatchInfoInfonameI modifiedByI modifiedHowI createdByI creationNameIDirMarkDullDirMovedDir RemovedDirAddedDirDullFile ModifiedFile MovedFile RemovedFile AddedFilePopTreePopFilePopDir PopulationPoppopStatepopTree setPopState notModifiedsetState getPopFromBSTArrayPArrayBArray getChangesshiftBoundariesaLenSSHCmdSFTPSCPSSHgrabSSHcopySSHcopySSHsrunSSHgetSSHbackupByRenamingbackupByCopying fetchFilePS gzFetchFilePS copyFileOrUrlspeculateFileOrUrl copyLocal clonePathsclonePartialsTree cloneTreecloneTreeExcept cloneFile maybeURLCmdcopyFilesOrUrlsexecSSHpipeDoc pipeDocSSH sendEmail generateEmail sendEmailDoc resendEmail execDocPipeexecPipeIgnoreError signStringverifyPSgetTermNColorsviewDoc viewDocWithtraceDoc assertDoc fancyPrinters runSilently TolerantIO runTolerantlyWriteableDirectorymWithCurrentDirectorymSetFileExecutable mWriteBinFile mWriteFilePS mWriteFilePSsmCreateDirectorymRemoveDirectory mWriteDoc mCreateFile mRemoveFilemRename mModifyFilePSmModifyFilePSsReadableDirectorymDoesDirectoryExistmDoesFileExistmInCurrentDirectorymGetDirectoryContents mReadBinFile mReadFilePS mReadFilePSs FilePathMonad withFilePaths SlurpMonad FileContentsSlurpyContents SlurpFileSlurpDirSlurpyslurpies_to_mapmap_to_slurpies empty_slurpy write_files writeSlurpy withSlurpy slurp_nameis_dirget_filecontentsget_dircontents get_mtime get_lengthundefined_timeundefined_size wait_a_momentisFileReallySymlinkdoesFileReallyExistdoesDirectoryReallyExistslurp mmap_slurpslurp_unboringco_slurp slurp_removeslurp_removefile get_slurpslurp_removedir slurp_modfile slurp_hasfile slurp_hasslurp_has_anycase slurp_hasdir get_path_list list_slurpylist_slurpy_fileslist_slurpy_dirs syncSlurpyInvertinvertidentitysloppyIdentity ReadPatch readPatch' ShowPatch showPatch showNicelyshowContextPatch descriptionsummary writePatch gzWritePatchthingthingsCommutecommutecommutexmergelist_touched_filesApplyapplyapplyAndTryToFixapplyAndTryToFixFLPatchy mapMaybeSndmergeFL commuteRLFL commuteRL commuteFL bracketedFLpeekforinvertFLinvertRL partitionFL partitionRLcommuteWhatWeCanFLcommuteWhatWeCanRLgenCommuteWhatWeCanRL removeCommonremoveFLremoveRLremove_subsequenceFLremove_subsequenceRLhead_permutationsFLheadPermutationsFLhead_permutationsRLEffecteffecteffectRLisHunk ConflictState Duplicated ConflictedOkayIsConflictedPrimIsCConflictlist_conflicted_filesresolve_conflictscommute_no_conflictsconflictedEffect FromPrims fromPrims joinPatches ToFromPrimtoPrimFromPrimfromPrimCommuteFunctionPerhaps SucceededFailedUnknownFileNameFormat NewFormat OldFormat DirPatchTypeAddDirRmDir FilePatchTypeBinary TokReplaceHunkAddFileRmFilePrim ChangePrefIdentitySplitFPDPMove null_patch is_null_patchnullP is_identity is_similar is_addfile is_adddiris_hunk is_binary is_setprefaddfilermfileadddirrmdirmove changeprefhunk tokreplacebinaryformatFileNameshowPrim try_to_shrinktry_shrinking_inversesort_coalesceFL is_filepatch subcommutescanonizejoin applyBinarytry_tok_internal modernizePrimcommute_no_conflictsFLcommute_no_conflictsRLNamedNamedPPatchRegremMergerComPPP is_merger merger_undo flattenFLjoin_patchesFL namepatch anonymous infopatchadddepsgetdepspatch2patchinfo patchname patchcontentsn_fn showPatch_showNamedPrefixtoMaybe elegant_mergepublic_unravelunravelmergermangle_unravelledmodernize_patch readPatchreadPrim remote_applyapply_asCacheCaCacheLoc CacheType DirectoryRepo WritableOrNot NotWritableWritable HashedDirHashedInventoriesDirHashedPatchesDirHashedPristineDir hashedDir unionCaches repo2cache cacheHashokayHashtakeHashfindFileMtimeUsingCachesetFileMtimeUsingCachefetchFileUsingCache peekInCachespeculateFileUsingCachewriteFileUsingCache cleanCachescleanCachesWithHint RepoFormatRF RepoPropertyHashedInventoryDarcs2Darcs1_0identifyRepoFormatwriteRepoFormatcreate_repo_format write_problemreadfrom_and_writeto_problem read_problem format_hasformat_has_togetherRepoTypeDarcsRepository RepositoryPristineHashedPristine PlainPristine NoPristine extractCacheget_motd show_motdFileTypeTextFile BinaryFilewrite_default_prefsdarcsdir_filter get_globalboring_file_filterfiletype_functionadd_to_preflist get_preflist set_preflist def_prefval get_prefval set_prefvalchange_prefval defaultreposet_defaultrepo getCaches MarkedUpFileLineMarkNoneAddedRemovedLine RemovedLine AddedLineapply_to_filepathsapply_to_slurpyforce_replace_slurpyforceTokReplaceempty_markedup_file markup_file patchChanges applyToPop summarize xml_summaryNonablenonNonPatchNonshowNonsshowNonreadNonsreadNonunNonaddPaddPsaddremNonsremPremPsremremAddPremAddPs*>>**>>>>*prop_adjust_twice RealPatch InvConflictor ConflictorNormal Etacilpud Duplicate is_duplicate is_forwardmergeUnravelled is_consistent prim2real pullCommon RepoPatch check_pathsmalicious_patcheshas_malicious_pathunsafeDiffAtPaths unsafeDiff diff_filessynccmp PatchInfoAnd Hopefullyinfopiapn2piapatchInfoAndPatch hopefullyconscientiously hopefullyMactually createHashed extractHash unavailableSealedPatchSetPatchSet progressFL progressRLprogressRLShowTags hash_bundle make_bundle make_bundle2 scan_bundle make_context scan_contextSlotInLastInMiddleInFirst PatchChoices TaggedPatchTagtagtp_patch patch_choicespatch_choices_tpsseparate_first_from_middle_lastseparate_first_middle_from_last get_choices patch_slotforce_matching_first force_firsts force_firstselect_all_middlesforce_matching_last force_last force_lastsmake_uncertainmake_everything_laterget_common_and_uncommon"get_common_and_uncommon_or_missingget_patches_beyond_tagget_patches_in_tagget_tags_rightdeep_optimize_patchsetoptimize_patchsetslightly_optimize_patchsetcommute_to_endpatchset_intersectionpatchset_unionMatcherMatchFun make_matcher apply_matcher parseMatch match_pattern match_parserhelpOnMatchersidentity_commutesinverse_doesnt_commute recommutecommute_inversespatch_and_inverse_commute permutivitypartial_permutivitymerge_arguments_consistentmerge_consistentmerge_either_way merge_commute join_inverses join_commute show_readselect_touchingdeselect_not_touchingselect_not_touchingchoose_touching look_touchapply_patches_with_feedback apply_patchesHashedIO applyHashedslurpHashedPristinewriteHashedPristinesyncHashedPristine copyHashedcopyPartialsHashedlistHashedContents clean_hashdirrevert_tentative_changesfinalize_tentative_changesreadHashedPristineRootclean_pristineadd_to_tentative_inventoryremove_from_tentative_inventory read_reporead_tentative_repowrite_and_read_patchwrite_tentative_inventory copy_repoapply_to_tentative_pristineslurp_pristinepristine_from_workingreplacePristinereplacePristineFromSlurpy copy_pristine sync_repocopy_partials_pristineslurp_all_but_darcs nopristineidentifyPristineflagsToPristinecreatePristineremovePristine slurpPristine applyPristinecreatePristineFromWorking syncPristinegetPristinePoppristineDirectorypristineToFlagStringeasyCreatePristineDirectoryTree'easyCreatePartialsPristineDirectoryTreewrite_inventorywrite_inventory_and_patchesadd_to_inventoryadd_to_tentative_pristinefinalize_pristine_changes copy_patchesstandard_resolutionexternal_resolutionpatchset_conflict_resolutionsRIO unsafeUnRIOrIO getRepositorymaybeIdentifyRepositoryidentifyDarcs1RepositoryidentifyRepositoryForamInRepositoryamNotInRepositoryfindRepository slurp_pendingslurp_recordedslurp_recorded_and_unrecordedadd_to_pendingget_unrecorded_no_look_for_addsget_unrecorded_unsortedget_unrecordedget_unrecorded_in_files makePatchLazyprefsUrl unrevertUrlapplyToWorkingtentativelyMergePatchesconsiderMergeToWorkingtentativelyAddPatchtentativelyAddToPendingtentativelyRemovePatchestentativelyReplacePatchesfinalizeRepositoryChanges testTentative testRecordedrevertRepositoryChangespatchSetToPatches withGutsOfwithRepositorywithRepositoryDirectory$- withRepoLockwithRepoReadLockoptimizeInventorycleanRepositorycreatePristineDirectoryTree#createPartialsPristineDirectoryTreepristineFromWorking withRecordedcheckPristineAgainstSlurpygetMarkedupFilesetScriptsExecutableget_checkpointget_checkpoint_by_defaultidentify_checkpointwrite_recorded_checkpointwrite_checkpointwrite_checkpoint_patchcreateRepositorycopyRepositorycopy_oldrepo_patches writePatchSetpatchSetToRepositorycheckUnrelatedRepos DarcsOptionDarcsMultipleChoiceOptionDarcsNoArgOptionDarcsOptAbsPathOptionDarcsAbsPathOrStdOptionDarcsAbsPathOptionDarcsArgOptionisinareinoption_from_darcsoptionfixFilePathOrStdfixUrl fixSubPaths areFileArgs list_options flagToStringhelp help_on_matchdisable any_verbosityworking_repo_dirpossibly_remote_repo_dir get_repourl remote_repopatchname_optionsend_to_contextmatch_one_context match_onematch_one_nontag match_several match_rangematch_several_or_rangematch_several_or_last get_contextnotesttestleave_test_dir testByDefault ignoretimes lookforaddsfancy_move_addaskdepsask_long_commentlogfile rmlogfileauthorfrom_opt get_authorget_easy_author nocompressuncompress_nocompressunifiedunidiff diff_cmd_flagstore_in_memorytargetccget_ccsubject get_subject in_reply_toget_in_reply_tooutputoutput_auto_nameedit_descriptiondistname_option recursiveinventory_choicesget_inventory_choices xmloutput creatorhashsignapplyashappy_forwarding set_defaultverifyreponametagnamedeps_sel checkpointtokenspartial partial_check force_replacereplyapply_conflict_optionspull_conflict_optionsuse_external_merge dry_run_noxmldry_run showFriendlyprint_dry_run_message_and_exit noskip_boringallow_problematic_filenames diffflagschanges_formatchanges_reverse only_to_fileshuman_readableall_interactiveall_pipe_interactivepipe_interactiverepo_combinator list_fileslist_unregistered_fileslist_registered_files options_latexset_scripts_executablerelinkrelink_pristinesiblingflagsToSiblingsnolinksreorder_patches sendmail_cmdget_sendmail_cmdfiles directoriespendingnullFlag definePatches defineChanges posthook_cmdposthook_promptget_posthook_cmd prehook_cmdprehook_promptget_prehook_cmdnetwork_options umask_optionallow_unrelated_repospatch_select_flag CommandArgsSuperCommandSubSuperCommandOnly CommandOnly DarcsCommand SuperCommandcommand_sub_commands command_name command_helpcommand_descriptioncommand_extra_argscommand_extra_arg_helpcommand_commandcommand_prereqcommand_get_arg_possibilitiescommand_argdefaultscommand_basic_optionscommand_advanced_optionsCommandControl Group_nameHidden_command Command_dataextract_commandscommand_alloptionscommand_options nodefaultsget_subcommands command_alias command_stubusagesubusage chomp_newlineget_command_mini_helpget_command_helpdisambiguate_commandsloggers printFriendly printPatchprintPatchPagercontextualPrintPatchget_test run_posthook run_prehookconvert initializeinitialize_cmd markconflictsresolvemvoptimizeremovermunaddreplacesetpref show_authorsshow_bug show_files show_manifest show_repo show_tags trackdown transfer_modewhatsnewhave_nonrange_matchhave_patchset_matchget_nonrange_matchget_partial_nonrange_match first_matchget_first_matchget_partial_first_match second_matchget_partial_second_matchcheckMatchSyntaxmatch_a_patchread match_a_patch match_patchget_one_patchsetmatch_first_patchsetmatch_second_patchset diff_commanddistgetput show_contents show_commandquerylist getRepoPopgetRepoPopVersion lookup_poplookup_creation_popmodified_to_xmlannotatecreated_as_xmlwith_selected_changes'with_selected_changes_to_files'$with_selected_last_changes_to_files'$with_selected_last_changes_reversed'with_selected_changeswith_selected_changes_to_fileswith_selected_changes_reversed#with_selected_last_changes_to_files,with_selected_last_changes_to_files_reversed#with_selected_last_changes_reversed view_changeswith_selected_patch_from_repochangespullpushrecordcommitget_dateget_log amendrecordsendunrecordget_last_patchesunpull obliteraterollbackunrevertwrite_unrevertrevertRepositoryConsistency BrokenPatchesBrokenPristineRepositoryConsistentreplayRepositorycheckrepaircommand_control_listhelp_cmdlist_available_commands print_versionget_default_flagsrun_the_commanddirectory-1.0.0.3System.Directory renameFile unix-2.3.2.0System.Posix.SignalsinstallHandler raiseSignalsigTERMsigPIPEsigINTsigHUPsigALRMsigABRTSignalDefaultIgnoreCatch CatchOnceHandlerDocumentDocumentInternalsGHC.BaseStringStspace_p newline_phPrintPrintableshPrintPrintable ByteString renderWithinvisiblePrintablesimplePrinters'caseCharchar caseStringstringmanyNmanyNtoM CalendarTimeNothingreadDate date_time cvs_date_timeiso8601_date_time old_date_time iso8601_date iso8601_timeoptchain my_spacesday_nameyear month_num intToMonth month_namedayhourminutesecondzone englishDate englishTime englishAgoenglishDuration theBeginning multiplyDiff copyCalendarc_gzopenunlinesData.ByteString intercalate withinDay dateRange cDateRangewithinsamePartialDate tryMatchers _progressDataFTablefmap readPatchDatemarkColldiffArrcmpseqfindDiagfindOne findSnake findOneRev findSnakeRev nextUnchangedskipOneUnChangednextUnchangedN nextChanged prevUnchanged getSSHOnlyhasSSHControlMasterlaunchSSHControlMasterexitSSHControlMastercontrolMasterPathPolicypoColorpoEscape poLineColor poAltColor poIsprintpo8bitpoNoEscXpoEscX poTrailingpoCRpoSpace getPolicylineColorTransescape no_escapeisPrintableAscii quoteChar mark_escapecolor make_asciiart reset_color with_color set_color make_bold make_invertslurp_fngenslurpget_slurp_contextget_slurp_context_maybeJust comparePrimsort_coalesceFL2push_coalesce_patchcoalesce readBinaryhashedFilePathwritedfdefault_repo_formatis_knownknown_propertiesmergeAfterConflictingis_malicious_pathhas_binSimpleHopefullyEitherwith_partial_intersectiongcau gcau_simple get_extra readHashFilegeta>>>=>>>returnRseekRepoget_unrecorded_privatesetTentativePendingprependfetch_patches_if_necessary getContent get_contentisa isAnAbsoluteisAnAbsoluteOrStdconcat_options add_help''valid_pref_data MatchMonadwithRecordedMatchwithRecordedMatchOnlySomeFiles strictJustnonrange_matcher first_matchernonrange_matcher_is_tag has_lastndropn find_a_patchGHC.Errerrormatch_a_patchsetget_matching_tag match_existsmaybe_read_file apply_invpsafetakeGHC.ListtakewithRecordedMatchSmartwithRecordedMatchOnlySomeSmartget_diff_cmd_and_argsinitPopapplyPatchSetPopapplyPatchesPopWithPatchesToFiles WithPatcheswascwspfrselected_patches_lastsendSanitizedEmailSendMailPost