Sp^      !"#$%&'()*+,-./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 { | } ~        !"#$%&'()*+,-./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-{-|-}-~------------------------------.////////////////////////000000000000000000000000000011111111111111111111122333333333333445555555555555555555 5 5 5 5 5555555666666666666 6!6"6#6$6%6&6'6(6)7*7+7,7-7.7/707172737475767778898:9;9<9=9>9?9@9A: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@{A|A}A~AAAAAAAABBBBBBCDDEEEEEEEEFFFGGGGGGGGGGGGGGGGGGGGGGGGGGHHHHHIIIIIIIIIIIIIIJJJJJJJJJKKKKKKKKKKKKKLLLLLLLLLLLLLMMMMNNNNNNNNNNNOOOOOOOOPPPPPPPP P P P P PPPPPQQQQQQQQQQQQQQ Q!Q"Q#Q$Q%Q&Q'Q(Q)Q*Q+Q,Q-Q.Q/Q0Q1Q2Q3Q4Q5Q6Q7Q8Q9Q:Q;Q<Q=Q>Q?Q@QAQBQCQDQEQFRGRHRIRJSKSLSMTNTOTPTQTRTSTTTUUVUWUXUYUZU[U\U]U^U_U`UaUbUcUdUeUfUgUhUiUjUkUlUmUnUoUpUqUrUsUtUuUvUwUxUyUzU{U|U}U~UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV V V W W WWXXXYYZZZZZ[[[[[[[ [!["[#[$[%[&['[([)[*[+[,[-[.[/\0\1\2\3\4\5\6\7\8\9\:\;\<]=]>]?]@]A^B_C_D`EaFaGbHbIbJbKbLbMcNdOePfQgRgShThUiViWjXjYkZk[l\m]n^o_p`papbqcqdresfsgthuiujukulvmwnxoypzq{r|s|t|u}v~wxyz{|}~Read/2interpret a date string, assuming UTC if timezone " is not specified in the string "Case-insensitive variant of Parsec's  function. "Case-insensitive variant of Parsec's  function. Match a parser at least n times. Match a parser at least n times, but no more than m times. < returns a filter function that tells if a char is a member I of the regChar expression or not. The regChar expression is basically a 9 set of chars, but it can contain ranges with use of the  (dash), and @ it can also be specified as a complement set by prefixing with  C (caret). The dash and caret, as well as the backslash, can all be = escaped with a backslash to suppress their special meaning.  NOTE: The ; (dot) is allowed to be escaped. It has no special meaning ' if it is not escaped, but the default  filename_toks in 4 Darcs.Commands.Replace uses an escaped dot (WHY?). 7 unescapes whitespace, which is escaped in the replace J patch file format. It will also unescape escaped carets, which is useful G for escaping a leading caret that should not invert the regChars. All . other escapes are left for the unescaping in . 3 assembles the filter function. It handles special G chars, and also unescaping of escaped special chars. If a non-special 0 char is still escaped by now we get a failure.   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" &'-Given a list of things, combine them thusly: 6 orClauses ["foo", "bar", "baz"] == "foo, bar or baz" (As *, with a different separator for the last  | interspersal.  !"#$%&'( %"#$ !'&(  !!"#$#$%&'() )) ) *+,-./*+,-./+/-,.**+,-./ 0123456789:;<=>?@ABC0123456789:;<=>?@ABC456<?9:;237AB018C@=>0112334556789:;<=>?@ABC DEFGHIJKK8 translates whitespace in filenames to a darcs-specific G format (backslash followed by numerical representation according to ). O Note that backslashes are also escaped since they are used in the encoding. / encode_white "hello there" == "hello\32there" . encode_white "hello\there" == "hello\\there" LL interprets the Darcs-specific "encoded" filenames  produced by K / decode_white "hello\32there" == "hello there" / decode_white "hello\\there" == "hello\there" < decode_white "hello\there" == error "malformed filename" MNOPQ!Split a file path at the slashes RSDEFGHIJKLMNOPQRSDEFIJGHOPMNSKLRQDEFGHIJKLMNOPQRS GTAn  MCalenderTime is an underspecified  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 '. This uses almost the same fields as  $, a notable exception being that we  introduce b/ to indicate if a weekday was specified or not UVWXYZ[\]^_`abcdRead/2interpret a date string, assuming UTC if timezone ' is not specified in the string (see ) 8 Warning! This errors out if we fail to interpret the  date e>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 fRead/8interpret a date string, assuming local timezone if not  specified in the string g5Return the local timezone offset from UTC in seconds Parse a date string with h = Warning! This errors out if we fail to interpret the date 5 Uses its first argument as the default time zone. h4Parse a date string, assuming a default timezone if ; the date string does not specify one. The date formats  understood are those of  and   Display a $ in the ISO 8601 format without any # separators, e.g. 20080825142503 i+The current time in the format returned by  "Case-insensitive variant of Parsec's  function. "Case-insensitive variant of Parsec's  function. Match a parser at least n times. Match a parser at least n times, but no more than m times. 6Try each of these date parsers in the following order      'old_date_time CVS-style date/ times, e.g.  20070825 14:25:39 GMT + Note that time-zones are optional here. "Old"-style dates, e.g.  Tue Jan 3 14:08:07 EST 1999 $ darcs-doc: Question (what does the old stand for really?) <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?) -} Three 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 9Note that this returns a function which sets the time on  another calendar (see  for a list of  flaws jIntervals in ISO 8601, e.g.,  2008-09/2012-08-17T16:30  2008-09/P2Y11MT16H30M  P2Y11MT16H30M/2012-08-17T16:30 See k kDurations 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)  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). One or more space. = WARNING! This only matches on the space character, not on  whitespace in general <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 minute in two-digit notation second in two-digit notation limited timezone support  +HHMM or -HHMM  Universal timezones: UTC, UT  Zones from GNU coreutilslib"getdate.y, less half-hour ones --  sorry Newfies. @ any sequence of alphabetic characters (WARNING! treated as 0!) lBIn English, either a date followed by a time, or vice-versa, e.g,  yesterday at noon  yesterday tea time  12:00 yesterday See  and   Uses its first argument as now", i.e. the time relative to which   yesterday, today etc are to be interpreted ;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 ) The first argument is now. 1English expressions for points in the past, e.g.  4 months ago  1 day ago  day before yesterday See  m+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 ) n.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  Either an  or one of several common ! English time expressions like noon or 'tea time' Some 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. ,The very beginning of time, i.e. 1970-01-01 oTrivially convert a  to a fully specified  UT (note that this sets the b flag to  False pReturns the first  that falls within a UT 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 s qr 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 sDSet 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)  c mc replaces any field which is  specified in mc with the equivalent field in c  -copyCalendar c nullMCalendar == nullMCalendar tZero the time fields of a  !TUVWXYZ[\]^_`abcdefghijklmnopqrst!ifdhglmnjkesTUVWXYZ[\]^_`abrqoptc!TUVWXYZ[\]^_`abUVWXYZ[\]^_`abcdefghijklmnopqrst uA u. 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. v 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  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.  x1 x2 y is true if x1 <= y < x2  x1 x2 y is true if x1 <= y < x2   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. ww s return the first matcher in  x that can parse s xx 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.  ms' returns the first successful match in ms * It is an error if there are no matches uvwxwuvxuvvwx y?Registers an IO action to run just before darcs exits. Useful < for removing temporary files and directories, for example. z{|}~yz{|}~yz|}{~yz{|}~portable experimentaldroundy@abridgegame.org=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 -, 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. QDecompress the given bytestring into a lazy list of chunks, along with a boolean 7 flag indicating (if True) that the CRC was corrupted. R Inspecting the flag will cause the entire list of chunks to be evaluated (but if I you throw away the list immediately this should run in constant space). GRead an entire file, which may or may not be gzip compressed, directly  into a . ;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.  url body  mime type result !     beginTedious k. starts a tedious process and registers it in   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.  ~ ~   e is a wrapper around ' [Printable] -> [Printable]' which allows # for empty Documents. The simplest  Documents are built from s  using .  @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  , 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. / puts a doc on stdout using the given printer. 3 puts a doc, followed by a newline on stdout using  the given printer. / puts a doc on stdout using the simple printer . 3 puts a doc, followed by a newline on stdout using    hputDocWith9 puts a doc on the given handle using the given printer.  hputDocLnWith0 puts a doc, followed by a newline on the given ! handle using the given printer. hputDoc& puts a doc on the given handle using  '' h prints a list of s to the handle h (hPrintPrintable h prints a  to the handle h.  renders a  into a  with control codes for the  special features of the doc.  renders a  into a  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. * builds a Doc from a  and a  representing 1 the same text, but does not check that they do.  builds a  from a . The string is stored in the  Doc as both a String and a .  builds a  from a  using   builds a  from a  using   creates a  with invisible text from a   creates a " representing a user chunk from a . . creates a Doc containing just one character.  creates a  from a String, using .  creates a  from a , using  directly  creates a " containing invisible text from a String  creates a  containing hidden text from a String    creates a  containing a user chunk from a String     creates a  containing blue text from a String    creates a  containing colored text from a String  n s is a  representing s line-wrapped at n characters +,' printable x' creates a  from any . -. is a  which uses the set 'simplePriners\'' on any  handle. /GA set of default printers suitable for any handle. Does not use color.  is the simplest  : it just concatenates together  the pieces of the   is the # for hidden text. It just replaces  the document with . It'%s useful to have a printer that doesn't H actually do anything because this allows you to have tunable policies, + for example, only printing some text if it's to the terminal, but not  if it's to a file or vice-versa.  The empty . '( )'# 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 S     S     S     01 ! ! ! !<"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]<"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]<8:9;452301./,-%'&"$#67Z\][TQNHLKIJMUVRPOSA@DEBC>FGWX()*+Y?<=<"$##$%'&&'()*+)*+,--.//0112334556778:99:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abc^_`abc`ab^_c^_`abc#234d56eEThis is for situations where a string (e.g. a command line argument)  may take the value "-"/ to mean stdin or stdout (which one depends on ) context) instead of a normal file path. 78f9gGPaths which are relative to the local darcs repository and normalized. : Note: These are understood not to have the dot in front. :hijkl8Make the second path relative to the first, if possible mnFInterpret a possibly relative path wrt the current working directory. oFTake an absolute path and a string representing a (possibly relative) H path and combine them into an absolute path. If the second argument is L already absolute, then the first argument gets ignored. This function also A takes care that the result is converted to Posix convention and ' normalized. Also, parent directories ("..") at the front of the string C argument get canceled out against trailing directory parts of the  absolute path argument. IRegarding the last point, someone more familiar with how these functions J are used should verify that this is indeed necessary or at least useful. ;<=Convert to posix, remove trailing slashes, and (under Posix) ) reduce multiple leading slashes to one. p(The root directory as an absolute path. qrsEExecute either the first or the second argument action, depending on  whether the given path is an f or stdin/stdout. tu=>DNormalize the path separator to Posix style (slash, not backslash). $ This only affects Windows systems. ?IReduce multiple leading slashes to one. This only affects Posix systems. vwxdefghijklmnopqrstuvwxfonpeqrsdtuglmxjkhivwdefghiijkklmnopqrstuvwx$@Ayz{B|C}~_The firstJustM returns the first Just entry in a list of monadic operations. This is close to  ` listToMaybe D 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. @Given two shell commands as arguments, execute the former. The E latter is then executed if the former failed because the executable  wasn't found (code 127), wasn'&t executable (code 126) or some other C exception occurred. Other failures (such as the user holding ^C) . do not cause the second command to be tried. aReturns Just l where l is first non-blank string in input array; Nothing if no non-blank entries EKConstruct a filter from a list of AnchoredPaths, that will accept any path L that is either a parent or a child of any of the listed paths, and discard  everything else. Same as  filterPath, but for ordinary Fs (as opposed to  AnchoredPath). yz{|}~}yz~{|yz{|}~ GHIJ**The . type is a list of all flags that can ever be - passed to darcs, or to one of its commands.       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNKlastWord [(flag, value)] default opts scans opts for a flag : in the list and returns the value of the first match, or default  if none is found. LOPQRSTUVWX      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!      KLMNOPQRSTUVWXJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!            !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX'YMNZ[O\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) PQRST(mark hash value where collision occured UHreturn arrays with changes in a and b (1 indexed), offsets start with 0 VAset changes array for a and b and return number of changed lines W1return (xmid, ymid, cost) for the two substrings  a[off_a+1..off_a+1+l_a] and b X,find position on diag d with one more insert/delete going forward YIfollow snake from northwest to southeast, x and y are absolute positions Z,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 abcdef^ghijklmYZ[\]^\^[ZY]YZ[\]^(nopq_`6Tries to perform some task if it can obtain the lock, 1 Otherwise, just gives up without doing the task rastuvbb9 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. cc# 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). defwxghh is like i, except that it doesn't " delete the directory afterwards. ii8 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. jyklmnopqrstuvwxyz_`abcdefghijklmnopqrstuvwxyz_`bcdihjmyzstqropuvwxkalenfg_`abcdefghijklmnopqrstuvwxyzz{{{{{|}~|}~>Return the command and arguments needed to run an ssh command A along with any extra features like use of the control master.  See   remote path ?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 remote path (foo@4bar.com:file is ok; the file part with be stripped)  |}~ |~} |~}}~JFormats an e-mail header by encoding any non-ascii characters using UTF-8 D and Q-encoding, and folding lines at appropriate points. It doesn't do A more than that, so the header name and header value should be I well-formatted give or take line length and encoding. So no non-ASCII J characters within quoted-string, quoted-pair, or atom; no semantically J meaningful signs in names; no non-ASCII characters in the header name;  etcetera. /Turns a piece of string into a q-encoded block P Applies q-encoding, for use in e-mail header values, as defined in RFC 2047. P It just takes a string and builds an encoded-word from it, it does not check  length or necessity.   experimental!)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 "5   #55Get the name of the darcs executable (as supplied by  getProgName) 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 handle to write email to From To Subject CC body 4Send an email, optionally containing a patch bundle ; (more precisely, its description and the bundle itself) from to subject cc  send command (content,bundle) body $$ $'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. % 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. writeProblem 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. writeProblem 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. readProblem 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. &@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 '(" )'Things that can commute. 3Swaps the ordered pair type so that commute can be  called directly. 4Swaps the ordered pair type from the order expected " by commute to the reverse order.       %     %     %      *JCommuteFn is the basis of a general framework for building up commutation M operations between different patch types in a generic manner. Unfortunately R type classes are not well suited to the problem because of the multiple possible I routes by which the commuter for (FL p1, FL p2) can be built out of the N commuter for (p1, p2) - and more complicated problems when we start building Q multiple constructors on top of each other. The type class resolution machinery  really can'2t cope with selecting some route, because it doesn't know that all ' possible routes should be equivalent.  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 right list. 2predicate; if true we would like the patch in the left list input % left and right results ! 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. 2predicate; if true we would like the patch in the right list input " left and right results " x xs removes x from xs if x can be commuted to its head.  Otherwise it returns   is like  except with "  ab abc returns Just c' where all the patches in  abE have been commuted out of it, if possible. If this is not possible & for any reason (the set of patches ab is not actually a subset of abc,  or they can't be commuted out) we return .  is like remove_subsequenceFL except that it works  on " This is a minor variant of  with each permutation  is simply returned as a %  p:>:ps* returns all the permutations of the list  in which one element of ps is commuted past p &Suppose we have a sequence of patches   X h a y s-t-c k #Suppose furthermore that the patch c depends on t, which in turn  depends on s. This function will return  X :> h a y s t c k  h :> X a y s t c k  a :> X h y s t c k  y :> X h a s t c k  s :> X h a y t c k  k :> X h a y s t c  is like , except that we  operate on an "8 (in other words, we are pushing things to the end of a 0 patch sequence instead of to the beginning). UBuild a commuter between a patch and itself using the operation from the type class. VPartition a list into the patches that commute with the given patch and those that don't (including dependencies) +BPatches whose concrete effect which can be expressed as a list of  primitive patches. (A minimal definition would be either of effect or effectRL.  !"#$%&'()*+,If , x :> y succeeds, we know that that x commutes  past yB without any conflicts. This function is useful for patch types  for which 6 is defined to always succeed; so we need some way to Q pick out the specific cases where commutation succeeds without any conflicts. LConsider the commute square with patch names written in capital letters and / repository states written in small letters.    X  o-->--a  | |  Y' v v Y  | |  z-->--b  X' FThe default definition of this function checks that we can mirror the D commutation with patch inverses (written with the negative sign)    -X X  a-->--o-->--a  | | |  Y'' v Y' v v Y  | | |  b-->--z-->--b  (-X)' X' We check that commuting X and Y succeeds, as does commuting -X and Y'.  It also checks that Y'' == Y and that -(X') is the same as (-X)' -./0123456789#$%&:;<=>?@ABCDEFGHIJKLMNOPQ?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. RSTUV'WXYZ[\]^_`ab()*+,-./0123c456789d:;ee ps+ puts a sequence of primitive patches into < canonical form. Even if the patches are just hunk patches, B this is not necessarily the same set of results as you would get A if you applied the sequence to a specific tree and recalculated  a diff. CNote that this process does not preserve the commutation behaviour > of the patches and is therefore not appropriate for use when B working with already recorded patches (unless doing amend-record  or the like). ff ps coalesces as many patches in ps as A possible, sorting the results according to the scheme defined  in < = The heart of sortCoalesceFL >> 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. ?@ABCDgEFhGiHH 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. jIJKLMNOPklQ<< 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. RSmnTP !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnPFLKJIHG'(#&%$b=?>@EDCBA56987MONPa:<;YW_\][ZX^RTUVQSgiclhfjekd`34./012)*+,- !"mnP !" !"#&%$$%&'(()*+,-*+,-./0/012234456987789:<;;<=?>>?@EDCBAABCDEFLKJIHGGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmn,oUpopopop-ZqVrstuWvwXYxyZz[\]^{|}_`abcdefghijklmn~o!Here are a few access functions. pqr/slurp is how we get a slurpy in the first placeldots stuvwxyzIget_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 z+ that allows for removing the child slurpy  altogether by passing in  to the update function. 9 If the child slurpy happened to be at the top level and  was passed in, 5 then the result of the update function will also be , otherwise it will always  be a | value.  A variant of z/ 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. +qrstuvwxyz{|}~+vwsutxyrz~q}{|+qrsuttuvwwxyz{|}~%qrvz{|}~%vzr~{q}|. /,9Note: 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. 0name 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.  1The Named7 type adds a patch info about a patch, that is a name. NamedP info deps p represents patch p with name  info. deps4 is a list of dependencies added at the named patch E level, compared with the unnamed level (ie, dependencies added with  darcs record --ask-deps). F`F`23/// 4Modify a binary file  binary FILENAME  oldhex  *HEXHEXHEX  ...  newhex  *HEXHEXHEX  ... 5*= 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.                6!.[^/]  ^_  ~$  (^|)CVS($|)  e nd{verbatim} : A newly created repository has a longer boring file that M includes many common source control, backup, temporary, and compiled files. 3You may want to have the boring file under version A control. To do this you can use darcs setpref to set the value  ` boringfile') to the name of your desired boring file  (e.g. v-erb-darcs setpref boringfile .boring-, where v erb-.boring- " is the repository path of a file  that has been G darcs added to your repository). The boringfile preference overrides  v erb!_darcsprefs9boring!, so be sure to copy that file to the boringfile. You can also set up a `boring' regexps $ file in your home directory, named verb!~.darcs boring!,  on MS Windows~ref{ms_win}, which will be + used with all of your darcs repositories. FAny file not already managed by darcs and whose repository path (such  as v erb!manual/index.html!) matches any of J the boring regular expressions is considered boring. The boring file is G used to filter the files provided to darcs add, to allow you to use a  simple verb-darcs add newdir newdir,-\verb-*- % cabal haddock barfs on adjacent  * ( without accidentally adding a bunch of ) object files. It is also used when the verb!--look-for-adds! flag is  given to whatsnew or record. E Note that once a file has been added to darcs, it is not considered 4 boring, even if it matches the boring file filter. -The path of the global preference directory; ~/.darcs on Unix,  and  %APPDATA%/darcs on Windows. 5From a list of paths, filter out any that are within _darcs or  match a boring regexp. %The lines that will be inserted into _darcsprefsbinaries when   darcs init5 is run. Hence, a list of comments, blank lines and $ regular expressions (ERE dialect). ANote that while this matches .gz and .GZ, it will not match .gZ, ( i.e. it is not truly case insensitive.  !"#$%&'( !"#$%&'( !&'#$%"( !"#$%&'(7)*+,-./01234567Apply a patch to a , yielding a new . )*+,-./01234567/0243567*.-,+)1)*.-,++,-./012345678         6High-level representation of a piece of patch summary 8 9      8998899 :GA splitter is something that can take a patch and (possibly) render it - as text in some format of its own choosing. I This text can then be presented to the user for editing, and the result $ given to the splitter for parsing. K If the parse succeeds, the result is a list of patches that could replace $ the original patch in any context. J Typically this list will contain the changed version of the patch, along M with fixup pieces to ensure that the overall effect of the list is the same  as the original patch. K The individual elements of the list can then be offered separately to the 7 user, allowing them to accept some and reject others. There'Bs no immediate application for a splitter for anything other than  Prim (you shouldn't go editing named patches, you'll break them!) G However you might want to compose splitters for FilePatchType to make 1 splitters for Prim etc, and the generality doesn't cost anything. ;<= >VThis generic splitter just lets the user edit the printed representation of the patch < Should not be used expect for testing and experimentation. ?YNever splits. In other code we normally pass around Maybe Splitter instead of using this 2 as the default, because it saves clients that don'&t care about splitting from having to , import this module just to get noSplitter. @ Split a primitive hunk patch up Y by allowing the user to edit both the before and after lines, then insert fixup patches  to clean up the mess. :;<=>?@:;<=>?@:;<=;<=>?@:ABC+Convenience type for non primitive patches DED stores a context with a F patch. EFGHIJ>Return as a list the context followed by the primitive patch. KK x cy tries to commute x past cy and always returns some  variant cy'/. -- commutation suceeds, the variant is just L straightforwardly the commuted versian. If commutation fails, the variant  consists of x prepended to the context of cy. LL xs cy commutes as many patches of xs past cy as @ possible, stopping at the first patch that fails to commute.  Note the fact xs is a " Suppose we have   x1 x2 x3 [c1 c2 y] and that in our example c1 fails to commute past x1, this " function would commute down to   x1 [c1'' c2'' y''] x2' x3'  and return [x1 c1'' c2'' y''] MN OPQRSTUVWXABCDEFGHIJKLMNOPQRSTUVWXCDEABJGIFHMQKOLPRSNTUVWXABBCDEEFGHIJKLMNOPQRSTUVWX;.    xs ys cs'/ represents two sequences of patches that have cs in common,  in other words xs +<+ cs and ys +<+ cs     cs xs ys/ represents two sequences of patches that have cs in common,  in other words  cs +>+ xs and  cs +>+ ys Y 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) Z[\]^__ p is ' True if p is either a ^ or ] patch `#This is only used for unit testing a    (Sealed xs) converts xs to a ED.  xs> must be non-empty since we split this list at the last patch    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). ! " #If xs consists only of \ patches,  # xs returns  Just pxs those patches (so lengthFL pxs == lengthFL xs).  Otherwise, it returns . b=This is used for unit-testing and for internal sanity checks $c % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7dd xs ys1 returns the set of patches that can be commuted  out of both xs and ys' along with the remnants of both lists 8 8 xs ys1 returns the set of patches that can be commuted  out of both xs and ys' along with the remnants of both lists YZ[\]^_`abcd Y^]\[Zcb`_da Y^]\[ZZ[\]^_`abcd<e 9^    *+/04FQRSTUVWXYZ[\]^_cfi)*+,-./013456789Ye^eFY04/XWZY[]^_\QRTV+ US   ifc0/17*.-,+)4389*56e=ff 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. < =gg 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. ? @ Ahii i p2 creates a PatchInfoAnd containing p with info i. jn2pia' creates a PatchInfoAnd representing a Named patch. kll hp tries to get a patch from a f ) 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 mm er hp! tries to extract a patch from a f. 5 If it fails, it applies the error handling function er to a description  of the patch info component of hp. n hopefullyM is a version of  hopefully which calls fail in a  monad instead of erroring. Bopqr fghijklmnopqr gfijkmlhnpqor fghijklmnopqr>s Evaluate an % list and report progress. t Evaluate an " list and report progress. u 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. stutsustu?vwAA 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. ws 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 vwwvvw@xGA 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. y:Filter out patches that contains some malicious file path z C DWhat is a malicious path? $A spoofed path is a malicious path.  > Darcs only creates explicitly relative paths (beginning with "./"), < so any not explicitly relative path is surely spoofed. . 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'? ExyzxyzxyzA F G{| H I$with_partial_intersection takes two ws 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 w. This is a pretty Lefficient function, because it makes use of the already-broken-up nature of ws. ws 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. J J determines a list of common' patches and patches unique to each of the two ws. 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 w( list, since those can be expensive (or #unavailable). In other words, the common patches need not be minimal,  whereas the w-s should be minimal for performance reasons. ws 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. K L M!Filters the common elements from ps1 and ps2' and returns the simplified sequences.  ps1 ps2 NReturns a sub-sequence from patches, where all the elements of common have K been removed by commuting them back into the early part of the history. QAn informal illustration of this process as it traverses a mixed list of patches R where C and x denote common patches and extra patches accordingly. Variants of N patches obtained through commutation are indicated by letters following the  patch name.  9 in: x6 < x5 < C4 < x3 < C2 < x1 skip: extra: M in: x5 < C4 < x3 < C2 < x1 skip: extra: x6 M in: C4 < x3 < C2 < x1 skip: extra: x5 > x6 M in: x3 < C2 < x1 skip: C4 extra: x5 > x6 M in: C2 < x1 skip: C4b extra: x3b > x5 > x6 M in: x1 skip: C2 > C4b extra: x3b > x5 > x6 M in: skip: C2b > C4c extra: x1b > x3b > x5 > x6 IThis function is undefined if for any reason we fail to commute an extra M patch past one of the common ones. Such a failure would indicate that the J common patch depends on the extra one, contradicting the claim that the  "common"D patch is shared with another repository lacking the extra patches. O Unfortunately, such cases have crept up in practice. Some notable cases can ! be found on the bugtracker as: M issue27 - different patches with identical patch info; mistaken identity.  Note how common consists only of a list of  which = we trust to uniquely identify such patches.  issue1014 - duplicate patches  common patches O P}~get_patches_in_tag t ps returns a v of all  patches in ps which are contained in t.  Q R {|}~ {|}~ {|}~BAIn 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.  S T U V W X Y ZCDEA Matcher is made of a  which we will use to match  patches and a String representing it. [;A type for predicates over patches which do not care about  contexts  apply_matcher applies a matcher to a patch.  \ ] ^ _ ` a.The string that is emitted when the user runs darcs help --match. b+keyword (operator), help description, list  of examples, matcher function c d e f g h i j k  F l m nG,See module documentation for Darcs.Patch.Choices  o p q r s mp iA acts as a temporary identifier to help us keep track of patches L during the selection process. These are useful for finding patches that J may have moved around during patch selection (being pushed forwards or % backwards as dependencies arise). )The identifier is implemented as a tuple TG mp i. The i is just some C arbitrary label, expected to be unique within the patches being  scrutinised. The mp% is motivated by patch splitting; it I provides a convenient way to generate a new identifier from the patch @ being split. For example, if we split a patch identified as  TG Nothing  53, the resulting sub-patches could be identified as TG (TG Nothing 5)  1, TG (TG Nothing 5) 2, etc. s t u v wQTag a sequence of patches as subpatches of an existing tag. This is intended for C use when substituting a patch for an equivalent patch or patches. Tag a sequence of patches. x y z { | } ~ ~ ts s ps assigns all patches in ps with a tag in ts to slot s  (and any other patch to slot )    (a :||: bs) pcs replaces a with bs in pcs preserving the choice  associated with a H IJ    K    L       MN 'From a repository and a list of SubPath'"s, construct a filter that can be H used on a Tree (recorded or unrecorded state) of this repository. This L constructed filter will take pending into account, so the subpaths will be L translated correctly relative to pending move patches. As an exception for I convenience, if the subpath list is empty, the filter constructed is an  identity. JConstruct a Tree filter that removes any boring files the Tree might have M contained. Additionally, you should (in most cases) pass an (expanded) Tree E that corresponds to the recorded content of the repository. This is I important in the cases when the repository contains files that would be M boring otherwise. (If you pass emptyTree instead, such files will simply be ? discarded by the filter, which is usually not what you want.) MThis function is most useful when you have a plain Tree corresponding to the : full working copy of the repository, including untracked K files. Cf. whatsnew, record --look-for-adds. NB. Assumes that our CWD is  the repository root. KFor a repository and a list of paths (when empty, take everything) compute K a (forward) list of prims (i.e. a patch) going from the recorded state of J the repository (pristine) to the unrecorded state of the repository (the K working copy + pending). When a non-empty list of paths is given, exactly D the files that live under any of these paths in either recorded or 5 unrecorded will be included in the resulting patch. JThis also depends on the options given: with LookForAdds, we will include @ any non-boring files (i.e. also those that do not exist in the recorded  state) in the working in the  unrecorded state, and therefore they will % show up in the patches as addfiles. LThe IgnoreTimes option disables index usage completely -- for each file, we M read both the unrecorded and the recorded copy and run a diff on them. This K is very inefficient, although in extremely rare cases, the index could go L out of sync (file is modified, index is updated and file is modified again  within a single second). $Obtains a Tree corresponding to the recorded state of the repository: L this is the same as the pristine cache, which is the same as the result of  applying all the repository'!s patches to an empty directory. KHandles the plain and hashed pristine cases. Currently does not handle the ; no-pristine case, as that requires replaying patches. Cf.    and  2 in hashed-storage that are used to do the actual   construction. $Obtains a Tree corresponding to the  unrecorded state of the repository:  the working tree plus the pending patch. 8Obtains a Tree corresponding to the working copy of the B repository. NB. Almost always, using readUnrecorded is the right D choice. This function is only useful in not-completely-constructed  repositories. GMark the existing index as invalid. This has to be called whenever the K listing of pristine changes and will cause darcs to update the index next K time it tries to read it. (NB. This is about files added and removed from M pristine: changes to file content in either pristine or working are handled + transparently by the index reading code.)    O+  readHashFile c subdir hash reads the file with hash hash in dir subdir,  fetching it from  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.  (Seems to list all hashes reachable from root. P"                        QN BRepository 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 what to return if we don't find a repository  !"#$% & '()* +,-./0NThis 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. 1isetTentativePending 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. 2 3 456 78 9:;<=> ?<Writes out a fresh copy of the inventory that minimizes the C amount of inventory that need be downloaded when people pull from  the repository. ASpecifically, it breaks up the inventory on the most recent tag. @ This speeds up most commands when run remotely, both because a ; smaller file needs to be transfered (only the most recent C inventory). It also gives a guarantee that all the patches prior B to a given tag are included in that tag, so less commutation and A history traversal is needed. This latter issue can become very " important in large repositories. @ABC D E\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. <We have an instance of Monad so that IO actions that do not E change the tentative recorded state are convenient in the IO monad. :vw !"#$%&'()*+,-./0123456789:;<=>?@ABCDE:<! "7#$+1,C&('=>:;9-20.34)*8AB?@DwvE56/%4 !"#$%&'()*+,-./0123456789:;<=>?@ABCDER FGH IFGHIFGHIFGHISJKLJKLJKLJKLT MN O P@writePatchSet is like patchSetToRepository, except that it doesn't 0 touch the working directory or pristine cache. Q]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. R 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. STKReplace the existing pristine with a new one (loaded up in a Tree object). 9fvw !"#$&'()*-023456789:;<=>?@ABCDEKLMNOPQRST9<=>:;9'P! "T#$C&(S-203KL74MNOQ)*8AB?@DwvfER56MNOPQRSTUUA 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. V=A constructor for grouping related options together, such as  --hashed,  --darcs-2 and --old-fashioned-inventory. W;DarcsNoArgOption shortSwitches longSwitches mkFlag optDescr 0 The constructon fon options with no arguments. XBDarcsOptAbsPathOrStdOption 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 YKDarcsAbsPathOrStdOption shortSwitches longSwitches mkFlag ArgDescr OptDescr ; The constructor for options with a path argument, such as -o ZFDarcsAbsPathOption 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_option4 creates a DarcsMultipleChoiceOption from a list of ? option, flattening any DarcsMultipleChoiceOption in the list. _`a bc list_option% is an option which lists the command' s arguments defghijj2 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 kk5 is the option used to specify the URL of the remote  repository to work with lmnopqrst    uvv/ 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 wxyz{|}~5 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. E tries to get the author name first from the repository preferences, H then from global preferences, then from environment variables. Returns  if it  could not get it.    C 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. ; 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    flags patch returns a  representing the right  way to show patch given the list flags" of flags darcs was invoked with.  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.  HGet a list of all non-boring files and directories in the working copy. 1 returns the list of all non-boring unregistered  files in the repository. = returns the list of all registered files in the repository.      collects the contents of all Sibling flags in a list of flags. 8 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.  8 takes a list of flags and returns the posthook command  specified by  PosthookCmd a in that list of flags, if any. 7 takes a list of flags and returns the prehook command  specified by  PrehookCmd a in that list of flags, if any.     f holds whenever f is a way of selecting  patches such as  PatchName n. ,The integer corresponding to a string, if it's only composed of digits.  Otherwise, -1. 9      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJNUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~9JIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!      dN\]_`abU[ZYXWV^ecgfwxhzkyijl~{|npumvoqrst}U[ZYXWVVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~V0         )  -  )  W   opts patch prints patch in accordance with the  flags in opts, ie, whether  --verbose or  --summary were passed at  the command-line.   $ prints a patch on standard output.    runs '$PAGER' and shows a patch in it. , prints a patch, together with its context,  on standard output.          X  !Y " # $ % & ' ( ) * + , - . /:FIXME: this documentation makes *no* sense to me, and the ? ramifications of using this option are not clear. --twb, 2008  0 1 2Z 3"population of an empty repository 4!apply a patchset to a population 5apply Patches to a population (get the pristine population from a repo  6 75656[3 8A 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. 9withRecordedMatch/ 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). ;haveNonrangeMatch flags" tells whether there is a flag in  flags& which corresponds to a match that is  non-range. Thus,  --match, --patch and --index make haveNonrangeMatch  true, but not  --from-patch or  --to-patch. havePatchsetMatch 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 haveNonrangeMatch?  <  firstMatch 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. !" =#secondMatch 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. $% > ? @ AGstrictJust 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 w! is written right to left), then  we have (up to) three s: the & is the ? criterion we use to select among patches in the interval, the   B, 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. &nonrangeMatcher0 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). CnonrangeMatcherIsTag) returns true if the matching option was  '--tag' B firstMatcher1 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,  firstMatcher  returns Nothing. D E F'matchAPatchread fs p tells whether p matches the matchers in  the flags listed in fs. (matchAPatch fs p tells whether p matches the matchers in  the flags fs )* G hasLastn fs return the --last argument in fs , if any. H+matchFirstPatchset fs ps returns the part of ps before its C first matcher, ie the one that comes first dependencywise. Hence,  patches in matchFirstPatchset fs ps are the ones we don't want. #Question: are they really? Florent I dropn n ps drops the n last patches from ps. ,matchSecondPatchset fs ps returns the part of ps before its < second matcher, ie the one that comes last dependencywise. JfindAPatch m ps returns the last patch in ps matching m, and  calls  K if there is none. LmatchAPatchset m ps$ returns a (the largest?) subset of ps  ending in patch which matches m. Calls  K if there is none. MgetMatchingTag m ps, where m is a  which matches tags  returns a v. 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   K if there is no matching tag. -matchExists m ps) tells whether there is a patch matching  m in ps . N maybeReadFile, recursively gets the contents of all files ? in a directory, or just the contents of a file if called on a  simple file. O P Q applyInvp 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. R a version of  S for " lists that cater for contexts. T UwithRecordedMatchSmart hides away the choice of the  q to use in order to apply  9.  If we have the --store-in-memory flag, then use q, 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? VwithRecordedMatchOnlySomeSmart is the smart version of  withRecordedMatchOnlySome . It runs withRecordedMatchOnlySome  either in the q or in IO according to the  --store-in-memory flag.  !"#$%&'()*+,-.+,)('!"$ #*%.&- !"#$%&'()*+,-.\4 W X Y Z [The only difference with  \ is the [FilePath] argument \ ] ^ _ ` a b c d/012345678 e@wasc and wasc_ are just shorthand for with_any_selected_changes f g9 h i: jaThis 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. k l m n o pfiles opts patches qfiles opts patches rfiles opts patches sfiles opts patches t:Returns the results of a patch selection user interaction u v w x y z { | };COptionally remove any patches (+dependencies) from a sequence that < conflict with the recorded or unrecorded changes in a repo Command-line options. Only  is 6 significant; filtering will happen iff it is present 0Recorded patches from repository, starting from ' same context as the patches to filter 8Repository itself, used for grabbing unrecorded changes Patches to filter ?(True iff any patches were removed, possibly filtered patches) /0123456789:; /0123456789:; /0123456789:;] ~  < => ?@ <=>?@<=?@><=>?@^ A AAA_ B C BCBCBC` D GsendSanitizedEmail sends a sanitized email using the given sendmailcmd  It takes  DacrsFlag( options a file with the mail contents, # To:, Subject:, CC:, and mail body DDDa E ;Take a list of filenames and patches and produce a list of B patches that actually touch the given files with list of touched C file names, a new file list that represents the same set of files C as in input, before the returned patches would have been applied, : and possibly an error. Additionaly, the function takes a  depth limit; -- maxcount, that could be Nothing (return everything) or  Just n: -- returns at most n patches touching the file (starting ( from the beginning of the patch list).  maxcount  filenames  patchlist ?Note, lazy pattern matching is required to make functions like B filterPatchesByNames lazy in case you are only not interested in  the first element. E.g.: *let (fs, _, _) = filterPatchesByNames ... FEFEFEFb GHIJ KLGHIJKLKLGJIHGJIHHIJKLc M MMMd @This part of the help is split out because it is used twice: in 6 the help string, and in the prompt for confirmation. N NNNe O LReturns 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. OOOf P >This function performs the actual distribution action itself.  NB - it does not+ perform the pre-dist, that should already 5 have completed successfully before this is invoked. PPPg QRQRQRQRh ST called by getCmd ` assumes that the target repo of the get is the current directory, and that an inventory in the ( right format has already been created. STSTSTi VTake a list of words and split it up so that each chunk fits into the specified width W when spaces are included. Any words longer than the specified width end up in a chunk  of their own. UHThis is designed for use in an atexit handler, e.g. in Darcs.RunCommand V UVVUUVj W X(resolve is an alias for mark-conflicts. WXWXWXk Y ZYZYZYZl [          [[[m  \   \\\n  ]      ]]]o  ^ !^^^p " #_ $ % & '`a_`a_`a_`aq ( )bcbcbcbcr * +d , - . / 0 1=Given a set of characters and a string, returns true iff the E string contains only characters from the set. A set beginning with  a caret (^%) is treated as a complementary set. 2This function checks for  --token-chars on the command-line. If > found, it validates the argument and returns it, without the < surrounding square brackets. Otherwise, it returns either   / or  0 as explained in  +. DNote: Limitations in the current replace patch file format prevents B tokens and token-char specifiers from containing any whitespace. ddds 3 4e 5f 6efefeft 7 8g 9gggu : ;h <i = >j ? @ Ak B C7genericObliterateCmd is the function that executes the  obliterate and  unpull commands. -The name under which the command is invoked (unpull or  obliterate) $The flags given on the command line )Files given on the command line (unused) D Ehijkhjkihijkv F Gl H Illlw J Ksend patch via email LPOST the patch via HTTP M Nm O P Q R S T U V W X Y Z [ \mmmx ]$A list of all valid preferences for _darcsprefsprefs. (name, one line description) ^ _ `n annny b c d e fo g h i j k l moooz n op pppp{ q rq s tqqq| u vr ws xt yrstrtsrst} z {u |uuu~ } ~  v vvvw xwxwxwx yz{ yz{y{zyz{ | ||| } }}} ~ ~~~  =The commands that darcs knows about (e.g. whatsnew, record), > organized into thematic groups. Note that hidden commands  are also listed here.    @Help on each environment variable in which Darcs is interested. !The rendered form of the data in environment_help. 0This module is responsible for emitting a darcs man-page, a D reference document used widely on Unix-like systems. Manpages are ) primarily used as a quick reference, or  memory jogger , so the / output should be terser than the user manual. CBefore modifying the output, please be sure to read the man(7) and D man-pages(7) manpages, as these respectively describe the relevant  syntax and conventions. (The lines of the manpage to be printed.                                       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLLMNOPQRSTUVWXYZ[\]^_`abcd]eefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~    ! !""""""""""""####### #!#"###$#%#&#'#(#)#*#+#,#-#.#/#0#1#2#3#4#5#6#7#8#9$s$:$;$<%=%>%?%@%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/10202030405060708090:0;0<0=0>0?0@0A0B0C0D0E0F0G0H0I0J0K0L1M1N1O1P1Q1R1S111T1U1V1W1X1Y1Z1[1\1]1^1_2`2a333333b3c3d3e3f3g3h4i4j5k5l5m5k5n5o5p5q5r5s5t5u5v5w5x5y5z5{5|5}5~555555555666666666666666666666777777777777777889999999::::::::::::::::::::::::;;;;;;;;;;;;<=============>>>??@@@AAAAAAAAAAABBBBBBCDDEEEEEEEEF F F G G GGGGGGGGGGGGGGGGGGG G!G"G#G$G%H&H'H(H)H*I+I,I-I.I/I0I1I2I3I4I5I6I7I8J9J:J;JpJ<J=J>J?J@KAKBKCKDKEKFKGKHKIKJKKKLKMLNLOLPLQLRLSLTLULVLWLXLYLZM[M\M]M^N_N`NaNbNcNdNeNfNgNhNiOjOkOlOmOnOoOpOqPWPUPrPsPRPTPYPZPNPtPuPvPwPxPyPzP{Q|Q}Q|Q~QQ~QQQQQQQQQQQQQQQYQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQRRRRSSSTTTTTTTTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUsUUUUUUUUUUUUUUUUUUUUUUUUU U U U U UUUUUUUUUUUUUUUUUUU U!U"U#U$U%U&U'U(U)U*U+U,U-U.U/U0U1U2U3U4U5U6U7U8U9U:U;U<U=U>U?U@UAUBUCUDUEUFUGVHVIVJVKVLVMVNVLVOVPVQVRVSVTVUVVVWVXVYVZV[V\V]V^V_V`VaVbVcVdVeVfVgVVhViVjVkVlVmVnWoWpWqWrXsXtXuYYvZwZxZyZzZ{[|[}[~[[[[[[[[[[[[[[[[[[[\\\\\\\\\\\\\]]]]]^__`~aabbbbbbcdefgghhiijjkklmnopppqqrsstuuuuvwxyz{|||}~               !" !"#$                           % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < =>?@ABCDEFGHIIJJKLMNNOPQRSTUVWXYZ[\]^_`abcdee fghhijklmnopqrstuvwxyz{|}~  !!!!!!!!!!!!!""""""""""""""""""""""""""""""""""" " " " " "<"=################### #!#"$#$#$$$%$&$'$($)$*$+$,$-$.$/$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+b+z+{+|+}+~++c+++++++++++++,-J-------------------------------------#---------...........////////////////////00233z3{3|3}3333333333333333333333333333334444444444 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 7 !7 "7 #7 $7 %7 &7 '7 (7 ) * + ,8 -8 .8 /8 08 18 28 38 48 58 68 78 78 88 98 :888 ;8 <8 =8 >9 ?9 @: A; B; B; C; C; D; E; F; G; H; I; J; K; L; M; N; O; P;m; Q; R; S; T; U; V; W; X; Y; Z; [; \; ]; ^; _; `< a= b= c= d= e f g= h== i= j@ k@ l@ mA nA nA oA pA qA rA sA tA uA vA wA xA yB zB {B |BB xB }B ~B E E E E E E E E ErE E E E E E E E F F F G G G G G G G G G G G G G G G G G G H K K K L L L L L L L L * * O O O O O O O O O O O O O O O O O O O O O O O O O O O O O OO O O O O P P P P P P P P P P P P P P P P P Q Q Q Q QQ Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q R R R R T T T hT T T T T T T T U U U U U U U U U U U U U U U U U U U U U U U U U U U !U "U #U $U %U &U 'U (U )U *U +U ,U -U .U /UUU 0V 1V 2V 3V 4V 5V 6V 7X 8X 9X :Y ;Y ;Y <Y =Y >Y ?Y @Y AY BY CY DY EY FY GY HY IY JZ KZ LZ MZ NZ 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\ p\ q\ r\ s\ t\ u\ v\ w\ x\ y\ z\ {\ |\ }\ ~\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ ^ ^^ _ _ _ _ _ _ ___ _ _ _ _ _ _ _ _ _ _ ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` a a a a a a a xa a a b b b b b b c c c c d d d d d d e e e e e e e e f f f f f f g g h h h h h h h h h h h i i i i i i j j j k k k k k k l l l l l l l l l l l l l l l l l !m "m #m $m %m &n 'n (n )n *n +n ,n -n .o /o 0o 1o 2p 3p 4p 5p 6p 7p 8q 9q :r ;r <r =r >r ?r @r Ar Br Cs Ds Es Fs Gt Ht It Ju Ku Lu Mu Nu Ou Pu Qu Ru Su Tu Uu Vv Wv Xv Yv Zw [w \w ]w ^w _w `w aw bw cw dw ew fw gw hw iw jw kw w lx mx nx ox px qy ry sy sy ty uy vy wy xy yy zy {y |z }z ~z { { { { | | | | | } } } ~ ~ ~ ~ ~ ~ ~ ~ ~l~ ~ ~ ~ ~ ~ ~    darcs-2.4.4RatifiedByteStringUtils WorkaroundDarcs.Patch.OldDateDarcs.Witnesses.ShowDarcs.Patch.RegCharsEnglishDarcs.SignalHandlerDarcs.Witnesses.SealedDarcs.Patch.FileNameIsoDate DateMatcher Darcs.GlobalDarcs.Patch.ReadMonadsHTTPDarcs.Patch.MatchDataProgressExecPrinter Darcs.BugDarcs.Witnesses.Ordered Darcs.URLDarcs.RepoPath Darcs.Utils Darcs.Compat Darcs.FlagsLcs Darcs.LockDarcs.CheckFileSystemSsh Darcs.Email Crypt.SHA256 CommandLineURLDarcs.ExternalDarcs.ColorPrinterDarcs.Repository.FormatDarcs.Repository.MotdDarcs.RemoteApplyDarcs.IODarcs.Patch.PatchyDarcs.Patch.PermutationsDarcs.Patch.PrimDarcs.FilePathMonadDarcs.SlurpDirectory.InternalSHA1Darcs.Patch.InfoDarcs.PopulationDataDarcs.Patch.CoreDarcs.Patch.ShowDarcs.Patch.CommuteDarcs.Patch.ReadDarcs.Repository.CacheDarcs.Repository.PrefsDarcs.Patch.ApplyDarcs.Patch.ViewingDarcs.Patch.SplitDarcs.Patch.NonDarcs.Patch.Real Darcs.PatchDarcs.HopefullyDarcs.ProgressPatchesDarcs.Patch.SetDarcs.CommandsAuxDarcs.Patch.DependsDarcs.Patch.Bundle Darcs.DiffDarcs.Repository.ApplyPatchesDarcs.Patch.MatchDarcs.ResolutionDarcs.Patch.ChoicesDarcs.Patch.TouchesFilesDarcs.Patch.PropertiesDarcs.Repository.InternalTypesDarcs.Repository.PristineDarcs.Repository.DarcsRepoDarcs.Repository.LowLevelDarcs.Repository.StateDarcs.Repository.HashedIODarcs.Repository.HashedRepoDarcs.Repository.InternalDarcs.Repository.CheckpointDarcs.Repository.MergeDarcs.RepositoryDarcs.ArgumentsDarcs.CommandsDarcs.PrintPatch Darcs.TestDarcs.Commands.AddDarcs.Population Darcs.MatchDarcs.SelectChangesDarcs.Commands.RecordDarcs.Commands.AmendRecordDarcs.Commands.AnnotateDarcs.Commands.ApplyDarcs.Commands.ChangesDarcs.Repository.RepairDarcs.Commands.CheckDarcs.Commands.ConvertDarcs.Commands.DiffDarcs.Commands.DistDarcs.Commands.InitDarcs.Commands.GetDarcs.Commands.GZCRCsDarcs.Commands.MarkConflictsDarcs.Commands.MoveDarcs.Commands.OptimizeDarcs.Commands.PullDarcs.Commands.PushDarcs.Commands.PutDarcs.Commands.RemoveDarcs.Commands.RepairDarcs.Commands.ReplaceDarcs.Commands.UnrevertDarcs.Commands.RevertDarcs.Commands.UnrecordDarcs.Commands.RollbackDarcs.Commands.SendDarcs.Commands.SetPrefDarcs.Commands.ShowAuthorsDarcs.Commands.ShowBugDarcs.Commands.ShowContentsDarcs.Commands.ShowFilesDarcs.Commands.ShowTagsDarcs.Commands.ShowRepoDarcs.Commands.ShowIndexDarcs.Commands.ShowDarcs.Commands.TagDarcs.Commands.TrackDownDarcs.Commands.TransferModeDarcs.Commands.WhatsNewDarcs.TheCommandsDarcs.Commands.HelpDarcs.ArgumentDefaultsDarcs.RunCommandDarcs.SlurpDirectoryVersionbase System.IOreadFileGHC.IO.Handle.Text hGetContentsbytestring-0.9.1.7Data.ByteString intercalatedirectory-1.0.1.1System.DirectorygetCurrentDirectory renameFile unix-2.4.0.2System.Posix.SignalsinstallHandler raiseSignalsigTERMsigPIPEsigINTsigHUPsigALRMsigABRTSignalDefaultIgnoreCatch CatchOnceHandler readUTCDateshowIsoDateTimeShow2show2 showsPrec2Show1show1 showsPrec1showOp2app_precregCharsThisNoun Countablepluralsingular englishNum andClauses orClausesintersperseLast setExecutablestdout_is_a_pipewithSignalsHandledcatchNonSignalcatchInterrupt tryNonSignalwithSignalsBlocked FlippedSealSealed2Sealedsealseal2flipSeal unsafeUnsealunsafeUnflippedseal unsafeUnseal2unsealunsealMliftSMmapSeal mapFlippedunseal2mapSeal2 unsealFlippedFileNamefp2fnfn2fp niceps2fn fn2nicepsfn2psps2fn encode_white decode_whiteown_name superName break_on_dir norm_pathbreakup///movedirfilename MCalendarTimemctYearmctMonthmctDaymctHourmctMinmctSec mctPicosecmctWDaymctYDay mctTZNamemctTZmctIsDSTmctWeek TimeIntervalcleanLocalDate readLocalDate getLocalTz parseDategetIsoDateTimeiso8601_intervaliso8601_durationenglishDateTimeenglishInterval englishLasttoMCalendarTimeunsafeToCalendarTime addToMCalsubtractFromMCal resetCalendar unsetTimeDMparseDateMatcher getMatchersatexit with_atexit setDebugMode whenDebugMode withDebugMode debugMessage debugFail putTimingsetTimingsMode timingsModesetVerboseMode verboseModesetSshControlMasterDisabledsshControlMasterDisabled addCRCWarninggetCRCWarningsresetCRCWarningsdarcsdirunsafeWithInternals readIntPSifHeadThenTail dropSpace breakSpaceis_funkyhashPSsubstrPS breakFirstPS breakLastPSlinesPS unlinesPS gzDecompressisGZFile gzReadFilePS gzWriteFilePSgzWriteFilePSs mmapFilePS fromPS2Hex fromHex2PSbetweenLinesPSbreak_after_nth_newlinebreak_before_nth_newlineParserMwork maybe_work peek_inputlex_char lex_stringlex_eof lex_stringsmy_lex alter_inputparse_strictly parse_lazilyfetchUrlpostUrl request_url wait_next_url PatchMatch PatternMatch patch_match beginTedious endTedious tediousSizeminlist progressListprogressprogressKeepLatest finishedOne finishedOneIOsetProgressModewithoutProgress ExecExceptionRedirectStdoutFileNullAsIs Redirectsexecexec_interactivewithoutNonBlockColorMagentaCyanGreenRedBlue Printers'PrinterscolorP invisiblePhiddenP userchunkPdefP lineColorT lineColorSDocunDoc PrintableBothPSSspacenewlineminusplus backslashlparenrparenparenserrorDoc putDocWith putDocLnWithputDocputDocLn hPutDocWith hPutDocLnWithhPutDoc hPutDocLn renderStringrenderStringWithrenderPS renderPSs renderPSWith renderPSsWithprefixinsert_before_lastline lineColor hiddenPrefix unsafeBothunsafeBothText packedStringunsafePackedString invisiblePS userchunkPS unsafeChartext unsafeText invisibleText hiddenText userchunkblueTextredText greenText magentaTextcyanText colorText wrap_text printablesimplePrinters simplePrinterinvisiblePrinteremptydoc<><+>$$vcatvsephcat_bug_bugDoc _impossible _fromJustRLNilRL:<: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 rootDirectorymakeAbsoluteOrStdioAbsoluteOrStduseAbsoluteOrStdioAbsoluteOrRemoteisRemotesetCurrentDirectorysp2fn showHexLenadd_to_error_locisUnsupportedOperationErrorisHardwareFaultErrorcatchall maybeGetEnv firstJustM firstJustIO clarifyErrorsprettyException prettyError ortryrunning putStrLnError putDocLnErrorwithCurrentDirectory withUMaskaskUserstripCr firstNotBlank formatPath breakCommandnubsort edit_file run_editorenvironmentHelpEditor get_viewerenvironmentHelpPager promptYornpromptCharFancy filterPathsfilterFilePaths canonFilenamemk_stdout_temp maybeRelinksloppy_atomic_create atomic_create CompressionGzipCompression NoCompression DarcsFlagNullFlag JustThisRepoRepairCheckAllowUnrelatedReposNoCacheNoHTTPPipeliningHTTPPipelining ApplyOnDisk StoreInMemoryUMask RunPrehook AskPrehook NoPrehook PrehookCmd RunPosthook AskPosthook NoPosthook PosthookCmd NoPendingPending NoDirectories DirectoriesNoFilesFiles UpgradeFormatOptimizePristineNoLinksRelinkPristineRelinkSiblingNoUpdateWorking PristineNone PristinePlain UseFormat2UseOldFashionedInventoryUseHashedInventoryDontSetScriptsExecutableSetScriptsExecutableDisableNoFancyMoveAdd FancyMoveAdd NoSetDefault SetDefaultDryRunNonForce NonVerifyNonApply UpToPattern AfterPatternSeveralPattern OnePattern ForceReplace XMLOutput DiffFlags FixFilePath EphemeralLazyCompletePartialForwardReverse NonUnifiedUnified NoSummarySummary ExternalMergeDiffCmd InteractivePipe HumanReadableMachineReadableApplyAsReplyNewRepo RemoteRepo WorkRepoUrl WorkRepoDir UnCompress NoCompressCompressPromptForDependenciesDontPromptForDependencies DontGrabDepsDontAllowWindowsReservedAllowWindowsReservedDontAllowCaseOnly AllowCaseOnly SkipBoringBoring SkipConflictsNoAllowConflicts MarkConflictsAllowConflictsPromptLongCommentNoEditLongCommentEditLongCommentToksNoEditDescriptionEditDescription RemoteDarcsNoSSHControlMasterSSHControlMaster VerifySSLVerifyNoHappyForwardingHappyForwardingSignSSLNoSignSignAsSign ComplementUnion Intersection CreatorHashAnyOrder NoLookForAdds LookForAddsDontIgnoreTimes IgnoreTimes NoAskDepsAskDepsDontRestrictPaths RestrictPathsReorder NoRecursive RecursiveAllDistName DontRmLogFile RmLogFileLogFileCountContextUpToTagAfterTagOneTag NumberPatchesPatchIndexRangeMaxCountLastNTagName UpToPatch AfterPatch SeveralPatchOnePatch PatchNameAuthor SendmailCmd InReplyToSubjectOutputAutoNameOutputCcTargetQuietNormalVerbosityVerbose DebugHTTP DebugVerboseDebugTimingsNoLeaveTestDir LeaveTestDirChangesToAllFilesOnlyChangesToFilesTestNoTest ListOptionsHelp compressionwant_external_merge isInteractivemaxCountwillIgnoreTimeswillRemoveLogFile isUnifiedwillStoreInMemorydoHappyForwarding includeBoringdoAllowCaseOnlydoAllowWindowsReserved doReverseshowChangesOnlyToFilesBSTArrayPArrayBArray getChangesshiftBoundariesaLenwithLockwithLockCanFailremoveFileMayNotExistwithTemp withOpenTempwithStdoutTemp tempdir_locenvironmentHelpTmpdirenvironmentHelpKeepTmpdir withPermDir withTempDirwithDelayedDir rm_recursiveworld_readable_temp withNamedTempeditText readBinFilereadDocBinFile appendBinFileappendDocBinFile writeBinFilewriteDocBinFilewriteAtomicFilePSgzWriteAtomicFilePSgzWriteAtomicFilePSsgzWriteDocFile writeToFile appendToFilecan_I_use_mmapSSHCmdSFTPSCPSSHgrabSSHcopySSHcopySSHsrunSSHgetSSHenvironmentHelpSshenvironmentHelpScpenvironmentHelpSshPort formatHeader make_email read_email sha256sumparseCmd addUrlencodedCachableMaxAge UncachablepipeliningEnabledByDefault copyUrlFirstcopyUrlwaitUrlsetHTTPPipelining setDebugHTTPenvironmentHelpProxyenvironmentHelpProxyPassword sendmail_path diff_program darcs_programbackupByRenamingbackupByCopying fetchFilePS gzFetchFilePSremoteDarcsCmd copyFileOrUrlspeculateFileOrUrl copyLocal clonePathsclonePartialsTree cloneTreecloneTreeExcept cloneFile maybeURLCmdcopyFilesOrUrlsexecSSHpipeDoc pipeDocSSH sendEmail generateEmail sendEmailDoc resendEmail execDocPipeexecPipeIgnoreError signStringverifyPSgetTermNColorsviewDoc viewDocWithtraceDoc assertDoc fancyPrinters RepoFormatRF RepoPropertyHashedInventoryDarcs2Darcs1_0identifyRepoFormatwriteRepoFormatcreateRepoFormat writeProblemreadfromAndWritetoProblem readProblem formatHasformatHasTogetherget_motd show_motd remote_applyapply_as runSilently TolerantIO runTolerantlyWriteableDirectorymWithCurrentDirectorymSetFileExecutable mWriteBinFile mWriteFilePS mWriteFilePSsmCreateDirectorymRemoveDirectory mWriteDoc mCreateFile mRemoveFilemRename mModifyFilePSmModifyFilePSsReadableDirectorymDoesDirectoryExistmDoesFileExistmInCurrentDirectorymGetDirectoryContents mReadBinFile mReadFilePS mReadFilePSsInvertinvertidentitysloppyIdentity ReadPatch readPatch' ShowPatch showPatch showNicelyshowContextPatch descriptionsummary writePatch gzWritePatchthingthingsCommutecommutemergelistTouchedFiles hunkMatchesApplyapplyapplyAndTryToFixapplyAndTryToFixFLPatchy mapMaybeSnd toFwdCommute toRevCommutemergeFL commuteRLFL commuteRL commuteFL bracketedFLpeekforinvertFLinvertRL CommuteFn partitionFL partitionRLcommuteWhatWeCanFLcommuteWhatWeCanRLgenCommuteWhatWeCanRL removeCommonremoveFLremoveRLremove_subsequenceFLremove_subsequenceRLhead_permutationsFLheadPermutationsFLhead_permutationsRL selfCommuter commuterIdRLpartitionConflictingFLEffecteffecteffectRLisHunk ConflictState Duplicated ConflictedOkayIsConflictedPrimIsCConflictlistConflictedFilesresolveConflictscommute_no_conflictsconflictedEffect FromPrims fromPrims joinPatches ToFromPrimtoPrimFromPrimfromPrimCommuteFunctionPerhaps SucceededFailedUnknownFileNameFormat NewFormat OldFormat DirPatchTypeAddDirRmDir FilePatchTypeBinary TokReplaceHunkAddFileRmFilePrim ChangePrefIdentitySplitFPDPMove null_patch isNullPatchnullP is_identity isSimilar primIsAddfile primIsAdddir primIsHunk primIsBinary primIsSetprefaddfilermfileadddirrmdirmove changeprefhunk tokreplacebinaryn_fnformatFileNameshowPrim tryToShrinktry_shrinking_inverse canonizeFLsortCoalesceFL is_filepatch subcommutescanonizejointry_tok_internal modernizePrimcommute_no_conflictsFLcommute_no_conflictsRL 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_sizeisFileReallySymlinkdoesFileReallyExistdoesDirectoryReallyExistslurp 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 syncSlurpysha1PS 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 getPopFromNamedNamedPPatchRegremMergerComPPPisMerger merger_undo flattenFLjoin_patchesFL namepatch anonymous infopatchadddepsgetdepspatch2patchinfo patchname patchcontents showPatch_showNamedPrefixtoMaybe elegantMergepublic_unravelunravelmergermangle_unravelledmodernizePatch readPatchreadPrimCacheCaCacheLoc CacheType DirectoryRepo WritableOrNot NotWritableWritable HashedDirHashedInventoriesDirHashedPatchesDirHashedPristineDir hashedDir allHashedDirs unionCaches repo2cache cacheHashokayHashtakeHashfetchFileUsingCachewritable isthisrepohashedFilePath peekInCachespeculateFileUsingCachewriteFileUsingCache cleanCachescleanCachesWithHintFileTypeTextFile BinaryFilewriteDefaultPrefsdarcsdirFilterenvironmentHelpHome getGlobal boringRegexpsboringFileFilterbinariesFileHelpfiletypeFunction addToPreflist getPreflist setPreflist defPrefval getPrefval setPrefval changePrefval defaultreposetDefaultrepo getCaches MarkedUpFileLineMarkNoneAddedRemovedLine RemovedLine AddedLineapplyToFilepaths applyToSlurpyforceReplaceSlurpyforceTokReplaceemptyMarkedupFile markupFile patchChanges applyToPop applyToTree plainSummary xmlSummarySplitter applySplitter canonizeSplit rawSplitter noSplitter primSplitterNonablenonNonPatchNonshowNonsshowNonreadNonsreadNonunNonaddPaddPsaddremNonsremPremPsremremAddPremAddPs*>>**>>>>*prop_adjust_twice RealPatch InvConflictor ConflictorNormal Etacilpud Duplicate is_duplicate is_forwardmergeUnravelled is_consistent prim2real pullCommon RepoPatch PatchInfoAnd Hopefullyinfopiapn2piapatchInfoAndPatch hopefullyconscientiously hopefullyMactually createHashed extractHash unavailable progressFL progressRLprogressRLShowTagsSealedPatchSetPatchSet check_pathsmalicious_patcheshas_malicious_pathget_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_union hash_bundle make_bundle make_bundle2 scan_bundle make_context scan_contexttreeDiffapply_patches_with_feedback apply_patchesMatcherMatchFun make_matcher apply_matcher parseMatch match_pattern match_parserhelpOnMatchersstandard_resolutionexternal_resolutionpatchset_conflict_resolutionsSlotInLastInMiddleInFirst PatchChoices TaggedPatchTagtagtpPatch patchChoicespatchChoicesTpsSubpatchChoicesTpsseparateFirstFromMiddleLastseparateFirstMiddleFromLast getChoices patchSlotforceMatchingFirst forceFirsts forceFirstselectAllMiddlesforceMatchingLast forceLast forceLasts makeUncertainmakeEverythingLater substituteselect_touchingdeselect_not_touchingselect_not_touchingchoose_touching look_touchidentity_commutesinverse_doesnt_commute recommutecommute_inversespatch_and_inverse_commute permutivitypartial_permutivitymerge_arguments_consistentmerge_consistentmerge_either_way merge_commute join_inverses join_commute show_readRepoTypeDarcsRepository RepositoryPristineHashedPristine PlainPristine NoPristine extractCache nopristineidentifyPristineflagsToPristinecreatePristineremovePristine slurpPristine applyPristinecreatePristineFromWorkinggetPristinePoppristineDirectorypristineToFlagStringeasyCreatePristineDirectoryTree'easyCreatePartialsPristineDirectoryTreewrite_and_read_patchwrite_inventorywrite_inventory_and_patchesadd_to_inventoryadd_to_tentative_inventoryadd_to_tentative_pristineremove_from_tentative_inventoryfinalize_tentative_changesfinalize_pristine_changesrevert_tentative_changes copy_patches read_reporead_tentative_repo pendingName read_pendingread_pendingfile readPrimsrestrictSubpathsrestrictBoringunrecordedChanges readRecordedreadUnrecorded readWorkingreadRecordedAndPending readPendingpendingChangesinvalidateIndex readIndexHashedIO applyHashedslurpHashedPristinewriteHashedPristine copyHashedcopyPartialsHashedlistHashedContents clean_hashdirreadHashedPristineRootclean_pristinewrite_tentative_inventory copy_repoapply_to_tentative_pristineslurp_pristine copy_pristinecopy_partials_pristinepris2invslurp_all_but_darcsUpdatePristineDontUpdatePristine MakeChangesDontMakeChangesRIO unsafeUnRIOrIO getRepositorymaybeIdentifyRepositoryidentifyDarcs1RepositoryidentifyRepositoryForamInRepositoryamNotInRepositoryfindRepository slurp_pendingslurp_recordedslurp_recorded_and_unrecordedmake_new_pending makePatchLazyprefsUrl unrevertUrlapplyToWorkingannounce_merge_conflictscheck_unrecorded_conflictstentativelyAddPatchtentativelyAddPatch_applyToTentativePristinetentativelyAddToPendingsetTentativePendingtentativelyRemovePatchestentativelyReplacePatchesfinalizeRepositoryChanges testTentative testRecordedrevertRepositoryChangespatchSetToPatches withGutsOfwithRepositorywithRepositoryDirectory$- withRepoLockwithRepoReadLockoptimizeInventorycleanRepositorycreatePristineDirectoryTree#createPartialsPristineDirectoryTree withRecordedgetMarkedupFilesetScriptsExecutableget_checkpointget_checkpoint_by_defaultidentify_checkpointwrite_checkpoint_patchtentativelyMergePatches_tentativelyMergePatchesconsiderMergeToWorkingcreateRepositorycopyRepositorycopy_oldrepo_patches writePatchSetpatchSetToRepositorycheckUnrelatedReposadd_to_pendingreplacePristine DarcsOptionDarcsMultipleChoiceOptionDarcsNoArgOptionDarcsOptAbsPathOptionDarcsAbsPathOrStdOptionDarcsAbsPathOptionDarcsArgOptionisinareinoptionFromDarcsoptionfixFilePathOrStdfixUrl fixSubPaths areFileArgs listOptions flagToStringhelpdisable anyVerbosityworkingRepoDirpossiblyRemoteRepoDir getRepourl remoteRepopatchnameOption sendToContextmatchOneContextmatchOnematchOneNontag matchSeveral matchRangematchSeveralOrRangematchSeveralOrLast matchMaxcount getContextnotesttest leaveTestDir testByDefault ignoretimes lookforadds fancyMoveAddaskdepsaskLongCommentlogfile rmlogfileauthorfromOptfileHelpAuthorenvironmentHelpEmail getAuthor getEasyAuthor nocompressuncompressNocompressunifiedunidiff diffCmdFlag storeInMemorytargetccSendccApplygetCcsubject getSubject inReplyTo getInReplyTooutputoutputAutoNameeditDescriptiondistnameOption recursiveinventoryChoicesgetInventoryChoices upgradeFormat xmloutput creatorhashsignapplyashappyForwarding setDefaultverifyreponamedepsSeltokenspartial partialCheck forceReplacereplyapplyConflictOptionspullConflictOptionsuseExternalMerge dryRunNoxmldryRun showFriendlyprintDryRunMessageAndExit noskipBoringallowProblematicFilenames diffflags changesFormatchangesReverse onlyToFiles humanReadableallInteractiveallPipeInteractivepipeInteractiverepoCombinator listFileslistUnregisteredFileslistRegisteredFiles optionsLatexsetScriptsExecutableOptionrelinkrelinkPristinesiblingflagsToSiblingsnolinksreorderPatches sendmailCmdenvironmentHelpSendmailgetSendmailCmdfiles directoriespendingnullFlag definePatches defineChanges posthookCmdposthookPromptgetPosthookCmd prehookCmd prehookPrompt getPrehookCmdnetworkOptionsnoCacheoptimizePristine umaskOption restrictPathsallowUnrelatedRepos justThisRepo checkOrRepairpatchSelectFlag CommandArgsSuperCommandSubSuperCommandOnly CommandOnly DarcsCommand SuperCommandcommandSubCommands commandName commandHelpcommandDescriptioncommandExtraArgscommandExtraArgHelpcommandCommand commandPrereqcommandGetArgPossibilitiescommandArgdefaultscommandBasicOptionscommandAdvancedOptionsCommandControl GroupName HiddenCommand CommandDataextractCommandscommandAlloptionscommandOptions nodefaultsgetSubcommands commandAlias commandStubusagesubusage chompNewlinegetCommandMiniHelpgetCommandHelpdisambiguateCommands putVerboseputInfo putWarningabortRun printFriendly printPatchprintPatchPagercontextualPrintPatchget_test run_posthook run_prehook expandDirs getRepoPopgetRepoPopVersion lookup_poplookup_creation_popmodified_to_xmlInclusiveOrExclusive Exclusive InclusivehaveNonrangeMatchhavePatchsetMatchgetNonrangeMatchgetPartialNonrangeMatch firstMatch getFirstMatchgetPartialFirstMatch secondMatchgetPartialSecondMatchcheckMatchSyntaxnonrangeMatchermatchAPatchread matchAPatch matchPatchgetOnePatchsetmatchFirstPatchsetmatchSecondPatchset matchExistsapplyInvToMatcherwith_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_repofilterOutConflictsrecordcommit fileExistsgetDategetLog amendrecordannotate createdAsXmlchangeslogRepositoryConsistency BrokenPatchesBrokenPristineRepositoryConsistentreplayRepository checkIndexcheckconvert diffCommanddist initialize initializeCmdgetclone doCRCWarningsgzcrcs markconflictsresolvemvoptimizepullpushputremovermunaddrepair repairCmdreplaceunrevert writeUnrevertrevertunrecordgetLastPatchesunpull obliteraterollbacksendsetpref showAuthorsshowBug showContents showFilestoListManifest manifestCmdshowTagsshowRepo showIndexshowPristineCmd showCommandquerylist trackdown transferModewhatsnewcommandControlListhelpCmdlistAvailableCommands printVersionenvironmentHelpget_default_flagsrun_the_commandreadDatecaseChar parsec-3.0.1Text.Parsec.Charchar caseStringstringmanyNmanyNtoM date_time cvs_date_time old_date_timeiso8601_date_time iso8601_date iso8601_timeoptchainn_digits two_digits four_digits my_spacesday_nameyear month_num intToMonth month_namedayhourminutesecondzone nullCalendar&&&|||GHC.Num-GHC.Real^GHC.Base. unescapeCharsnormalRegChars Data.List intersperseSignalException resethandlerih catchSignaljust_usererrorsseriouslyUnsafeUnsealseriouslyUnsafeUnseal2FNencodeordrepath drop_dotdot breakFirst breakLastold-time-1.0.0.5 System.Time CalendarTime Data.MaybeNothing englishDate englishTime englishAgoenglishDuration theBeginningaddToCalsubtractFromCaladdDiff multiplyDiff nullMCalendar copyCalendar withinDay dateRange cDateRangewithinsamePartialDate tryMatchersnowCRCWarningListatexit_actions _debugMode _timingsMode _verboseMode_sshControlMasterDisabled_crcWarningList conv_from_hex conv_to_hexhas_funky_char isSpaceWord8 firstnonspace firstspacehashunlinesData.ByteString.Internal ByteStringhGetLittleEndIntLMSMheaders requestedUrlgetProxy ProgressDatasofarlatesttotalhandleProgresshandleMoreProgress printProgressmyput simpleput _progressData progressIOprogressKeepLatestIOputDebug _progressModemkhPutCrupdateProgressDatasetProgressDatagetProgressDatagetProgressLastwhenProgressModewithProgressMode _dev_null withExit127DocumentStringEmptyStprinterscurrent_prefixspace_p newline_phPrintPrintableshPrintPrintable renderWith init_statemkColorPrintableinvisiblePrintablehiddenPrintableuserchunkPrintablesimplePrinters'BugStuff_bugLocCharLiketoCharfromCharRmtPAbsPAPStdAP/- simpleClean takeDirectory pathToPosix norm_slashes reset_umask set_umaskisUnsupportedOperationErrorTypeisHardwareFaultErrorTypefmap get_editorGHC.IOFilePathc_atomic_create maybe_relink c_mkstemp mkstemp_corelastWord getBoolFlagVSTArrayMapArrayHArray dropStartdropEndgetSlice getChanges'markColldiffArrcmpseqfindDiagfindOne findSnake findOneRev findSnakeRev nextUnchangedskipOneUnChangednextUnchangedN nextChanged prevUnchangedinitVinitVRev initVChangedinitHinitMinitPaLenM convertPatch getInsert getDelete createPatchcreatePskipChangedRev WithDirKindDelayedTempPermgetlockcatchNonExistence releaseLocktakeLocktakeFilegetCurrentDirectorySansDarcswithDircan_I_remove_open_files+can_I_remove_directories_holding_open_files ConnectionCinpouterrdebsshConnectionswithSSHConnectionseverSSHConnection cleanrepourl cleanrepodir sshStdErrMode getSSHOnlyhasSSHControlMasterhasSSHControlMasterIOlaunchSSHControlMasterexitSSHControlMastercontrolMasterPathline_max qline_maxfold_and_encodeqEncodeencoded_word_startencoded_word_end q_encode_charqpencodeqpdecodedecodec_sha256FTable commandlinearg unquotedArg quotedArg quoteContent formatRedirformatescape consumeAll separator expandFormat urlEncodecurl_enable_debug curl_last_urlcurl_wait_next_urlcurl_request_urlPriorityLowHighQUrlState inProgress waitToStart pipeLength randomJunk UrlRequesturlfilecachablepriority notifyVarreadQinsertQpushQdeleteQelemQemptyQnullQ maxPipeLengthurlNotificationsurlChan urlThreadcheckWaitToStartcopyUrlWithPriority waitNextUrldbg minCachable cachableToIntbackupBy clonePathclonePartialTree cloneSubTreespeculateRemote copyRemotecopyRemoteNormal copyLocals copyRemotes stringToInt mgetRemotescopyRemotesNormal doWithPatches have_sendmail execSendmail execPSPipesignPGPsignSSL verifyGPG verifySSLpipeDocToPagerPolicypoColorpoEscape poLineColor poAltColor poIsprintpo8bitpoNoEscXpoEscX poTrailingpoCRpoSpacedollarcr getPolicylineColorTranslineColorSuffix colorPrinteruserchunkPrinter escapePrinter no_escapeisPrintableAscii quoteChar mark_escapecolor make_color' make_color set_color make_asciiart reset_color with_color make_bold make_invertdfparseRepoFormatdefaultRepoFormatisKnownknownPropertiesjustsOrNothingrp2psapply_via_sudoapply_via_local apply_via_url apply_via_sshapply_via_ssh_and_sudo applyoptsSilentIOSIOTIO TolerantMonadwarningrunIOrunTMbackupfloatFnpeekforw peekforPS partitionFL' partitionRL'SimpleSDPSFPevalargs showAddFile showRmFileshowMoveshowChangePref showAddDir showRmDirshowHunkshowTok showBinary break_every showSplit commute_split mapPrimFLtoSimple fromSimple fromSimplestry_harder_to_shrinktry_to_shrink2 shrink_a_bittry_one comparePrimsort_coalesceFL2push_coalesce_patchis_in_directory toPerhapsclever_commutespeedy_commuteeverything_else_commute is_superdircommute_filedircoalescecommute_filepatches commuteFPcoalesceFilePrim commuteHunk coalesceHunk canonizeHunk make_holeytry_tok_replace merge_orderseq_FL compare_FLcommute_no_conflictsRLFLFPM SlurpyMapslurpy_to_pairpair_to_slurpymapSlurpyNamesmksm write_filetry_write_fileensureDirectoriessmDoesDirectoryExistsmDoesFileExist smInSlurpy fromSlurpFilemodifySubSlurpymodifyFileSlurpy insertSlurpy smReadFilePS smReadFilePSssmGetDirContents smWriteFilePSsmCreateDirectorysmRenamesmRemove smRemoveFilesmRemoveDirectoryslurp_fn slurp_setnameundef_time_sizegenslurpunsafeInterleaveMapIOgenslurp_helper not_hidden\\\co_slurp_helperget_slurp_context_genericget_slurp_contextget_slurp_context_maybeJust slurp_moveaddslurp slurp_adddirtolower findSubSlurpyslurp_hasdir_privateget_path_list'unsyncedSlurpySizeslurp_sync_sizeXYZABCDEfiddle_endiannesssha1_step_1_2_pad_length size_splitsha1_step_3_initsha1_step_4_mainsha1_step_5_display showAsHex_pi_date_pi_name _pi_author_pi_logRPIignored ignore_junk readPatchDate friendly_dcomments_as_xml escapeXML strReplacemidtrunc fix_up_fname munge_charlines_starting_with_ending_with htmlPatchInfo patch_link mail_linkshowPop showMerger MaybeCommutemerger_commutecommute_no_mergeris_filepatch_mergercommute_recursive_mergerother_commute_recursive_mergerassert actual_mergemerge_patch_after_patchesmerge_patches_after_patchunwind true_unwindreconcile_unwindings put_before get_supersis_superpatch_ofheadFLglump09 only_hunks apply_hunksget_oldget_a_filename get_hunks_old get_hunks_new get_hunkline make_chunkmangle_unravelled_hunksnew_ur eq_patches read_patches readSplit readFileNamereadHunk skip_newlinereadTok readBinary readAddFile readRmFilereadMovereadChangePref readAddDir readRmDir readMerger readNamed read_dependsread_pislines_starting_with FromWhereAnywhere LocalOnlyOrOnlySpeculate OnlySpeculate ActuallyCopy checkHashcopyFileUsingCachefetchFileUsingCachePrivate createCachewritecleanCachesWithHint' defaultBoring isDarcsdirglobalPrefsDirglobalCacheDir noncomments getPrefLinesactualBoringFileFilter normalizedefaultBinariesprefsDirectorywithPrefsDirectory getPreffileapplyFL applyHunksapplyHunkLines markup_prim markup_hunk markup_tok applyToPop'breakPpnamehashed-storage-0.4.13Storage.Hashed.TreeTreeSummOpSummModSummRmSummAdd SummDetailSummNoneSummMvSummFile SummRmDir SummAddDir SummChunkshowContextSeriesshowContextHunkcoolContextHunk genSummarysummChunkToXMLsummChunkToLine dropDotSlashwithEditedHead doPrimSplit remNonHelperCommonRLCommon sealed2nonmergeConflictingNons join_effectsassertConsistentmergeAfterConflictinggeteffxx2nons xx2patches allNormaleveryone_conflicts merge_witheqSetremove1 invertNon nonTouchesnonHunkMatchestoNonsinitsFLfromNons pullInContextfilterConflictsFLall_conflicts_withconflicts_with depends_upon+++ swapMerge invertCommuteinvertCommuteNC pullCommonRL RepoPatchBasePIAPSimpleHopefully UnavailableActually Data.EitherEitherHashedfmapHhopefully2eithermalicious_pathsis_malicious_pathis_explicitly_relative MissingPatchget_common_and_uncommon_errwith_partial_intersectiongcaulastRLdropWhileNilRL gcau_simple get_extramissingPatchError get_extra_old-:- merge_setsfilter_gpg_dashesunavailable_patchespi_unavailable get_patches parse_patches silly_lexMATCHtrivialsubmatchtable trystringmatchcreateMatchHelperprimitiveMatchersquotedmymatch exactmatch authormatch hunkmatch hashmatch datematch touchmatch merge_listexternally_resolve_filerunPCs PatchChoicePCTPTGnegTag invertTagliftTP compareTags invertSeqpull_firsts_middlespull_only_firsts pull_firsts pull_lasts pull_first setSimplysm2ids reverse_pcfix pristineNamereallyIdentifyPristinehashedPristineDirectory write_patchformat_inventorysimply_write_inventory repairableread_repo_privateread_patch_idsread_checkpoints remove_from_checkpoint_inventoryStorage.Hashed.DarcsreadDarcsHashedStorage.Hashed.Plain readPlainTreeObjTypeDFRWROHashDir permissionscachecompressrootHash readHashFile identifyThing makeThingrmThingreadhashreadTediousHashwithhinhsafeInterleavereadroot writerootgetagetanysetareaddirdirwritedir writeHashFileslhrootdircopyPartialHashed&simple_remove_from_tentative_inventorywrite_either_inventorywrite_inventory_privatewrite_patch_if_necesarypihashread_inventory_privateread_inventoriesreadHashapply_pristineslurp_pristine_privateinv2pris pristine_name skip_pristinepristine_name_length HashedVsOldHvsOoldhashed>>>=>>>returnRisRightcurrentDirIsRepositoryseekReposift_for_pendingreadTentativeRepohandle_pend_for_add is_simple crude_siftdecideHashedOrNormalprependtentativelyRemovePatches_finalize_pendingtestAnygetUMaskremove_from_unrevert_context withTentative do_mark_all $fMonadRIOget_check_internal format_invRepoSortOldPorNP IsPartial NotPartial copyInventorycopyPartialRepositorycopyFullRepositoryfetch_patches_if_necessarypristineFromWorking FlagContent StringContentAbsoluteOrStdContentAbsoluteContent NoContent getContentgetContentStringisa isAnAbsoluteisAnAbsoluteOrStd concatOptionsextractFixPath fixFilePathpartitionEithermatchTo matchFrom__tag__tags__patch __patches__match __matches__last__index __indexes __compress__dontCompress __uncompress __partial__lazy __ephemeral __completepipe interactive all_patches latexHelp optionLatexshowShortOptionsshowLongOptionssetEnvCautiously remote_darcs numberStringextractHiddenCommands usageHelper padSpacesgetCommandHelpCoreextract amVerboseamQuiet get_posthook get_prehookrun_hook AddMessages msg_skipping msg_addingmsg_ismsg_areaddDescriptionaddHelpaddHelp'addCmdaddpnormalMessagesdryRunMessages addHelp'' expandOne getParents getParentinitPopapplyPatchSetPopapplyPatchesPop lookup_pop'lookup_creation_pop' MatchMonadwithRecordedMatchwithRecordedMatchOnlySomeFiles applyInvRLgetNonrangeMatchSgetFirstMatchSgetMatchPatterntagmatch strictJust firstMatchernonrangeMatcherIsTagfirstMatcherIsTag secondMatchersecondMatcherIsTaghasLastn hasIndexRangedropn findAPatchGHC.ErrerrormatchAPatchsetgetMatchingTag maybeReadFile getMatcherSgetTagS applyInvpsafetakeGHC.ListtakewithRecordedMatchIOwithRecordedMatchSmartwithRecordedMatchOnlySomeSmartKeyPresskpkpHelpWithPatchesToFiles WithPatchesMatchCriterion WhichChanges FirstReversedFirst LastReversedLasttriviswantedwascwasc_with_any_selected_changeshelpForkeysForwspfr canonizeWithwith_any_selected_changes_lastwith_any_selected_changes_first(with_any_selected_changes_first_reversed'with_any_selected_changes_last_reversedpatches_to_consider_first'patches_to_consider_last'#patches_to_consider_first_reversed'"patches_to_consider_last_reversed'selected_patches_lastselected_patches_firstselected_patches_last_reversedselected_patches_first_reversed text_select text_viewtentatively_text_selectdecided get_default tp_patchesPName NoPatchNamePriorPatchName FlagPatchNamerecordDescription recordHelpcommitDescription commitHelp recordCmdcheckNameIsNotOptiondoRecorddoActualRecord recordHelp'eodaskAboutDependsonlySuccessfulExits recordHelp''amendrecordDescriptionamendrecordHelpamendrecordCmdaddChangesToPatchupdatePatchHeaderwarnIfHijackinghasEditMetadatafixpannotateDescription annotateHelp annotateCmd annotatePopindentp2s p2xmlOpen p2xmlClosep2xml annotateFileannotateMarkedup textMarkedupputLineputAnn xmlMarkedupfindCreationPatchinfofindHashapplyDescription applyHelp stdindefaultapplyCmd applyItNowcannotApplyMissingcannotApplyPartialRepogetPatchBundle applyHelp'getFromredirectOutputsendSanitizedEmail sanitizeFilethrowIOforwardingMessageconsiderForwarding fromStartchangesDescription changesHelp changesCmd changesHelp'getChangesInfofilterPatchesByNames changelog changesHelp''changesContext replaceInFL applyAndFixcheck_uniqueness has_duplicatereplayRepository'cleanupRepositoryReplaycheckDescription checkHelpcheckCmdcheck'convertDescription convertHelp convertHelp' convertCmd makeRepoNamemodifyRepoNamediffDescriptiondiffHelp getDiffOptshasDiffCmdFlaggetDiffCmdAndArgsdiffCmd getDiffInfodistDescriptiondistHelpdistCmddoDist guessRepoName getDistNameinitializeDescriptioninitializeHelpgetDescriptiongetHelpgetCmdcopyRepoAndGoToChosenVersion getHelpTag contextExistsgoToChosenVersiongetHelpPartialcopyRepoOldFashionedgzcrcsDescription gzcrcsHelp formatTextpara gzcrcsCmdgzcrcs'markconflictsDescriptionmarkconflictsHelpmarkconflictsCmdmoveDescriptionmoveHelpmoveCmd moveToDircheck_new_and_old_filenames moveFileOrDiroptimizeDescription optimizeHelp optimizeCmdisTagoptimizeHelpInventorydoOptimizeInventoryoptimizeHelpCompressionoptimizeCompressionoptimizeHelpRelinkdoOptimizePristinedoRelinkmaybeRelinkFilesmaybeRelinkFile doReorder chooseOrderoptimizeUpgradeFormatactuallyUpgradeFormatpullDescriptionpullHelppullCmd revertable readRepospushDescriptionpushHelppushCmd prepareBundleprePushChatter bundlePatcheswantSigncheckOptionsSanityputDescriptionputHelpputCmd remoteInitremoveDescription removeHelp removeCmdmakeRemovePatch rmDescriptionrmHelprepairDescription repairHelpreplaceDescription replaceHelp replaceCmd floatSubPathmaybeApplyToTree defaultToks filenameToksisTok chooseToksunrevertDescription unrevertHelp unrevertCmdunrevertPatchBundlerevertDescription revertHelp revertCmdunrecordDescription unrecordHelp unrecordCmdunpullDescription unpullHelp unpullCmdobliterateDescriptionobliterateHelp obliterateCmdgenericObliterateCmd matchingHeadpresentParticiplerollbackDescription rollbackHelp rollbackCmd rollItBackNowWhatToDoSendMailPostsendDescriptionsendHelpsendCmd sendToThem patchDesc sendBundlecleanupwriteBundleToFile safeFileChar patchFilenamedecideOnBehavior getOutput getTargetscollectTargets getFileopt validPrefData validPrefssetprefDescription setprefHelp setprefCmd ParsedLineSpellingshowAuthorsDescriptionshowAuthorsHelp authorsCmdcanonizeAuthorcompiledAuthorSpellingssentence addresslineregexp canonicalNameshowBugDescription showBugHelp showBugCmdshowContentsDescriptionshowContentsHelp getMatchershowContentsCmdshowFilesDescription showFilesHelp toListFiles filesDirsslurp_revisionshowTagsDescription showTagsHelptagsCmdPutInfoShowInfo showRepoHelpshowRepoDescriptionrepoCmd showInfoXMLsafeTag showInfoUsractuallyShowRepo showRepoTypeshowRepoFormat showRepoAux showRepoPrefs showRepoMOTD numPatchesdump showIndexCmdshowDescriptionshowHelp showPristine showManifesttagDescriptiontagHelptagCmdtrackdownDescription trackdownHelp trackdownCmd trackNexttransferModeDescriptiontransferModeHelptransferModeCmdtransferreadfilewhatsnewDescription whatsnewHelp announceFiles whatsnewCmdversioncontexthelpDescriptionhelpHelphelpOnEnvironment manpageLinesget_flags_from find_optiondefault_content run_commandconsider_runningadd_command_defaultsget_options_optionsrun_raw_supercommand