addfile ./changelog addfile ./darcs-2.0.0-2.0.2.diff addfile ./series hunk ./changelog 1 +darcs (1) unstable; urgency=low + + * Patch from 2.0.0 to 2.0.2. Hopefully this will cure + infinite(?) loop caused by darcs whatsnew -s -l --boring. + + -- David Fox Fri, 25 Jul 2008 13:28:35 +0000 + hunk ./darcs-2.0.0-2.0.2.diff 1 +diff -ruN darcs-2.0.0/aclocal.m4 darcs-2.0.2/aclocal.m4 +--- darcs-2.0.0/aclocal.m4 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/aclocal.m4 2008-06-24 01:23:13.000000000 +0000 +@@ -1,4 +1,4 @@ +-# Copyright 2005 David Roundy ++# Copyright 2005,2008 David Roundy + + # Redistribution and use in source and binary forms of this file, with or + # without modification, are permitted provided that redistributions of +@@ -9,11 +9,20 @@ + # Compile and link using ghc. + AC_DEFUN([TRY_COMPILE_GHC],[ + cat << \EOF > conftest.hs +--- [#]line __oline__ "configure" + [$1] ++-- this file generated by TRY-COMPILE-GHC + EOF + rm -f Main.hi Main.o +-if AC_TRY_COMMAND($GHC $GHCFLAGS -o conftest conftest.hs) && test -s conftest ++# Convert LDFLAGS and LIBS to the format GHC wants them in ++GHCLDFLAGS="" ++for f in $LDFLAGS ; do ++ GHCLDFLAGS="$GHCLDFLAGS -optl$f" ++done ++GHCLIBS="" ++for l in $LIBS ; do ++ GHCLIBS="$GHCLIBS -optl$l" ++done ++if AC_TRY_COMMAND($GHC $GHCFLAGS $GHCLDFLAGS -o conftest conftest.hs $GHCLIBS) && test -s conftest + then + dnl Don't remove the temporary files here, so they can be examined. + ifelse([$2], , :, [$2]) +@@ -62,6 +71,35 @@ + ]) + ]) + ++# GHC_COMPILE_FFI(IMPORT, TYPE, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) ++# ----------- ++# Compile and link ffi code using ghc. ++AC_DEFUN([GHC_COMPILE_FFI],[ ++TRY_COMPILE_GHC([{-# OPTIONS -fffi -Werror #-} ++module Main where ++ ++foreign import ccall unsafe "$1" fun :: $2 ++ ++main = fun `seq` putStrLn "hello world" ++],[$3],[$4])]) ++ ++# GHC_CHECK_LIBRARY(LIBRARY, IMPORT, TYPE, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) ++# ----------- ++# Compile and link with C library using ghc. ++AC_DEFUN([GHC_CHECK_LIBRARY],[ ++AC_MSG_CHECKING([for library $1]) ++GHC_COMPILE_FFI([$2], [$3], [AC_MSG_RESULT([yes]) ++$4], [ ++ check_library_save_LIBS=$LIBS ++ LIBS="$LIBS -l$1" ++ GHC_COMPILE_FFI([$2], [$3], [AC_MSG_RESULT([in -l$1]) ++ $4],[ ++ LIBS=$check_library_save_LIBS ++ AC_MSG_RESULT(no; and not with -l$1 either) ++ $5]) ++ ]) ++]) ++ + # INIT_WORKAROUND + # --------------- + # Initialize src/Workaround.hs module. +@@ -384,7 +422,7 @@ + # Figure out how to make a file executable (or test if it is). + + AC_DEFUN([WORKAROUND_executable],[ +- EXPORT_WORKAROUND([ isExecutable, setExecutable, ]) ++ EXPORT_WORKAROUND([ setExecutable, ]) + GHC_CHECK_MODULE(System.Posix.Files( fileMode, getFileStatus, setFileMode, setFileCreationMask ), + unix, getFileStatus "", + IMPORT_WORKAROUND([ +@@ -394,10 +432,7 @@ + groupReadMode, groupWriteMode, groupExecuteMode, + otherReadMode, otherWriteMode, otherExecuteMode) + import Data.Bits ( (.&.), (.|.), complement ) +-isExecutable :: FilePath -> IO Bool +-isExecutable f = do st <- getFileStatus f +- let x = fileMode st .&. ownerExecuteMode +- return $ x /= nullFileMode ++ + setExecutable :: FilePath -> Bool -> IO () + setExecutable f ex = + do st <- getFileStatus f +@@ -414,8 +449,6 @@ + setFileMode f total + ]), + CODE_WORKAROUND([ +-isExecutable :: FilePath -> IO Bool +-isExecutable _ = return False + setExecutable :: FilePath -> Bool -> IO () + setExecutable _ _ = return () + ]) +diff -ruN darcs-2.0.0/AUTHORS darcs-2.0.2/AUTHORS +--- darcs-2.0.0/AUTHORS 2008-04-07 15:08:48.000000000 +0000 ++++ darcs-2.0.2/AUTHORS 2008-06-24 01:23:36.000000000 +0000 +@@ -13,33 +13,37 @@ + Juliusz Chroboczek + Will + Tomasz Zielonka +-Peter Simons + Jason Dagit ++Peter Simons + Samuel Tardieu + Florian Weimer + Dave Love ++Nicolas Pouillard + Peter Strand + Benedikt Schmidt ++Gwern Branwen + Ganesh Sittampalam ++Dmitry Kurochkin + Erik Schnetter +-Nicolas Pouillard + Kevin Quick + Zachary P. Landau + Esa Ilari Vuokko +-Dmitry Kurochkin ++Karel Gardas + Nigel Rowe + Wim Lewis + Taral ++Bryce Wilcox-O'Hearn + Andres Loeh +-Karel Gardas ++Pekka Pessi + Mirian Crzig Lennox + Jan-Benedict Glaw +-Bryce Wilcox-O'Hearn + Andrew Pimlott + Edwin Thomson + Ralph Corderoy ++Lele Gaifax + Jim Marshall + Anthony Towns ++Reinier Lamers + Marnix Klooster + Josef Svenningsson + Thomas Zander +@@ -47,9 +51,9 @@ + Vadim Zaliva + Simon Marlow + Trent W. Buck ++Simon Michael + Michael G Schwern + Isaac Jones +-Simon Michael + Kannan Goundan + Era Eriksson + Bill Trost +@@ -64,31 +68,32 @@ + Shae Erisson + Peter Maxwell + Martin Bays +-Lele Gaifax + Kirill Smelkov + John Meacham + Joeri van Ruth + Jim Radford + Jan Braun + Daniel Bünzli +-tux_rocker@reinier.de + Yuval Kogman + Vladimir Vysotsky + Vaclav Haisman + Tuukka Hastrup + Thomas Schwinge + Thomas L. Bevan ++Spencer Janssen + Randy Roesler + Peter Stuifzand + Peter Hercek + Misha Aizatulin ++Michael De La Rue + Marco Tulio Gontijo e Silva + Lode Leroy ++Lennart Kolmodin + Georg Neis + Gabriel Ebner + Don Stewart ++Christopher Lane Hinson + Adam Megacz +-me@mornfall.net + Victor Hugo Borja Rodriguez + Tristan Seligmann + Tobias Gruetzmacher +@@ -99,16 +104,16 @@ + Sean Robinson + Samuel Bronson + Richard Smith ++Peter Rockai + Peter Prohaska +-Pekka Pessi + Nimrod A. Abing + Nils Decker + Michal Sojka ++Matyas Janos + Matt Kraai + Matt Brubeck + Manuel M T Chakravarty + Magnus Jonsson +-Lennart Kolmodin + Kim Hansen + Joshua J. Berry + Jonathon Mah +@@ -118,9 +123,9 @@ + Jens Petersson + Jan Scheffczyk + Henning Glawe +-Gwern Branwen + Guillaume Outters + Frank Ruell ++Ferenc Wagner + Eric Gaudet + Don Bindner + Daniel Gorin +@@ -131,6 +136,8 @@ + Christian Egli + Carlos Phillips + Brian Alliet ++Bertram Felgenhauer ++Benjamin Franksen + Andrew L Johnson + Andrew J. Kroll + Andrea Rossato +diff -ruN darcs-2.0.0/autoconf.mk.in darcs-2.0.2/autoconf.mk.in +--- darcs-2.0.0/autoconf.mk.in 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/autoconf.mk.in 2008-06-24 01:23:13.000000000 +0000 +@@ -20,9 +20,11 @@ + CPPFLAGS := @CPPFLAGS@ @DEFS@ + CFLAGS := @CFLAGS@ + OPTCCFLAGS := $(addprefix -optc,$(CFLAGS) $(CPPFLAGS)) $(addprefix -opta,$(CFLAGS)) +-LDFLAGS := @LDFLAGS@ @LIBS@ ++LDFLAGS := @LDFLAGS@ + OPTLLDFLAGS := $(addprefix -optl,$(LDFLAGS)) +-GHCFLAGS := -cpp @GHCFLAGS@ @CPPFLAGS@ @DEFS@ ++LIBS := @LIBS@ ++OPTLLIBS := $(filter-out -%,$(LIBS)) $(addprefix -optl,$(filter -%,$(LIBS))) ++GHCFLAGS := @GHCFLAGS@ @CPPFLAGS@ @DEFS@ + USE_GNULIBSHA1 := @USE_GNULIBSHA1@ + HAVE_HTTP := @HAVE_HTTP@ + HAVE_CURSES := @HAVE_CURSES@ +@@ -42,31 +44,32 @@ + MAKEMANUAL := @MAKEMANUAL@ + PREPROCHTML := @PREPROCHTML@ + MAKENSIS := @MAKENSIS@ +-GHC_LIBDIR := @GHC_LIBDIR@ ++HADDOCK_VERSION := @HADDOCK_VERSION@ + + all : config @TARGETS@ microbench + + install: all @INSTALLWHAT@ + +-ifeq ('@I_AM_IN_REPO@', '1') +-release/STATE src/ThisVersion.lhs: _darcs/hashed_inventory src/ThisVersion.lhs.in \ +- release/determine_release_state.pl ++ifeq ('@I_AM_IN_REPO@', 'yes') ++release/STATE src/ThisVersion.lhs doc/index.html: _darcs/hashed_inventory src/ThisVersion.lhs.in \ ++ release/determine_release_state.pl doc/index.html.in + perl release/determine_release_state.pl $(DARCS_VERSION) > release/STATE + src/Context.hs: _darcs/hashed_inventory stringify config.command + PATH=".:$$PATH" darcs changes --context | cat config.command - \ +- | ./stringify Context context > \$@ ++ | ./stringify Context context > $@ + else ++src/ThisVersion.lhs doc/index.html: release/STATE src/ThisVersion.lhs.in \ ++ release/determine_release_state.pl doc/index.html.in ++ perl release/determine_release_state.pl $(DARCS_VERSION) + release/STATE: +- if test ! -f release/STATE then; echo -n unknown > release/STATE; fi +-src/ThisVersion.lhs: src/ThisVersion.lhs.in config.status +- sh config.status ++ echo -n $(DARCS_VERSION) '(unknown)' > $@ + src/Context.hs: stringify +- test -f \$@ || echo unknown | ./stringify Context context > \$@ ++ test -f $@ || echo unknown | ./stringify Context context > $@ + endif + + darcs-stable.tar.gz: dist + ln -sf "darcs-$(DARCS_VERSION).tar.gz" $@ +-.PHONY: release/STATE darcs-stable.tar.gz ++.PHONY: darcs-stable.tar.gz + + .SUFFIXES: + +@@ -81,7 +84,9 @@ + + %.o : %.lhs + $(ANNOUNCE_GHC) $(call ghcflags_fancy,$@) -c $< +- @touch $*.hi ++ ++# stupid rule to do nothing to make a .hi file from a .o file. ++%.hi : %.o + + %.o : %.hs + $(ANNOUNCE_GHC) $(call ghcflags_fancy,$@) -c $< +@@ -92,11 +97,11 @@ + + % : src/%.lhs + rm -f Main.hi Main.o +- $(ANNOUNCE_GHC) $(GHCFLAGS) $(OPTLLDFLAGS) -o $@ $^ ++ $(ANNOUNCE_GHC) $(GHCFLAGS) $(OPTLLDFLAGS) -o $@ $^ $(OPTLLIBS) + + % : src/%.hs + rm -f Main.hi Main.o +- $(ANNOUNCE_GHC) $(GHCFLAGS) $(OPTLLDFLAGS) -o $@ $^ ++ $(ANNOUNCE_GHC) $(GHCFLAGS) $(OPTLLDFLAGS) -o $@ $^ $(OPTLLIBS) + + %.hs : %.hsc + hsc2hs $< +diff -ruN darcs-2.0.0/bugs/get_to_match.sh darcs-2.0.2/bugs/get_to_match.sh +--- darcs-2.0.0/bugs/get_to_match.sh 1970-01-01 00:00:00.000000000 +0000 ++++ darcs-2.0.2/bugs/get_to_match.sh 2008-06-24 01:23:12.000000000 +0000 +@@ -0,0 +1,36 @@ ++#!/bin/sh ++ ++# Issue885: Regression: "darcs get --to-match" does not work anymore under 2.0 ++ ++set -ev ++ ++## I would use the builtin !, but that has the wrong semantics. ++not () { "$@" && exit 1 || :; } ++ ++rm -rf temp1 ++mkdir temp1 ++cd temp1 ++darcs init ++echo first > a ++darcs add a ++darcs record -am 'first' ++firsthash=`darcs changes --xml | grep 'hash=' | sed -e "s/.*hash='//" -e "s/'>//"` ++echo second > b ++darcs add b ++darcs record -am 'second' ++ ++# Pulling that patch works ok ++cd .. ++rm -rf temp2 ++mkdir temp2 ++cd temp2 ++darcs init ++echo darcs pull -v -a --match "hash $firsthash" ../temp1 ++darcs pull -v -a --match "hash $firsthash" ../temp1 ++ ++# Getting up-to that patch does not ++cd .. ++rm -rf temp3 ++echo darcs get -v --to-match "hash $firsthash" temp1 temp3 ++darcs get -v --to-match "hash $firsthash" temp1 temp3 ++ +diff -ruN darcs-2.0.0/bugs/hidden-conflict.sh darcs-2.0.2/bugs/hidden-conflict.sh +--- darcs-2.0.0/bugs/hidden-conflict.sh 1970-01-01 00:00:00.000000000 +0000 ++++ darcs-2.0.2/bugs/hidden-conflict.sh 2008-06-24 01:23:12.000000000 +0000 +@@ -0,0 +1,32 @@ ++#!/bin/sh ++ ++set -ev ++ ++rm -rf temp1 temp2 ++mkdir temp1 ++cd temp1 ++darcs init ++echo first > a ++darcs add a ++darcs record -am 'first' ++cd .. ++darcs get temp1 temp2 ++ ++cd temp1 ++echo second > a ++darcs record -am 'first to second' ++echo first > a ++darcs record -am 'second back to first' ++cd .. ++ ++cd temp2 ++echo third > a ++darcs record -am 'first to third' ++cd .. ++ ++cd temp1 ++darcs pull -a ../temp2 | grep conflict ++grep third a ++cd .. ++ ++rm -rf temp1 temp2 +diff -ruN darcs-2.0.0/bugs/issue525.sh darcs-2.0.2/bugs/issue525.sh +--- darcs-2.0.0/bugs/issue525.sh 1970-01-01 00:00:00.000000000 +0000 ++++ darcs-2.0.2/bugs/issue525.sh 2008-06-24 01:23:12.000000000 +0000 +@@ -0,0 +1,24 @@ ++#!/bin/sh ++ ++set -ev ++ ++## I would use the builtin !, but that has the wrong semantics. ++not () { "$@" && exit 1 || :; } ++ ++rm -rf temp1 ++mkdir temp1 ++cd temp1 ++darcs init ++echo first > a ++darcs add a ++darcs record -am 'first' ++echo replace first with something else > a ++darcs record -am 'mistake' ++echo first > a ++echo on second thought >> a ++echo ya | darcs amend-record -a ++darcs changes --last=1 -v > output ++cat output ++not grep first output ++cd .. ++rm -rf temp1 +diff -ruN darcs-2.0.0/bugs/pending-look-for-adds.sh darcs-2.0.2/bugs/pending-look-for-adds.sh +--- darcs-2.0.0/bugs/pending-look-for-adds.sh 1970-01-01 00:00:00.000000000 +0000 ++++ darcs-2.0.2/bugs/pending-look-for-adds.sh 2008-06-24 01:23:12.000000000 +0000 +@@ -0,0 +1,11 @@ ++#!/bin/sh ++set -ve ++rm -rf temp1 ++mkdir temp1 ++cd temp1 ++darcs init ++darcs setpref boringfile .boring ++echo bar > foo ++echo yyd | darcs record --look-for-adds -mP1 ++darcs whatsnew -s ++test -z "`darcs whatsnew -s`" +diff -ruN darcs-2.0.0/bugs/replace-in-moved.sh darcs-2.0.2/bugs/replace-in-moved.sh +--- darcs-2.0.0/bugs/replace-in-moved.sh 1970-01-01 00:00:00.000000000 +0000 ++++ darcs-2.0.2/bugs/replace-in-moved.sh 2008-06-24 01:23:12.000000000 +0000 +@@ -0,0 +1,51 @@ ++#!/usr/bin/env bash ++ ++# Issue 864 ++ ++# darcs mv file1 file2 ++# edit file2 ++# darcs replace fails if new token includes some existing edits ++ ++# Regression in darcs2 - it works in darcs1 1.0.9 ++ ++set -ev ++ ++rm -rf temp ++mkdir temp ++cd temp ++darcs init ++cat < file1 ++aa ++bb ++cc ++aa ++bb ++cc ++EOF ++darcs add file1 ++darcs record -a -m "0" --author X ++ ++ed file1 <&1 | ++tee /dev/tty | ++grep -q 'Skipping file' ++exit=$? ++ ++cd .. && rm -rf temp ++ ++exit $exit +\ No newline at end of file +diff -ruN darcs-2.0.0/bugs/whatsnew.pl darcs-2.0.2/bugs/whatsnew.pl +--- darcs-2.0.0/bugs/whatsnew.pl 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/bugs/whatsnew.pl 1970-01-01 00:00:00.000000000 +0000 +@@ -1,30 +0,0 @@ +-#!/usr/bin/env perl +- +-# For issue390: darcs whatsnew somefile" lstats every file in the working copy and pristine/ directory +- +-use lib 'lib/perl', '../tests/lib/perl'; +-use Test::More 'no_plan'; +-use Shell::Command; +-use Test::Darcs; +-use Shell::Command; +-use File::Slurp; +-use strict; +-use warnings; +- +-init_tmp_repo(); +- +-touch "file1" ; +-touch "file2"; +-darcs "add file1 file2"; +-darcs 'record -am "test"'; +- +-SKIP: { +- my $file = `which strace`; +- chomp $file; +- skip "strace not found", 2 unless (-x $file); +- +- # Expect the following to produce no output: +- my $out = `strace "$DARCS" whatsnew file1 2>&1`; +- like($out, qr/file1/, "A whatsnew for file1 should involve a stat call to file1"); +- unlike($out, qr/file2/, "A whatsnew for file1 should not involve a 'stat' call to file2"); +-} +diff -ruN darcs-2.0.0/bugs/whatsnew.sh darcs-2.0.2/bugs/whatsnew.sh +--- darcs-2.0.0/bugs/whatsnew.sh 1970-01-01 00:00:00.000000000 +0000 ++++ darcs-2.0.2/bugs/whatsnew.sh 2008-06-24 01:23:12.000000000 +0000 +@@ -0,0 +1,34 @@ ++#!/usr/bin/env bash ++ ++# For issue390: darcs whatsnew somefile" lstats every file in the working copy and pristine/ directory ++ ++set -ev ++ ++rm -rf temp ++mkdir temp ++cd temp ++darcs init ++date > file1 ++date > file2 ++darcs add file* ++darcs record -am "test" ++ ++TRACE=`which strace` ++if test -x $TRACE ++then ++ strace darcs whatsnew file1 &> out ++ # we should be accessing file1 ++ grep file1 out ++ # but shouldn't be accessing file2 ++ if grep file2 out ++ then ++ echo A whatsnew for file1 should not involve a 'stat' call to file2 ++ exit 1 ++ else ++ echo Yay. We pass. ++ fi ++else ++ echo skipping test since strace was not found ++fi ++ ++rm -rf temp +diff -ruN darcs-2.0.0/ChangeLog darcs-2.0.2/ChangeLog +--- darcs-2.0.0/ChangeLog 2008-04-07 15:08:48.000000000 +0000 ++++ darcs-2.0.2/ChangeLog 2008-06-24 01:23:36.000000000 +0000 +@@ -1,8 +1,138 @@ + ++darcs (2.0.2) ++ ++ -- David Roundy Sun, 24 Jun 2008 01:20:41 GMT ++ ++darcs (2.0.1) ++ ++ -- David Roundy Sun, 23 Jun 2008 21:47:07 GMT ++ ++ * New Feature: Include patch count in darcs --version, for example, 2.0.1 (+ ++ 32 patches) (David Roundy) ++ ++ * Bug Fix: Avoid an error caused by renaming a file on case-insensitive ++ file-systems (Eric Kow) ++ ++ * Bug Fix and New Feature: Improved XML output (Benjamin Franksen, Lele ++ Gaifax, David Roundy) ++ ++ * User Experience: Always darcs send with context, as if --unified flag were ++ used (David Roundy) ++ ++darcs (2.0.1rc2) ++ ++ -- David Roundy Sun, 13 Jun 2008 01:17:45 GMT ++ ++ * Performance: Faster strings, using Data.Bytestring by default (Gwern ++ Branwen, Eric Kow, Ian Lynagh, David Roundy) ++ ++ * User Experience: On Windows, use MS-DOS 'edit' as a default editor if ++ Emacs and friends are not available (Eric Kow) ++ ++ * Bug Fix: On Windows, notice when external programs fail to launch because ++ they do not exist (Eric Kow) ++ ++ * New Feature: darcs put --no-set-default and --set-default (Nicolas ++ Pouillard) ++ ++darcs (2.0.1rc1) ++ ++ -- David Roundy Sun, 03 Jun 2008 12:43:31 GMT ++ ++ * Bug Fix: Fix tag --checkpoint so that darcs get --partial can avoid ++ fetching all patches (issue873, David Roundy) ++ ++ * User Experience: Better progress reporting [NB: darcs is now compiled with ++ threaded runtime by default] (issue739, David Roundy, Bertram Felgenhauer) ++ ++ * Performance: Reduce memory usage of darcs put (David Roundy) ++ ++ * Bug Fix: Improved date matching (issue793, issue187, Eric Kow) ++ ++ * Performance: Fix an optimization in diff-detection (affects darcs whatsnew ++ and record) (Pekka Pessi) ++ ++ * Quality Assurance: --enable-hpc for checking program coverage (Christopher ++ Lane Hinson) ++ ++ * Bug Fix: Do not rollback if no primitive patches were selected (issue870, ++ Eric Kow) ++ ++ * Bug Fix: Make it possible to --dry-run on repositories we cannot write to ++ (issue855, Eric Kow, David Roundy) ++ ++ * Bug Fix: Avoid a race condition caused by cleaning out the pristine cache ++ (issue687, David Roundy) ++ ++ * User Experience: When pushing, prints a small reminder when the remote ++ repository has patches to pull (Eric Kow, David Roundy) ++ ++ * UI changes: --extended-help is now called --overview, no more ++ --verify-hash, no more send --unified (David Roundy, Eric Kow) ++ ++ * User Experience: Show ssh's stderr output in case it wants to ask the user ++ something (issue845, Eric Kow) ++ ++ * Bug Fix: Improved interaction with pager (David Roundy, Pekka Pessi, Eric ++ Kow) ++ ++ * Bug Fix: darcs send -o - (Pekka Pessi) ++ ++ * Bug Fix: (regression) Re-enable darcs mv as a means of informing darcs ++ about manual renames (issue803, David Roundy) ++ ++ * Bug Fix: Fix bugs related to use of threaded runtime (issue776, David ++ Roundy) ++ ++ * Portability: Respect OS conventions in creation of temporary files (Eric ++ Kow) ++ ++ * New Feature: Check for and repair patches which remove non-empty files ++ (issue815, David Roundy) ++ ++ * Bug Fix: Make get --to-match work with hashed repositories (David Roundy) ++ ++ * Bug Fix: Conflict-handling with darcs-2 semantics (issue817, David Roundy) ++ ++ * Bug Fix: Make --ask-deps ask the right questions (Tommy Pettersson) ++ ++ * User Experience: Improved error messages and warnings (issue245, issue371, ++ Nicolas Pouillard, David Roundy, Eric Kow) ++ ++ * Quality Assurance: Various improvements to documentation (issue76, ++ issue809, Gwern Branwen, Lele Gaifax, Eric Kow, Nicolas Pouillard, David ++ Roundy) ++ ++ * New Feature: darcs trackdown --set-scripts-executable (Reinier Lamers) ++ ++ * Bug Fix: Correct detection of incompatibility with future darcs (issue794, ++ Eric Kow) ++ ++ * User Experience: Make darcs changes --interactive behave more like other ++ interactive commands (Eric Kow) ++ ++ * Performance: Optimized handling of very large files (Gwern Branwen) ++ ++ * New Feature: Colorize added and removed lines, if the environment variable ++ DARCS_DO_COLOR_LINES=True (Nicolas Pouillard) ++ ++ * New Feature: --remote-repodir flag to allow separate default repositories ++ for push, pull and send (issue792, Eric Kow) ++ ++ * Performance: Optimized get --to-match handling for darcs 1 repositories ++ (Reinier Lamers) ++ ++ * Bug Fix: Make changes --repo work when not in a repository (David Roundy) ++ ++ * New Feature: darcs changes --count (David Roundy) ++ + darcs (2.0.0) + + -- David Roundy Sun, 07 Apr 2008 15:06:38 GMT + ++ * Fix silly bug which leads to darcs --version not showing release when it's ++ a released version. (David Roundy) ++ + darcs (2.0.0rc1) + + -- David Roundy Sun, 01 Apr 2008 15:44:11 GMT +@@ -36,21 +166,21 @@ + can now be hosted in a path containing The tilde character. (Zooko, Mark + Stosberg) + ++ * User Experience: Improved and added many debugging, error and progress ++ messages (David Roundy, Mark Stosberg, Eric Kow) ++ + * New Feature: New DARCS_PATCHES, DARCS_FILES and DARCS_PATCHES_XML + environment variables are made available for the posthook system, allowing + for more easier options to to integrate darcs with other systems. (David + Roundy, Mark Stosberg) + +- * Bug Fix: Gzipped files stored in the repo are now handled properly (Zooko, +- David Roundy) +- +- * User Experience: Improved and added many debugging, error and progress +- messages (David Roundy, Mark Stosberg, Eric Kow) +- + * Quality Assurance: Added and updated automated regression tests (Mark + Stosberg, David Roundy, Eric Kow, Trent Buck, Nicolas Pouillard, Dave + Love, Tommy Pettersson) + ++ * Bug Fix: Gzipped files stored in the repo are now handled properly (Zooko, ++ David Roundy) ++ + * Quality Assurance: Various Documentation Improvements (issue347, issue55 + Mark Stosberg, Nicolas Pouillard, Marnix Klooster) + +@@ -153,10 +283,6 @@ + * Added compatibility with ghc 6.4. At this point darcs 2 should work with + any ghc from 6.4 to 6.8.2. + +-darcs (2.0.0pre1) +- +- -- David Roundy Sun, 10 Dec 2007 19:39:43 GMT +- + * Fix bug where parsing of setpref patch called tailPS unnecessarily. (David + Roundy) + +@@ -523,10 +649,6 @@ + + -- Tommy Pettersson Sun, 03 Jun 2007 21:37:06 GMT + +-darcs (1.0.9rc3) +- +- -- Tommy Pettersson Sun, 17 May 2007 09:01:13 GMT +- + * Make shell harness failures fatal in Makefile. (Eric Kow) + + * Bugfix, fix bug where we add a file but not its boring parent directory. +@@ -777,10 +899,6 @@ + users. It can also be used when invoking darcs from a mail reader that + otherwise sets a too restrictive umask. (Issue50, Juliusz Chroboczek) + +-darcs (1.0.8) +- +- -- Tommy Pettersson Sun, 16 Jun 2006 16:02:13 GMT +- + * Only check for ssh control master when it might be used. This suppresses + the annoying "invalid command" error message. (Issue171, Eric Kow) + +@@ -791,18 +909,10 @@ + + -- Tommy Pettersson Sun, 13 May 2006 17:14:38 GMT + +-darcs (1.0.7rc1) +- +- -- Tommy Pettersson Sun, 08 May 2006 10:14:08 GMT +- + * Fixed bug leading to a spurious "darcs failed: resource vanished" error + message when darcs output is piped to a program such as head that then + exits. (Issue160, David Roundy) + +-darcs (1.0.7pre1) +- +- -- Tommy Pettersson Sun, 27 Apr 2006 09:59:05 GMT +- + * New option --diff-command overrides the default value of "diff" when darcs + calls an external program to show differences between versions (Eric Kow). + +@@ -974,10 +1084,6 @@ + + -- Tommy Pettersson Sun, 07 Dec 2005 11:27:30 GMT + +-darcs (1.0.5rc2) +- +- -- Tommy Pettersson Sun, 04 Dec 2005 15:24:16 GMT +- + * Fixes for Windows (Will Glozer). + + * Adapt makefile to work with current ghc 6.4 (Will Glozer). +@@ -987,10 +1093,6 @@ + * Fix apply with --verify for patch bundles signed by GnuPG in Windows (Esa + Ilari Vuokko). + +-darcs (1.0.5rc1) +- +- -- Tommy Pettersson Sun, 25 Nov 2005 19:17:39 GMT +- + * Make patch selection options together with --context work again (Daniel + Bünzli). + +@@ -1025,20 +1127,12 @@ + * Avoid putting a wrongly-named directory in the tarball generated by darcs + dist, if the name we wanted already exists in $TMPDIR. (Simon McVittie) + +-darcs (1.0.4rc2) +- +- -- David Roundy Sun, 06 Nov 2005 12:16:31 GMT +- + * Fixed bug which caused "pull_firsts_middles called badly" errors when + running record with --ask-deps flag. (bug #476, David Roundy) + + * Fixed bug where 'darcs changes --context' created a context that contained + escapes that prevented its use with send. (bug #544, David Roundy) + +-darcs (1.0.4rc1) +- +- -- Tommy Pettersson Sun, 08 Oct 2005 10:16:53 GMT +- + * Make interactive push/pull/send/apply respect the --summary option by + printing each patch as if you had hit 'x'. (David Roundy, bug #512) + +@@ -1067,10 +1161,6 @@ + * Fix error in install target of makefile, which was introduced in + 1.0.4pre3. (Andres Loeh) + +-darcs (1.0.4pre3) +- +- -- David Roundy Sun, 31 Aug 2005 11:54:48 GMT +- + * Fix problem where make install modified the permissions on system + directories. (David Roundy, bug #494) + +diff -ruN darcs-2.0.0/changelog.in/entries/droundy darcs-2.0.2/changelog.in/entries/droundy +--- darcs-2.0.0/changelog.in/entries/droundy 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/changelog.in/entries/droundy 2008-06-24 01:23:13.000000000 +0000 +@@ -10,6 +10,15 @@ + # change. I'm still working out how best to handle this new changelog + # scheme. + ++ignore: name "fix harmless warning" ++ignore: name "haddock" ++ignore: name "bump version" ++ignore: name "changelog entr[yi]" ++ ++match: name "fix bug in determine_release_state.pl." ++> Fix silly bug which leads to darcs --version not showing release ++> when it's a released version. (David Roundy) ++ + match: name "add phone-home capability to darcs on failure" + > When darcs encounters a bug, check version versus central server in order + > to decide whether to recommend that the user report the bug. +diff -ruN darcs-2.0.0/changelog.in/entries/ignored darcs-2.0.2/changelog.in/entries/ignored +--- darcs-2.0.0/changelog.in/entries/ignored 1970-01-01 00:00:00.000000000 +0000 ++++ darcs-2.0.2/changelog.in/entries/ignored 2008-06-24 01:23:13.000000000 +0000 +@@ -0,0 +1,16 @@ ++# Ignoring a patch just means that you won't get any warnings about ++# the patch not being changelogged. If you write a changelog entry for them, ++# they will still appear in the log. ++ ++# patches before darcs 2.0.0 ++ignore: date "before 2008-04-07 15:06:38Z" ++ ++ignore: name "typo" ++ ++ignore: name "Canonize" ++ ++ignore: name "^bump version number" ++ ++ignore: name "configure\.ac" ++ignore: name "aclocal\.m4" ++ignore: name "makefile" +diff -ruN darcs-2.0.0/changelog.in/entries/kowey darcs-2.0.2/changelog.in/entries/kowey +--- darcs-2.0.0/changelog.in/entries/kowey 1970-01-01 00:00:00.000000000 +0000 ++++ darcs-2.0.2/changelog.in/entries/kowey 2008-06-24 01:23:13.000000000 +0000 +@@ -0,0 +1,428 @@ ++# ---------------------------------------------------------------------- ++# ignored ++# ---------------------------------------------------------------------- ++ ++# code quality ++ignore: exact "+strictness comment in FPS.hs" ++ignore: exact "Define unDoc as field of Doc." ++ignore: exact "Extend command_argdefaults to accept [DarcsFlag]." ++ignore: exact "Fix import warnings for Windows." ++ignore: exact "Improve generic rules for English plurals. " ++ignore: exact "Little style change." ++ignore: exact "Make an undefined a bit more informative" ++ignore: exact "Ordered.lhs: explain acronyms" ++ignore: exact "Refactor DateMatcher and add debugging code." ++ignore: exact "Remove unused UnsafeCatch module" ++ignore: exact "Rename ColourPrinter to ColorPrinter." ++ignore: exact "Replace colour by color to uniformise a bit." ++ignore: exact "Return ParseError instead of String in parseDate." ++ignore: exact "Slight tidy up of English module." ++ignore: exact "SlurpDirectory.lhs: remove apparently pointless aliases" ++ignore: exact "Use nilPS wherever possible" ++ignore: exact "add type witness declarations to Resolution" ++ignore: exact "avoid repeatedly checking whether stdout is a terminal." ++ignore: exact "clean up execPipeIgnoreError to use System.Process." ++ignore: exact "clean up genslurp_helper a tad." ++ignore: exact "cleanup in ShowAuthors: \"as\" is a bad variable name, since it's also a haskell keyword." ++ignore: exact "correct mmap type signatures" ++ignore: exact "corrected ratification..." ++ignore: exact "cut commented code (that would no longer compile)." ++ignore: exact "don't inline darcs_version." ++ignore: exact "eliminate duplicate get_remote_repo in favor of list comprehensions." ++ignore: exact "eliminate use of Haskell 98 library modules." ++ignore: exact "eliminate use of Stringalike in ReadMonad and friends." ++ignore: exact "even more stupid debug messages." ++ignore: exact "fix regression introduced by using Data.List.isInfixOf." ++ignore: exact "fix up website for new release." ++ignore: exact "get rid of stupid debug messages." ++ignore: exact "make PatchInfo reading specific to PackedString." ++ignore: exact "prefer catMaybes over list comprehension." ++ignore: exact "ratify Eric's use of readFile." ++ignore: exact "refactor \"_darcs\" to darcsdir variable" ++ignore: exact "remove Stringalike module entirely." ++ignore: exact "remove gitlib.{c,h.in} as it appears to be unused" ++ignore: exact "remove hackish attempt to set GC parameters based on available memory." ++ignore: exact "remove unneeded parens and clean up then/else alignment in Lcs." ++ignore: exact "remove unused compress/uncompress functions." ++ignore: exact "remove unused emptyFileContents." ++ignore: exact "remove unused function ephemeral." ++ignore: exact "remove unused function test_patch." ++ignore: exact "remove unused isExecutable function." ++ignore: exact "replace '{-# OPTIONS' with '{-# OPTIONS_GHC'" ++ignore: exact "simplify ParserM" ++ignore: exact "tiny wibble to make code a little more symmetric." ++ ++# makefile/configure ++ignore: exact "Account for pre-existing api-doc." ++ignore: exact "Create the api-doc dir if it does not exist." ++ignore: exact "Do LDFLAGS conversion without calling out to GHC, avoiding nasty characters in GHC commands" ++ignore: exact "Don't let other configure flags change the type witnesses" ++ignore: exact "Fixed problems with --with-static-libs" ++ignore: exact "Give a clear error message when no suitable haddock is installed" ++ignore: exact "Make curl_multi_timeout check work for static builds." ++ignore: exact "Makefile: prefix -optl only on $(LIBS) that start with '-'" ++ignore: exact "Move curl_multi_timeout check outside of pipelining check." ++ignore: exact "Raise a configure error when no Text.Regex module can be found." ++ignore: exact "Use GHC instead of GCC to check for zlib availability (issue 813)" ++ignore: exact "Use `curl-config --static-libs` when building with static libs." ++ignore: exact "add --with-curl= configure option to be able to choose appropriate curl installation" ++ignore: exact "avoid putting a newline into GHCLIBS and/or GHCLDFLAGS." ++ignore: exact "avoid using \"which\" command, which is buggy on SunOS." ++ignore: exact "bump optimization level up to -O2." ++ignore: exact "change handling of hi files to use silly make rule as ghc docs suggest." ++ignore: exact "configure: more precise error messages about packages." ++ignore: exact "define forM_ since it is absent on GHC 6.4.1" ++ignore: exact "fix OPTLLIBS filtering" ++ignore: exact "fix bug in configure script wrt HTTP package." ++ignore: exact "generalize the testing for external libraries." ++ignore: exact "included files reordering to fix build warning on Solaris" ++ignore: exact "insert stupid debug code into configure script." ++ignore: exact "make darcs build on win32 by conditionally compiling out a few bits that are unused or meaningless on win32" ++ignore: exact "move -cpp option into source files." ++ignore: exact "remove unneeded check for termio.h." ++ignore: exact "remove unneeded redundant adding of -lcurses (done by AC_SEARCH_LIBS)." ++ignore: exact "remove unused GHC_LIBDIR" ++ignore: exact "remove unused Setup.lhs." ++ignore: exact "resolve Issue813: make configure test consult LDFLAGS and LIBS." ++ignore: exact "simplify configure a bit: if we're defining CPP symbols, no need to also use AC_SUBST." ++ignore: exact "stringify.hs: rw to avoid multi-line string literal" ++ignore: exact "we don't need Darcs.Patch.Check for darcs itself." ++ ++# test suite ++ignore: exact "Add (passing) test for issue709." ++ignore: exact "Add a partial test for issue525." ++ignore: exact "Add a test to show a bug with --look-for-adds that corrupt pending." ++ignore: exact "Add failing test for issue870." ++ignore: exact "Add test for issue794." ++ignore: exact "Added bugs/replace-in-moved.sh for bug 864." ++ignore: exact "Added test for issue 538" ++ignore: exact "Added test for issue 803" ++ignore: exact "Check for bash before running shell tests." ++ignore: exact "Demonstrate 'hidden conflicts' bug (old format)." ++ignore: exact "Demonstrate issue885, a regression of \"darcs get --to-match\"" ++ignore: exact "Fix space issue in issue803.sh" ++ignore: exact "Fix test for issue 538" ++ignore: exact "Generalise test for rollback with no changes." ++ignore: exact "Get rid of extra newline in uniqueoptions test." ++ignore: exact "Move issue855 bug to tests." ++ignore: exact "Move repoformat bug to passing tests." ++ignore: exact "Replace presumably non-portable use of fgrep in issue864 bug" ++ignore: exact "Undo overoptimistic move of issue855 bug to tests." ++ignore: exact "add another test for Issue794." ++ignore: exact "add test for darcs show bug." ++ignore: exact "add testsuite workarounds for Solaris `cp' and `test' commands issues" ++ignore: exact "add very simple test for show authors." ++ignore: exact "avoid unnecessary complexity in tests." ++ignore: exact "avoid using \"./editor\" in test, as this syntax fails under windows." ++ignore: exact "clean up after test." ++ignore: exact "clean up before running issue436.sh." ++ignore: exact "de-tapify issue538.sh test." ++ignore: exact "document running a couple of tests." ++ignore: exact "document that we now can just use \"darcs\" in shell tests." ++ignore: exact "don't redirect output of test to file in repository while running --look-for-adds." ++ignore: exact "don't set the IFS variable to null in harness." ++ignore: exact "enable automatic running of additional tests, as Gwern suggested." ++ignore: exact "exempt issue458.sh test from windows." ++ignore: exact "fix URL in network test." ++ignore: exact "fix bug in test when there's a space in test directory." ++ignore: exact "fix pull_many_files.pl test to search for GNU tar first" ++ignore: exact "fix space issue in test." ++ignore: exact "fix test for windows (maybe?)" ++ignore: exact "fix weird bug in harness.sh maybe?" ++ignore: exact "make conflict-fight-failure test a little more legible and verbose." ++ignore: exact "make harness.sh a little more verbose." ++ignore: exact "make issue538 test work with spaces in directories." ++ignore: exact "make pull_compl.sh a bit more verbose." ++ignore: exact "make test suite smarter about cleaning up test directories." ++ignore: exact "mark issue803.sh test as a currently-failing bug." ++ignore: exact "maybe fix windows check in set_scripts_executable.pl?" ++ignore: exact "modernize steve-and-monica test." ++ignore: exact "move threaded and profile tests earlier, and check whether threaded actually works." ++ignore: exact "note that we don't support hard links under windows." ++ignore: exact "remove buggy use of tempdir in pull.pl." ++ignore: exact "remove darcs wrapper from tests." ++ignore: exact "remove recommendation to use TAP output for shell tests." ++ignore: exact "remove unnecessary defaults-setting in pull_compl.sh" ++ignore: exact "reorder test suite around fact that test_unit takes so long." ++ignore: exact "resolve Issue832: quote all instances of \"$DARCS\", \"$ACTUAL_DARCS\", \"$PWD\", and \"$HOME\" in the sh tests and test harness, as well as all other shell variables that get expanded in test scripts (a cursory glance suggested that none of them were actually intended to be split on whitespace and so are probably best quoted)." ++ignore: exact "resolve issue870: it was a bug in the test script." ++ignore: exact "simplify code to avoid having to worry about spaces in test path." ++ignore: exact "simplify init_tmp_repo." ++ignore: exact "simplify pull_compl.sh just a tad." ++ignore: exact "simplify setpref.sh" ++ignore: exact "simplify tests a bit more." ++ignore: exact "simplify uniqueoptions.sh" ++ignore: exact "simplify update_roundup.pl." ++ignore: exact "simplify workaround for broken cp." ++ignore: exact "skip issue538.sh on windows, since I don't know how to run tests" ++ignore: exact "skip uniqueoptions.sh test on windows." ++ignore: exact "slightly-prettier way to avoid using system shell's test function." ++ignore: exact "switch pull_compl.sh test to perl." ++ignore: exact "translate pull.pl into shell." ++ignore: exact "translate whatsnew.pl into shell." ++ignore: exact "try a bit harder to identify windows systems in perl tests." ++ignore: exact "use bash in test." ++ignore: name "perl harness" ++ignore: name "shell_harness" ++ ++# administrative ++ignore: exact "Add 'ignored' changelog entries (no warnings)." ++ignore: exact "Add a list of authors that allow the OpenSSL exception." ++ignore: exact "Add ability to ignore patches for ChangeLog." ++ignore: exact "ChangeLog entries by Eric." ++ignore: exact "Clarify intent of ignored changelog entries." ++ignore: exact "Exceptions to GPL granted as of 2008-06-13 morning." ++ignore: exact "Ignore tags in make_changelog warning about unlogged patches." ++ignore: exact "Resolve issue705: warn about patches which are not changelogged." ++ignore: exact "Resolve issue763: provide logo without 'darcs' text." ++ignore: exact "Support comments on ignored changelog entries." ++ignore: exact "Use changes -s style for unlogged patches (make_changelog)." ++ignore: exact "set prefs again (they got lost on convert)." ++ignore: name "[Mm]ore changelog entries for 2.0.1.$" ++ ++# other ++ignore: exact "Darcs.Repository.Prefs: +boring filters for MS Visual Studio (see -users discussion)" ++ignore: exact "Do not react to darcs help --verbose" ++ignore: exact "English: only use singular for 1 (we have 0 foos, but 1 bar, and 2 quuxes)" ++ignore: exact "Fix pluralization of patches using English module." ++ignore: exact "Prefs.lhs: add cabal intermediates to ignore" ++ignore: exact "Remove unwanted verbosity from pull --xml-output" ++ignore: exact "add a bit more debugging info to repository identification." ++ignore: exact "add new show bug command (hidden) to see what darcs will report if we encounter a bug." ++ignore: exact "consistently indent index.html and make it validate" ++ignore: exact "fix manual bug." ++ignore: exact "fix regression in index.html.in." ++ignore: exact "grammar fix" ++ignore: exact "resolve issue283: Make darcs help consistent with darcs --help." ++ignore: exact "resolve issue786: implement oops command." ++ignore: exact "roll back implementation of joke oops command." ++ignore: exact "update README url links" ++ignore: exact "update darcs repository URL." ++ignore: name "^Prefs\.lhs: ignore" ++ ++# ---------------------------------------------------------------------- ++# bug fixes ++# ---------------------------------------------------------------------- ++ ++match: exact "resolve Issue776: add code to wait for forkIO error-reporting threads to exit." ++> Bug Fix: Fix bugs related to use of threaded runtime (issue776, David Roundy) ++ ++match: exact "add test for --ask-deps" ++match: exact "(re-)add with_selected_changes_reversed to SelectChanges" ++match: exact "bugfix, --ask-deps needs with_selected_changes_reversed to ask the right questions" ++> Bug Fix: Make --ask-deps ask the right questions (Tommy Pettersson) ++ ++match: exact "resolve issue794: don't stop on first repoformat success." ++> Bug Fix: Correct detection of incompatibility with future darcs (issue794, Eric Kow) ++ ++match: exact "resolve Issue803: add files back in that were manually moved on darcs mv." ++> Bug Fix: (regression) Re-enable darcs mv as a means of informing darcs about ++> manual renames (issue803, David Roundy) ++ ++match: exact "Resolve issue855: avoid taking lock if using --dry-run" ++match: exact "resolve issue855: fix bug where we were calling revertRepository when running with --dry-run." ++match: exact "Add a test for issue855 (push --dry-run)" ++match: exact "add some checks that repo isn't modified when --dry-run is used." ++> Bug Fix: Make it possible to --dry-run on repositories we cannot write to ++> (issue855, Eric Kow, David Roundy) ++ ++match: exact "Demonstrate conflict fight bug #817" ++match: exact "resolve Issue817: fix bug in conflict-handling with darcs-2 semantics." ++> Bug Fix: Conflict-handling with darcs-2 semantics (issue817, David Roundy) ++ ++match: exact "Add test for case-insensitive backup bug." ++match: exact "Fix a backup bug on case-insensitive file systems." ++> Bug Fix: Avoid an error caused by renaming a file on ++> case-insensitive file-systems (Eric Kow) ++ ++match: exact "resolve issue385: don't worry if we can't get local changes." ++match: exact "add test for issue385." ++> Bug Fix: Make changes --repo work when not in a repository (David ++> Roundy) ++ ++match: exact "Fix UI bug in rollback." ++> Bug Fix: Do not rollback if no primitive patches were selected (issue870, ++> Eric Kow) ++ ++match: exact "fix issue #918: use simplePrinters for xml output in \"darcs changes\" command" ++match: exact "Honour --xml-output when printing the patches in the \"will do\"/\"would do\" message" ++match: exact "Wrap ShowRepo output within a tag, when asked for XML output" ++match: exact "automatically include --xml support on commands supporting --dry-run." ++> Bug Fix and New Feature: Improved XML output (Benjamin Franksen, Lele Gaifax, David Roundy) ++ ++match: exact "resolve issue770: catch 'does not exist' when running external programs" ++> Bug Fix: On Windows, notice when external programs fail to launch because they do ++> not exist (Eric Kow) ++ ++match: exact "resolve issue687: don't clean out pristine cache except when optimizing." ++> Bug Fix: Avoid a race condition caused by cleaning out the pristine cache ++> (issue687, David Roundy) ++ ++match: exact "only use pager on longer data." ++match: exact "use viewDocWith in printPatchPager and cut view_file function." ++match: exact "make pipeDoc use System.Process." ++match: exact "Added withoutNonBlock to Exec." ++match: exact "Restore creation of temporary file when calling a pager." ++match: exact "Fall back to stdout if viewing a file with a pager fails." ++match: exact "Do pipeDocToPager withoutNonBlock." ++match: exact "pipeDocToPager runs no pager if pager is \"\"." ++> Bug Fix: Improved interaction with pager ++> (David Roundy, Pekka Pessi, Eric Kow) ++ ++match: exact "resolve issue873: always optimize inventory when adding a tag to old-format repositories." ++> Bug Fix: Fix tag --checkpoint so that darcs get --partial can avoid ++> fetching all patches (issue873, David Roundy) ++ ++match: exact "Do not fix DarcsFlag (Output \"-\")." ++> Bug Fix: darcs send -o - (Pekka Pessi) ++ ++match: exact "make patchSetToRepository work on hashed repositories." ++> Bug Fix: Make get --to-match work with hashed repositories (David Roundy) ++ ++# ---------------------------------------------------------------------- ++# performance ++# ---------------------------------------------------------------------- ++ ++match: exact "Resolve issue913: Use Data.Bytestring for IO, not Data.Bytestring.Char8" ++match: exact "rearrange bytestring tests so if it's not present we're quieter." ++match: exact "configure.ac: fix bytestring checking" ++match: name "^FastPackedString\.hs:" ++match: exact "just remove concatLenPS" ++match: exact "fpstring.c: switch a memchr for memrchr" ++> Performance: Faster strings, using Data.Bytestring ++> by default (Gwern Branwen, Eric Kow, Ian Lynagh, David Roundy) ++ ++match: exact "optimized get --to-match handling for darcs 1 repositories" ++> Performance: Optimized get --to-match handling for darcs 1 ++> repositories (Reinier Lamers) ++ ++match: exact "reduce memory use of put" ++> Performance: Reduce memory usage of darcs put (David Roundy) ++ ++match: exact "Diff.lhs: has_bin only inspects first 4096 characters" ++match: exact "Diff.lhs, Prefs.lhs: add docs for 4096 optimization" ++> Performance: Optimized handling of very large files (Gwern Branwen) ++ ++match: exact "getChanges with better shifting of first and last hunk with shiftBoundaries" ++match: exact "making sure hunk is not shifted beyond end of file in shiftBoundaries" ++> Performance: Fix an optimization in diff-detection (affects darcs whatsnew ++> and record) (Pekka Pessi) ++ ++ ++# ---------------------------------------------------------------------- ++# features and ui ++# ---------------------------------------------------------------------- ++ ++match: exact "issue 538: set scripts executable before test if user desires" ++> New Feature: darcs trackdown --set-scripts-executable (Reinier Lamers) ++ ++match: exact "Use System.Directory.getTemporaryDirectory to determine tmp location." ++match: exact "Create temporary files with openBinaryTempFile." ++match: exact "Create temporary files in the current directory." ++> Portability: Respect OS conventions in creation of temporary files (Eric Kow) ++ ++match: exact "Add a --remote-repodir flag (yet unused)." ++match: exact "resolve issue792: Account for --remote-repo in defaultrepo code" ++> New Feature: --remote-repodir flag to allow separate default repositories ++> for push, pull and send (issue792, Eric Kow) ++ ++match: exact "resolve issue783: propose 'edit' as a default Windows editor" ++> User Experience: On Windows, use MS-DOS 'edit' as a default editor ++> if Emacs and friends are not available (Eric Kow) ++ ++match: exact "make darcs send always provide context." ++> User Experience: Always darcs send with context, as if --unified flag were used ++> (David Roundy) ++ ++match: exact "add checks for removal of non-empty files." ++match: exact "add framework for patch-fixing repair." ++match: exact "implement primitive fixing of removal of non-empty files." ++match: exact "resolve Issue815: enable rempair of \"rm\" patches that don't remove file contents." ++match: exact "support patch fixing in PatchInfoAnd." ++match: exact "cause check to fail if there are patches that remove non-empty files." ++match: exact "ignore any errors in clean_pristine." ++> New Feature: Check for and repair patches which remove non-empty files ++> (issue815, David Roundy) ++ ++match: exact "add --count output option to changes." ++> New Feature: darcs changes --count (David Roundy) ++ ++match: exact "simplify determine_release_state.pl." ++match: exact "make determine_release_state.pl use changes --count." ++match: exact "automatically work out the version of the stable release." ++match: exact "fix potential redundancy in version name." ++> New Feature: Include patch count in darcs --version, for ++> example, 2.0.1 (+ 32 patches) (David Roundy) ++ ++match: exact "default to not coloring hunks." ++match: exact "Use the lineColoring to prettify hunks with colors." ++match: exact "Add line coloring support in Printer and ColourPrinter." ++match: exact "Export Printer.()." ++match: exact "Add two colors (cyan and magenta), but not use them yet." ++match: exact "Refactor a little the color handling." ++> New Feature: Colorize added and removed lines, if the ++> environment variable DARCS_DO_COLOR_LINES=True (Nicolas Pouillard) ++ ++match: exact "resolve issue795: Make 'darcs changes -i' behave more like other jobs." ++match: exact "Undo a false refactor in SelectChanges." ++match: exact "Correct changes -i help message." ++match: exact "resolve issue827: correct changes -i behaviour" ++> User Experience: Make darcs changes --interactive behave more like ++> other interactive commands (Eric Kow) ++ ++match: exact "Resolve issue738: When pushing, remind user of patches to pull." ++match: exact "we don't need a reminder when there are no patches to pull." ++> User Experience: When pushing, prints a small reminder when ++> the remote repository has patches to pull (Eric Kow, David Roundy) ++ ++match: exact "darcs put now support --{no-,}set-default." ++> New Feature: darcs put --no-set-default and --set-default (Nicolas ++> Pouillard) ++ ++match: exact "Resolve issue187: Extend partial date matching to hours, minutes, secs." ++match: exact "Remove a timezone-sensitive date matching test." ++match: exact "resolve issue793: fix regression in 'before X' date matching" ++> Bug Fix: Improved date matching (issue793, issue187, Eric Kow) ++ ++match: exact "Resolve issue712: Rename --extended-help to --overview." ++match: exact "remove unneeded --verify-hash flag (we always verify hashes)." ++> UI changes: --extended-help is now called --overview, no more --verify-hash, ++> no more send --unified (David Roundy, Eric Kow) ++ ++match: exact "Resolve issue845: Pass ssh's stderr to our stderr." ++> User Experience: Show ssh's stderr output in case it wants to ask the user ++> something (issue845, Eric Kow) ++ ++match: exact "resolve issue245: more precise 'Bad token spec' error messages." ++match: exact "Issue a warning when using --old-fashioned-inventory with a darcs-2 repository." ++match: exact "give proper error message when slurping fails to identify a file or directory." ++> User Experience: Improved error messages and warnings ++> (issue245, issue371, Nicolas Pouillard, David Roundy, Eric Kow) ++ ++match: exact "resolve Issue739: compile with threaded runtime by default." ++match: exact "don't clear progress messages on stdout if it's not a terminal" ++> User Experience: Better progress reporting [NB: darcs is now compiled with ++> threaded runtime by default] (issue739, David Roundy, Bertram Felgenhauer) ++ ++# ---------------------------------------------------------------------- ++# other ++# ---------------------------------------------------------------------- ++ ++match: exact "Add --enable-hpc to configure." ++match: exact "hpc.README for collecting hpc data. Requires ghc >= 6.8.3, otherwise tests will break." ++> Quality Assurance: --enable-hpc for checking program coverage (Christopher ++> Lane Hinson) ++ ++match: exact "doc updates" ++match: exact "remove git section from building_darcs.tex" ++match: exact "doc: tell users about darcs-2 handling of identical patches." ++match: exact "doc: encourage new users to use --darcs-2 repositories." ++match: exact "resolve issue76: update docs on temp directory creation." ++match: exact "doc: msmtp -t (for multiple recipients)" ++match: exact "doc tweak" ++match: exact "doc: darcs-2 is no longer experimental." ++match: exact "resolve issue809: doc: darcs get is not lazy by default." ++match: exact "Correct how darcs treats identical changes under darcs-2 format" ++> Quality Assurance: Various improvements to documentation ++> (issue76, issue809, Gwern Branwen, Lele Gaifax, Eric Kow, Nicolas Pouillard, ++> David Roundy) +diff -ruN darcs-2.0.0/configure darcs-2.0.2/configure +--- darcs-2.0.0/configure 2008-04-07 15:08:21.000000000 +0000 ++++ darcs-2.0.2/configure 2008-06-24 01:23:14.000000000 +0000 +@@ -1,6 +1,6 @@ + #! /bin/sh + # Guess values for system-dependent variables and create Makefiles. +-# Generated by GNU Autoconf 2.61 for darcs 2.0.0. ++# Generated by GNU Autoconf 2.61 for darcs 2.0.2. + # + # Report bugs to . + # +@@ -574,8 +574,8 @@ + # Identity of this package. + PACKAGE_NAME='darcs' + PACKAGE_TARNAME='darcs' +-PACKAGE_VERSION='2.0.0' +-PACKAGE_STRING='darcs 2.0.0' ++PACKAGE_VERSION='2.0.2' ++PACKAGE_STRING='darcs 2.0.2' + PACKAGE_BUGREPORT='bugs@darcs.net' + + ac_unique_file="src/darcs.lhs" +@@ -652,10 +652,12 @@ + build_alias + host_alias + target_alias +-DARCS + DARCS_VERSION +-DARCS_VERSION_STATE ++DARCS + I_AM_IN_REPO ++INSTALL_PROGRAM ++INSTALL_SCRIPT ++INSTALL_DATA + CC + CFLAGS + LDFLAGS +@@ -664,15 +666,11 @@ + EXEEXT + OBJEXT + CPP +-INSTALL_PROGRAM +-INSTALL_SCRIPT +-INSTALL_DATA + GREP + EGREP + SYS + GHC + GHCFLAGS +-GHC_LIBDIR + HAVE_HTTP + GHC_SEPARATOR + USE_MMAP +@@ -690,14 +688,12 @@ + HAVE_SENDMAIL + HAVE_MAPI + USE_COLOR +-AWK +-HAVE_LIBCURL +-HAVE_LIBWWW + HAVE_CURSES +-HAVE_TERMIO_H + DIFF + MAKENSIS + BIGENDIAN ++HADDOCK ++HADDOCK_VERSION + LIBOBJS + LTLIBOBJS' + ac_subst_files='' +@@ -1212,7 +1208,7 @@ + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +-\`configure' configures darcs 2.0.0 to adapt to many kinds of systems. ++\`configure' configures darcs 2.0.2 to adapt to many kinds of systems. + + Usage: $0 [OPTION]... [VAR=VALUE]... + +@@ -1273,21 +1269,24 @@ + + if test -n "$ac_init_help"; then + case $ac_init_help in +- short | recursive ) echo "Configuration of darcs 2.0.0:";; ++ short | recursive ) echo "Configuration of darcs 2.0.2:";; + esac + cat <<\_ACEOF + + Optional Features: + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] +- --enable-threaded compile with threaded runtime +- --enable-bytestring use bytestring if it is present +- --disable-optimize disable optimization + --enable-profile enable profiling ++ --disable-threaded don't compile with threaded runtime ++ --disable-bytestring do not use bytestring, even if it is present ++ --disable-optimize disable optimization ++ --enable-hpc enable Haskell Program Coverage + --disable-mmap do not use mmap (use this flag if you get bus + errors) + --enable-debug-ps enable PackedString debug mode + --disable-color do not use ansi color escapes ++ --enable-curl-debug enable libcurl debug mode ++ --enable-libwww-debug enable libwww debug mode + --without-curses do not use libcurses + + Optional Packages: +@@ -1297,7 +1296,9 @@ + --with-sendmail=PATHTOSENDMAIL + --with-static-libs link with static versions of libraries + --with-type-witnesses use GADT type witnesses (EXPERIMENTAL!) ++ + --without-libcurl do not use libcurl ++ --with-curl= use curl installed in directory + --with-curl-pipelining use curl pipelining (requires libcurl >= 7.18.0) + --with-libwww use libwww + +@@ -1375,7 +1376,7 @@ + test -n "$ac_init_help" && exit $ac_status + if $ac_init_version; then + cat <<\_ACEOF +-darcs configure 2.0.0 ++darcs configure 2.0.2 + generated by GNU Autoconf 2.61 + + Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +@@ -1389,7 +1390,7 @@ + This file contains any messages produced by compilers while + running configure, to aid debugging if configure makes a mistake. + +-It was created by darcs $as_me 2.0.0, which was ++It was created by darcs $as_me 2.0.2, which was + generated by GNU Autoconf 2.61. Invocation command line was + + $ $0 $@ +@@ -1753,6 +1754,7 @@ + DARCS_VERSION=$PACKAGE_VERSION + + ++ + # Extract the first word of "darcs", so it can be a program name with args. + set dummy darcs; ac_word=$2 + { echo "$as_me:$LINENO: checking for $ac_word" >&5 +@@ -1790,28 +1792,134 @@ + fi + + +-{ echo "$as_me:$LINENO: checking the release state" >&5 +-echo $ECHO_N "checking the release state... $ECHO_C" >&6; } ++{ echo "$as_me:$LINENO: checking if we're in a darcs repository" >&5 ++echo $ECHO_N "checking if we're in a darcs repository... $ECHO_C" >&6; } + if test ! -z "$DARCS" && test -e "_darcs/hashed_inventory"; then +- DARCS_VERSION_STATE=`perl release/determine_release_state.pl $DARCS_VERSION`; +- I_AM_IN_REPO=1 ++ I_AM_IN_REPO=yes + else +- I_AM_IN_REPO=0 +- if test -f "release/STATE"; then +- DARCS_VERSION_STATE=`head -n 1 release/STATE` +- else +- DARCS_VERSION_STATE="unknown" ++ I_AM_IN_REPO=no ++fi ++{ echo "$as_me:$LINENO: result: $I_AM_IN_REPO" >&5 ++echo "${ECHO_T}$I_AM_IN_REPO" >&6; } ++ ++ ++ ++CFLAGS=$CFLAGS ++ ++ ++ ++ ++ac_aux_dir= ++for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do ++ if test -f "$ac_dir/install-sh"; then ++ ac_aux_dir=$ac_dir ++ ac_install_sh="$ac_aux_dir/install-sh -c" ++ break ++ elif test -f "$ac_dir/install.sh"; then ++ ac_aux_dir=$ac_dir ++ ac_install_sh="$ac_aux_dir/install.sh -c" ++ break ++ elif test -f "$ac_dir/shtool"; then ++ ac_aux_dir=$ac_dir ++ ac_install_sh="$ac_aux_dir/shtool install -c" ++ break + fi ++done ++if test -z "$ac_aux_dir"; then ++ { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5 ++echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;} ++ { (exit 1); exit 1; }; } + fi +-{ echo "$as_me:$LINENO: result: $DARCS_VERSION_STATE" >&5 +-echo "${ECHO_T}$DARCS_VERSION_STATE" >&6; } ++ ++# These three variables are undocumented and unsupported, ++# and are intended to be withdrawn in a future Autoconf release. ++# They can cause serious problems if a builder's source tree is in a directory ++# whose full name contains unusual characters. ++ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ++ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ++ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. ++ ++ ++# Find a good install program. We prefer a C program (faster), ++# so one script is as good as another. But avoid the broken or ++# incompatible versions: ++# SysV /etc/install, /usr/sbin/install ++# SunOS /usr/etc/install ++# IRIX /sbin/install ++# AIX /bin/install ++# AmigaOS /C/install, which installs bootblocks on floppy discs ++# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag ++# AFS /usr/afsws/bin/install, which mishandles nonexistent args ++# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" ++# OS/2's system install, which has a completely different semantic ++# ./install, which can be erroneously created by make from ./install.sh. ++{ echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 ++echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; } ++if test -z "$INSTALL"; then ++if test "${ac_cv_path_install+set}" = set; then ++ echo $ECHO_N "(cached) $ECHO_C" >&6 ++else ++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ # Account for people who put trailing slashes in PATH elements. ++case $as_dir/ in ++ ./ | .// | /cC/* | \ ++ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ++ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ ++ /usr/ucb/* ) ;; ++ *) ++ # OSF1 and SCO ODT 3.0 have their own names for install. ++ # Don't use installbsd from OSF since it installs stuff as root ++ # by default. ++ for ac_prog in ginstall scoinst install; do ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then ++ if test $ac_prog = install && ++ grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then ++ # AIX install. It has an incompatible calling convention. ++ : ++ elif test $ac_prog = install && ++ grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then ++ # program-specific install script used by HP pwplus--don't use. ++ : ++ else ++ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" ++ break 3 ++ fi ++ fi ++ done ++ done ++ ;; ++esac ++done ++IFS=$as_save_IFS + + ++fi ++ if test "${ac_cv_path_install+set}" = set; then ++ INSTALL=$ac_cv_path_install ++ else ++ # As a last resort, use the slow shell script. Don't cache a ++ # value for INSTALL within a source directory, because that will ++ # break other packages using the cache if that directory is ++ # removed, or if the value is a relative name. ++ INSTALL=$ac_install_sh ++ fi ++fi ++{ echo "$as_me:$LINENO: result: $INSTALL" >&5 ++echo "${ECHO_T}$INSTALL" >&6; } + ++# Use test -z because SunOS4 sh mishandles braces in ${var-val}. ++# It thinks the first close brace ends the variable substitution. ++test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + ++test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + ++test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +-CFLAGS=$CFLAGS + + + ac_ext=c +@@ -2733,6 +2841,7 @@ + ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' + ac_compiler_gnu=$ac_cv_c_compiler_gnu + ++ + ac_ext=c + ac_cpp='$CPP $CPPFLAGS' + ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +@@ -2964,122 +3073,6 @@ + ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +- +-ac_aux_dir= +-for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do +- if test -f "$ac_dir/install-sh"; then +- ac_aux_dir=$ac_dir +- ac_install_sh="$ac_aux_dir/install-sh -c" +- break +- elif test -f "$ac_dir/install.sh"; then +- ac_aux_dir=$ac_dir +- ac_install_sh="$ac_aux_dir/install.sh -c" +- break +- elif test -f "$ac_dir/shtool"; then +- ac_aux_dir=$ac_dir +- ac_install_sh="$ac_aux_dir/shtool install -c" +- break +- fi +-done +-if test -z "$ac_aux_dir"; then +- { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5 +-echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;} +- { (exit 1); exit 1; }; } +-fi +- +-# These three variables are undocumented and unsupported, +-# and are intended to be withdrawn in a future Autoconf release. +-# They can cause serious problems if a builder's source tree is in a directory +-# whose full name contains unusual characters. +-ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +-ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +-ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. +- +- +-# Find a good install program. We prefer a C program (faster), +-# so one script is as good as another. But avoid the broken or +-# incompatible versions: +-# SysV /etc/install, /usr/sbin/install +-# SunOS /usr/etc/install +-# IRIX /sbin/install +-# AIX /bin/install +-# AmigaOS /C/install, which installs bootblocks on floppy discs +-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +-# AFS /usr/afsws/bin/install, which mishandles nonexistent args +-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +-# OS/2's system install, which has a completely different semantic +-# ./install, which can be erroneously created by make from ./install.sh. +-{ echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 +-echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; } +-if test -z "$INSTALL"; then +-if test "${ac_cv_path_install+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +-for as_dir in $PATH +-do +- IFS=$as_save_IFS +- test -z "$as_dir" && as_dir=. +- # Account for people who put trailing slashes in PATH elements. +-case $as_dir/ in +- ./ | .// | /cC/* | \ +- /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ +- ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ +- /usr/ucb/* ) ;; +- *) +- # OSF1 and SCO ODT 3.0 have their own names for install. +- # Don't use installbsd from OSF since it installs stuff as root +- # by default. +- for ac_prog in ginstall scoinst install; do +- for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then +- if test $ac_prog = install && +- grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then +- # AIX install. It has an incompatible calling convention. +- : +- elif test $ac_prog = install && +- grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then +- # program-specific install script used by HP pwplus--don't use. +- : +- else +- ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" +- break 3 +- fi +- fi +- done +- done +- ;; +-esac +-done +-IFS=$as_save_IFS +- +- +-fi +- if test "${ac_cv_path_install+set}" = set; then +- INSTALL=$ac_cv_path_install +- else +- # As a last resort, use the slow shell script. Don't cache a +- # value for INSTALL within a source directory, because that will +- # break other packages using the cache if that directory is +- # removed, or if the value is a relative name. +- INSTALL=$ac_install_sh +- fi +-fi +-{ echo "$as_me:$LINENO: result: $INSTALL" >&5 +-echo "${ECHO_T}$INSTALL" >&6; } +- +-# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +-# It thinks the first close brace ends the variable substitution. +-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' +- +-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' +- +-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' +- +- +- +- +- + { echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5 + echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; } + if test "${ac_cv_path_GREP+set}" = set; then +@@ -3673,11 +3666,20 @@ + + + cat << \EOF > conftest.hs +--- #line 3676 "configure" + main = putStr "Hello world!\n" ++-- this file generated by TRY-COMPILE-GHC + EOF + rm -f Main.hi Main.o +-if { ac_try='$GHC $GHCFLAGS -o conftest conftest.hs' ++# Convert LDFLAGS and LIBS to the format GHC wants them in ++GHCLDFLAGS="" ++for f in $LDFLAGS ; do ++ GHCLDFLAGS="$GHCLDFLAGS -optl$f" ++done ++GHCLIBS="" ++for l in $LIBS ; do ++ GHCLIBS="$GHCLIBS -optl$l" ++done ++if { ac_try='$GHC $GHCFLAGS $GHCLDFLAGS -o conftest conftest.hs $GHCLIBS' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? +@@ -3695,20 +3697,72 @@ + { (exit 1); exit 1; }; } + fi + +-{ echo "$as_me:$LINENO: checking where GHC keeps its libraries" >&5 +-echo $ECHO_N "checking where GHC keeps its libraries... $ECHO_C" >&6; } +-GHC_LIBDIR=$(${GHC} --print-libdir) +- +-if test -z "$GHC_LIBDIR"; then +- { echo "$as_me:$LINENO: WARNING: Couldn't find GHC library path" >&5 +-echo "$as_me: WARNING: Couldn't find GHC library path" >&2;} ++ ++ ++{ echo "$as_me:$LINENO: checking whether to profile" >&5 ++echo $ECHO_N "checking whether to profile... $ECHO_C" >&6; } ++# Check whether --enable-profile was given. ++if test "${enable_profile+set}" = set; then ++ enableval=$enable_profile; profile=$enableval + else +- { echo "$as_me:$LINENO: result: $GHC_LIBDIR" >&5 +-echo "${ECHO_T}$GHC_LIBDIR" >&6; } ++ profile=no + fi + ++{ echo "$as_me:$LINENO: result: $profile" >&5 ++echo "${ECHO_T}$profile" >&6; } ++ ++if test "$profile" = yes; then ++ GHCFLAGS="$GHCFLAGS -prof -auto-all" ++fi ++ ++{ echo "$as_me:$LINENO: checking whether to use the threaded runtime" >&5 ++echo $ECHO_N "checking whether to use the threaded runtime... $ECHO_C" >&6; } ++# Check whether --enable-threaded was given. ++if test "${enable_threaded+set}" = set; then ++ enableval=$enable_threaded; { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } ++else ++ MYOLDGHCFLAGS=$GHCFLAGS ++ GHCFLAGS="$GHCFLAGS -threaded" ++ ++cat << \EOF > conftest.hs ++main = putStr "Hello world!\n" ++-- this file generated by TRY-COMPILE-GHC ++EOF ++rm -f Main.hi Main.o ++# Convert LDFLAGS and LIBS to the format GHC wants them in ++GHCLDFLAGS="" ++for f in $LDFLAGS ; do ++ GHCLDFLAGS="$GHCLDFLAGS -optl$f" ++done ++GHCLIBS="" ++for l in $LIBS ; do ++ GHCLIBS="$GHCLIBS -optl$l" ++done ++if { ac_try='$GHC $GHCFLAGS $GHCLDFLAGS -o conftest conftest.hs $GHCLIBS' ++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 ++ (eval $ac_try) 2>&5 ++ ac_status=$? ++ echo "$as_me:$LINENO: \$? = $ac_status" >&5 ++ (exit $ac_status); }; } && test -s conftest ++then ++ { echo "$as_me:$LINENO: result: yes" >&5 ++echo "${ECHO_T}yes" >&6; } ++else ++ echo "configure: failed program was:" >&5 ++ cat conftest.hs >&5 ++ echo "end of failed program." >&5 ++ rm -f Main.hi Main.o ++ { echo "$as_me:$LINENO: result: failed, threaded runtime disabled" >&5 ++echo "${ECHO_T}failed, threaded runtime disabled" >&6; } ++ { echo "$as_me:$LINENO: WARNING: Unable to compile with threaded runtime!" >&5 ++echo "$as_me: WARNING: Unable to compile with threaded runtime!" >&2;} ++ GHCFLAGS=$MYOLDGHCFLAGS ++fi ++fi ++ ++ + +- + rm -f src/Workaround.hs.beginning src/Workaround.hs.ending + touch src/Workaround.hs.ending + cat << \EOF > src/Workaround.hs.prefix +@@ -3740,16 +3794,25 @@ + + + cat << \EOF > conftest.hs +--- #line 3743 "configure" + + import GHC.Handle ( openFd ) + import IO ( IOMode(..)) + + main = openFd 1 Nothing "stdout" WriteMode True False + ++-- this file generated by TRY-COMPILE-GHC + EOF + rm -f Main.hi Main.o +-if { ac_try='$GHC $GHCFLAGS -o conftest conftest.hs' ++# Convert LDFLAGS and LIBS to the format GHC wants them in ++GHCLDFLAGS="" ++for f in $LDFLAGS ; do ++ GHCLDFLAGS="$GHCLDFLAGS -optl$f" ++done ++GHCLIBS="" ++for l in $LIBS ; do ++ GHCLIBS="$GHCLIBS -optl$l" ++done ++if { ac_try='$GHC $GHCFLAGS $GHCLDFLAGS -o conftest conftest.hs $GHCLIBS' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? +@@ -3777,16 +3840,25 @@ + + + cat << \EOF > conftest.hs +--- #line 3780 "configure" + + import GHC.Handle ( openFd ) + import IO ( IOMode(..)) + + main = openFd 1 Nothing False "stdout" WriteMode True + ++-- this file generated by TRY-COMPILE-GHC + EOF + rm -f Main.hi Main.o +-if { ac_try='$GHC $GHCFLAGS -o conftest conftest.hs' ++# Convert LDFLAGS and LIBS to the format GHC wants them in ++GHCLDFLAGS="" ++for f in $LDFLAGS ; do ++ GHCLDFLAGS="$GHCLDFLAGS -optl$f" ++done ++GHCLIBS="" ++for l in $LIBS ; do ++ GHCLIBS="$GHCLIBS -optl$l" ++done ++if { ac_try='$GHC $GHCFLAGS $GHCLDFLAGS -o conftest conftest.hs $GHCLIBS' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? +@@ -3828,16 +3900,25 @@ + + + cat << \EOF > conftest.hs +--- #line 3831 "configure" + + import GHC.Handle ( fdToHandle' ) + import IO ( IOMode(..) ) + + main = fdToHandle' 1 Nothing False "stdout" WriteMode True + ++-- this file generated by TRY-COMPILE-GHC + EOF + rm -f Main.hi Main.o +-if { ac_try='$GHC $GHCFLAGS -o conftest conftest.hs' ++# Convert LDFLAGS and LIBS to the format GHC wants them in ++GHCLDFLAGS="" ++for f in $LDFLAGS ; do ++ GHCLDFLAGS="$GHCLDFLAGS -optl$f" ++done ++GHCLIBS="" ++for l in $LIBS ; do ++ GHCLIBS="$GHCLIBS -optl$l" ++done ++if { ac_try='$GHC $GHCFLAGS $GHCLDFLAGS -o conftest conftest.hs $GHCLIBS' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? +@@ -3908,16 +3989,25 @@ + + + cat << \EOF > conftest.hs +--- #line 3911 "configure" + + import GHC.Handle ( fdToHandle' ) + import IO ( IOMode(..) ) + + main = fdToHandle' 1 Nothing False "stdout" WriteMode True + ++-- this file generated by TRY-COMPILE-GHC + EOF + rm -f Main.hi Main.o +-if { ac_try='$GHC $GHCFLAGS -o conftest conftest.hs' ++# Convert LDFLAGS and LIBS to the format GHC wants them in ++GHCLDFLAGS="" ++for f in $LDFLAGS ; do ++ GHCLDFLAGS="$GHCLDFLAGS -optl$f" ++done ++GHCLIBS="" ++for l in $LIBS ; do ++ GHCLIBS="$GHCLIBS -optl$l" ++done ++if { ac_try='$GHC $GHCFLAGS $GHCLDFLAGS -o conftest conftest.hs $GHCLIBS' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? +@@ -3991,16 +4081,25 @@ + + + cat << \EOF > conftest.hs +--- #line 3994 "configure" + + import GHC.Handle ( openFd ) + import IO ( IOMode(..)) + + main = openFd 1 Nothing False "stdout" WriteMode True + ++-- this file generated by TRY-COMPILE-GHC + EOF + rm -f Main.hi Main.o +-if { ac_try='$GHC $GHCFLAGS -o conftest conftest.hs' ++# Convert LDFLAGS and LIBS to the format GHC wants them in ++GHCLDFLAGS="" ++for f in $LDFLAGS ; do ++ GHCLDFLAGS="$GHCLDFLAGS -optl$f" ++done ++GHCLIBS="" ++for l in $LIBS ; do ++ GHCLIBS="$GHCLIBS -optl$l" ++done ++if { ac_try='$GHC $GHCFLAGS $GHCLDFLAGS -o conftest conftest.hs $GHCLIBS' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? +@@ -4042,16 +4141,25 @@ + + + cat << \EOF > conftest.hs +--- #line 4045 "configure" + + import GHC.Handle ( fdToHandle' ) + import IO ( IOMode(..) ) + + main = fdToHandle' 1 Nothing False "stdout" WriteMode True + ++-- this file generated by TRY-COMPILE-GHC + EOF + rm -f Main.hi Main.o +-if { ac_try='$GHC $GHCFLAGS -o conftest conftest.hs' ++# Convert LDFLAGS and LIBS to the format GHC wants them in ++GHCLDFLAGS="" ++for f in $LDFLAGS ; do ++ GHCLDFLAGS="$GHCLDFLAGS -optl$f" ++done ++GHCLIBS="" ++for l in $LIBS ; do ++ GHCLIBS="$GHCLIBS -optl$l" ++done ++if { ac_try='$GHC $GHCFLAGS $GHCLDFLAGS -o conftest conftest.hs $GHCLIBS' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? +@@ -4122,16 +4230,25 @@ + + + cat << \EOF > conftest.hs +--- #line 4125 "configure" + + import GHC.Handle ( fdToHandle' ) + import IO ( IOMode(..) ) + + main = fdToHandle' 1 Nothing False "stdout" WriteMode True + ++-- this file generated by TRY-COMPILE-GHC + EOF + rm -f Main.hi Main.o +-if { ac_try='$GHC $GHCFLAGS -o conftest conftest.hs' ++# Convert LDFLAGS and LIBS to the format GHC wants them in ++GHCLDFLAGS="" ++for f in $LDFLAGS ; do ++ GHCLDFLAGS="$GHCLDFLAGS -optl$f" ++done ++GHCLIBS="" ++for l in $LIBS ; do ++ GHCLIBS="$GHCLIBS -optl$l" ++done ++if { ac_try='$GHC $GHCFLAGS $GHCLDFLAGS -o conftest conftest.hs $GHCLIBS' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? +@@ -4210,14 +4327,23 @@ + + + cat << \EOF > conftest.hs +--- #line 4213 "configure" + import System.Posix.Signals(installHandler, raiseSignal, Handler(..), Signal, + sigINT, sigHUP, sigABRT, sigALRM, sigTERM, sigPIPE,) + main = seq (undefined) (putStr "Hello world.\n") + ++-- this file generated by TRY-COMPILE-GHC + EOF + rm -f Main.hi Main.o +-if { ac_try='$GHC $GHCFLAGS -o conftest conftest.hs' ++# Convert LDFLAGS and LIBS to the format GHC wants them in ++GHCLDFLAGS="" ++for f in $LDFLAGS ; do ++ GHCLDFLAGS="$GHCLDFLAGS -optl$f" ++done ++GHCLIBS="" ++for l in $LIBS ; do ++ GHCLIBS="$GHCLIBS -optl$l" ++done ++if { ac_try='$GHC $GHCFLAGS $GHCLDFLAGS -o conftest conftest.hs $GHCLIBS' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? +@@ -4243,14 +4369,23 @@ + + + cat << \EOF > conftest.hs +--- #line 4246 "configure" + import System.Posix.Signals(installHandler, raiseSignal, Handler(..), Signal, + sigINT, sigHUP, sigABRT, sigALRM, sigTERM, sigPIPE,) + main = seq (undefined) (putStr "Hello world.\n") + ++-- this file generated by TRY-COMPILE-GHC + EOF + rm -f Main.hi Main.o +-if { ac_try='$GHC $GHCFLAGS -o conftest conftest.hs' ++# Convert LDFLAGS and LIBS to the format GHC wants them in ++GHCLDFLAGS="" ++for f in $LDFLAGS ; do ++ GHCLDFLAGS="$GHCLDFLAGS -optl$f" ++done ++GHCLIBS="" ++for l in $LIBS ; do ++ GHCLIBS="$GHCLIBS -optl$l" ++done ++if { ac_try='$GHC $GHCFLAGS $GHCLDFLAGS -o conftest conftest.hs $GHCLIBS' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? +@@ -4282,14 +4417,23 @@ + + + cat << \EOF > conftest.hs +--- #line 4285 "configure" + import Posix(installHandler, raiseSignal, Handler(..), Signal, + sigINT, sigHUP, sigABRT, sigALRM, sigTERM, sigPIPE,) + main = seq (undefined) (putStr "Hello world.\n") + ++-- this file generated by TRY-COMPILE-GHC + EOF + rm -f Main.hi Main.o +-if { ac_try='$GHC $GHCFLAGS -o conftest conftest.hs' ++# Convert LDFLAGS and LIBS to the format GHC wants them in ++GHCLDFLAGS="" ++for f in $LDFLAGS ; do ++ GHCLDFLAGS="$GHCLDFLAGS -optl$f" ++done ++GHCLIBS="" ++for l in $LIBS ; do ++ GHCLIBS="$GHCLIBS -optl$l" ++done ++if { ac_try='$GHC $GHCFLAGS $GHCLDFLAGS -o conftest conftest.hs $GHCLIBS' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? +@@ -4315,14 +4459,23 @@ + + + cat << \EOF > conftest.hs +--- #line 4318 "configure" + import Posix(installHandler, raiseSignal, Handler(..), Signal, + sigINT, sigHUP, sigABRT, sigALRM, sigTERM, sigPIPE,) + main = seq (undefined) (putStr "Hello world.\n") + ++-- this file generated by TRY-COMPILE-GHC + EOF + rm -f Main.hi Main.o +-if { ac_try='$GHC $GHCFLAGS -o conftest conftest.hs' ++# Convert LDFLAGS and LIBS to the format GHC wants them in ++GHCLDFLAGS="" ++for f in $LDFLAGS ; do ++ GHCLDFLAGS="$GHCLDFLAGS -optl$f" ++done ++GHCLIBS="" ++for l in $LIBS ; do ++ GHCLIBS="$GHCLIBS -optl$l" ++done ++if { ac_try='$GHC $GHCFLAGS $GHCLDFLAGS -o conftest conftest.hs $GHCLIBS' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? +@@ -4550,13 +4703,22 @@ + + + cat << \EOF > conftest.hs +--- #line 4553 "configure" + import Text.Regex( mkRegex, matchRegex, Regex ) + main = seq (mkRegex undefined) (putStr "Hello world.\n") + ++-- this file generated by TRY-COMPILE-GHC + EOF + rm -f Main.hi Main.o +-if { ac_try='$GHC $GHCFLAGS -o conftest conftest.hs' ++# Convert LDFLAGS and LIBS to the format GHC wants them in ++GHCLDFLAGS="" ++for f in $LDFLAGS ; do ++ GHCLDFLAGS="$GHCLDFLAGS -optl$f" ++done ++GHCLIBS="" ++for l in $LIBS ; do ++ GHCLIBS="$GHCLIBS -optl$l" ++done ++if { ac_try='$GHC $GHCFLAGS $GHCLDFLAGS -o conftest conftest.hs $GHCLIBS' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? +@@ -4577,13 +4739,22 @@ + + + cat << \EOF > conftest.hs +--- #line 4580 "configure" + import Text.Regex( mkRegex, matchRegex, Regex ) + main = seq (mkRegex undefined) (putStr "Hello world.\n") + ++-- this file generated by TRY-COMPILE-GHC + EOF + rm -f Main.hi Main.o +-if { ac_try='$GHC $GHCFLAGS -o conftest conftest.hs' ++# Convert LDFLAGS and LIBS to the format GHC wants them in ++GHCLDFLAGS="" ++for f in $LDFLAGS ; do ++ GHCLDFLAGS="$GHCLDFLAGS -optl$f" ++done ++GHCLIBS="" ++for l in $LIBS ; do ++ GHCLIBS="$GHCLIBS -optl$l" ++done ++if { ac_try='$GHC $GHCFLAGS $GHCLDFLAGS -o conftest conftest.hs $GHCLIBS' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? +@@ -4603,27 +4774,27 @@ + { echo "$as_me:$LINENO: result: no; and neither in package text" >&5 + echo "${ECHO_T}no; and neither in package text" >&6; } + +-fi +- +- +- +-fi +- +- +- +- + { echo "$as_me:$LINENO: checking for module Text.Regex( mkRegex, matchRegex, Regex )" >&5 + echo $ECHO_N "checking for module Text.Regex( mkRegex, matchRegex, Regex )... $ECHO_C" >&6; } + + + cat << \EOF > conftest.hs +--- #line 4620 "configure" + import Text.Regex( mkRegex, matchRegex, Regex ) + main = seq (mkRegex undefined) (putStr "Hello world.\n") + ++-- this file generated by TRY-COMPILE-GHC + EOF + rm -f Main.hi Main.o +-if { ac_try='$GHC $GHCFLAGS -o conftest conftest.hs' ++# Convert LDFLAGS and LIBS to the format GHC wants them in ++GHCLDFLAGS="" ++for f in $LDFLAGS ; do ++ GHCLDFLAGS="$GHCLDFLAGS -optl$f" ++done ++GHCLIBS="" ++for l in $LIBS ; do ++ GHCLIBS="$GHCLIBS -optl$l" ++done ++if { ac_try='$GHC $GHCFLAGS $GHCLDFLAGS -o conftest conftest.hs $GHCLIBS' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? +@@ -4644,13 +4815,22 @@ + + + cat << \EOF > conftest.hs +--- #line 4647 "configure" + import Text.Regex( mkRegex, matchRegex, Regex ) + main = seq (mkRegex undefined) (putStr "Hello world.\n") + ++-- this file generated by TRY-COMPILE-GHC + EOF + rm -f Main.hi Main.o +-if { ac_try='$GHC $GHCFLAGS -o conftest conftest.hs' ++# Convert LDFLAGS and LIBS to the format GHC wants them in ++GHCLDFLAGS="" ++for f in $LDFLAGS ; do ++ GHCLDFLAGS="$GHCLDFLAGS -optl$f" ++done ++GHCLIBS="" ++for l in $LIBS ; do ++ GHCLIBS="$GHCLIBS -optl$l" ++done ++if { ac_try='$GHC $GHCFLAGS $GHCLDFLAGS -o conftest conftest.hs $GHCLIBS' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? +@@ -4669,6 +4849,18 @@ + GHCFLAGS=$check_module_save_GHCFLAGS + { echo "$as_me:$LINENO: result: no; and neither in package regex-compat" >&5 + echo "${ECHO_T}no; and neither in package regex-compat" >&6; } ++ { { echo "$as_me:$LINENO: error: Cannot find Test.Regex; try installing the package text or regex-compat?" >&5 ++echo "$as_me: error: Cannot find Test.Regex; try installing the package text or regex-compat?" >&2;} ++ { (exit 1); exit 1; }; } ++ ++fi ++ ++ ++ ++fi ++ ++ ++ + + fi + +@@ -4686,13 +4878,22 @@ + + + cat << \EOF > conftest.hs +--- #line 4689 "configure" + import Network.HTTP( urlEncode ) + main = seq (urlEncode undefined) (putStr "Hello world.\n") + ++-- this file generated by TRY-COMPILE-GHC + EOF + rm -f Main.hi Main.o +-if { ac_try='$GHC $GHCFLAGS -o conftest conftest.hs' ++# Convert LDFLAGS and LIBS to the format GHC wants them in ++GHCLDFLAGS="" ++for f in $LDFLAGS ; do ++ GHCLDFLAGS="$GHCLDFLAGS -optl$f" ++done ++GHCLIBS="" ++for l in $LIBS ; do ++ GHCLIBS="$GHCLIBS -optl$l" ++done ++if { ac_try='$GHC $GHCFLAGS $GHCLDFLAGS -o conftest conftest.hs $GHCLIBS' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? +@@ -4702,6 +4903,10 @@ + { echo "$as_me:$LINENO: result: yes" >&5 + echo "${ECHO_T}yes" >&6; } + HAVE_HTTP=True ++ cat >>confdefs.h <<\_ACEOF ++#define HAVE_HTTP 1 ++_ACEOF ++ + else + echo "configure: failed program was:" >&5 + cat conftest.hs >&5 +@@ -4713,13 +4918,22 @@ + + + cat << \EOF > conftest.hs +--- #line 4716 "configure" + import Network.HTTP( urlEncode ) + main = seq (urlEncode undefined) (putStr "Hello world.\n") + ++-- this file generated by TRY-COMPILE-GHC + EOF + rm -f Main.hi Main.o +-if { ac_try='$GHC $GHCFLAGS -o conftest conftest.hs' ++# Convert LDFLAGS and LIBS to the format GHC wants them in ++GHCLDFLAGS="" ++for f in $LDFLAGS ; do ++ GHCLDFLAGS="$GHCLDFLAGS -optl$f" ++done ++GHCLIBS="" ++for l in $LIBS ; do ++ GHCLIBS="$GHCLIBS -optl$l" ++done ++if { ac_try='$GHC $GHCFLAGS $GHCLDFLAGS -o conftest conftest.hs $GHCLIBS' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? +@@ -4729,6 +4943,10 @@ + { echo "$as_me:$LINENO: result: in package HTTP" >&5 + echo "${ECHO_T}in package HTTP" >&6; } + HAVE_HTTP=True ++ cat >>confdefs.h <<\_ACEOF ++#define HAVE_HTTP 1 ++_ACEOF ++ + else + echo "configure: failed program was:" >&5 + cat conftest.hs >&5 +@@ -4757,13 +4975,22 @@ + + + cat << \EOF > conftest.hs +--- #line 4760 "configure" + import Test.QuickCheck( quickCheck ) + main = seq (quickCheck True) (putStr "Hello world.\n") + ++-- this file generated by TRY-COMPILE-GHC + EOF + rm -f Main.hi Main.o +-if { ac_try='$GHC $GHCFLAGS -o conftest conftest.hs' ++# Convert LDFLAGS and LIBS to the format GHC wants them in ++GHCLDFLAGS="" ++for f in $LDFLAGS ; do ++ GHCLDFLAGS="$GHCLDFLAGS -optl$f" ++done ++GHCLIBS="" ++for l in $LIBS ; do ++ GHCLIBS="$GHCLIBS -optl$l" ++done ++if { ac_try='$GHC $GHCFLAGS $GHCLDFLAGS -o conftest conftest.hs $GHCLIBS' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? +@@ -4784,13 +5011,22 @@ + + + cat << \EOF > conftest.hs +--- #line 4787 "configure" + import Test.QuickCheck( quickCheck ) + main = seq (quickCheck True) (putStr "Hello world.\n") + ++-- this file generated by TRY-COMPILE-GHC + EOF + rm -f Main.hi Main.o +-if { ac_try='$GHC $GHCFLAGS -o conftest conftest.hs' ++# Convert LDFLAGS and LIBS to the format GHC wants them in ++GHCLDFLAGS="" ++for f in $LDFLAGS ; do ++ GHCLDFLAGS="$GHCLDFLAGS -optl$f" ++done ++GHCLIBS="" ++for l in $LIBS ; do ++ GHCLIBS="$GHCLIBS -optl$l" ++done ++if { ac_try='$GHC $GHCFLAGS $GHCLDFLAGS -o conftest conftest.hs $GHCLIBS' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? +@@ -4822,30 +5058,27 @@ + + + +-# Check whether --enable-threaded was given. +-if test "${enable_threaded+set}" = set; then +- enableval=$enable_threaded; +- GHCFLAGS="$GHCFLAGS -threaded" +-fi +- +- +- +-# Check whether --enable-bytestring was given. +-if test "${enable_bytestring+set}" = set; then +- enableval=$enable_bytestring; +- + { echo "$as_me:$LINENO: checking for module Data.ByteString.Internal( fromForeignPtr )" >&5 + echo $ECHO_N "checking for module Data.ByteString.Internal( fromForeignPtr )... $ECHO_C" >&6; } + + + cat << \EOF > conftest.hs +--- #line 4842 "configure" + import Data.ByteString.Internal( fromForeignPtr ) +-main = seq (undefined) (putStr "Hello world.\n") ++main = seq (fromForeignPtr) (putStr "Hello world.\n") + ++-- this file generated by TRY-COMPILE-GHC + EOF + rm -f Main.hi Main.o +-if { ac_try='$GHC $GHCFLAGS -o conftest conftest.hs' ++# Convert LDFLAGS and LIBS to the format GHC wants them in ++GHCLDFLAGS="" ++for f in $LDFLAGS ; do ++ GHCLDFLAGS="$GHCLDFLAGS -optl$f" ++done ++GHCLIBS="" ++for l in $LIBS ; do ++ GHCLIBS="$GHCLIBS -optl$l" ++done ++if { ac_try='$GHC $GHCFLAGS $GHCLDFLAGS -o conftest conftest.hs $GHCLIBS' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? +@@ -4854,7 +5087,7 @@ + then + { echo "$as_me:$LINENO: result: yes" >&5 + echo "${ECHO_T}yes" >&6; } +-CPPFLAGS="$CPPFLAGS -DHAVE_BYTESTRING" ++bytestringfound=yes + else + echo "configure: failed program was:" >&5 + cat conftest.hs >&5 +@@ -4866,13 +5099,22 @@ + + + cat << \EOF > conftest.hs +--- #line 4869 "configure" + import Data.ByteString.Internal( fromForeignPtr ) +-main = seq (undefined) (putStr "Hello world.\n") ++main = seq (fromForeignPtr) (putStr "Hello world.\n") + ++-- this file generated by TRY-COMPILE-GHC + EOF + rm -f Main.hi Main.o +-if { ac_try='$GHC $GHCFLAGS -o conftest conftest.hs' ++# Convert LDFLAGS and LIBS to the format GHC wants them in ++GHCLDFLAGS="" ++for f in $LDFLAGS ; do ++ GHCLDFLAGS="$GHCLDFLAGS -optl$f" ++done ++GHCLIBS="" ++for l in $LIBS ; do ++ GHCLIBS="$GHCLIBS -optl$l" ++done ++if { ac_try='$GHC $GHCFLAGS $GHCLDFLAGS -o conftest conftest.hs $GHCLIBS' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? +@@ -4881,7 +5123,7 @@ + then + { echo "$as_me:$LINENO: result: in package bytestring" >&5 + echo "${ECHO_T}in package bytestring" >&6; } +-CPPFLAGS="$CPPFLAGS -DHAVE_BYTESTRING" ++bytestringfound=yes + else + echo "configure: failed program was:" >&5 + cat conftest.hs >&5 +@@ -4891,11 +5133,7 @@ + GHCFLAGS=$check_module_save_GHCFLAGS + { echo "$as_me:$LINENO: result: no; and neither in package bytestring" >&5 + echo "${ECHO_T}no; and neither in package bytestring" >&6; } +- +-fi +- +- +- ++ bytestringfound=no + fi + + +@@ -4904,86 +5142,47 @@ + + + +- +-{ echo "$as_me:$LINENO: checking for module Control.Monad.Error" >&5 +-echo $ECHO_N "checking for module Control.Monad.Error... $ECHO_C" >&6; } +- +- +-cat << \EOF > conftest.hs +--- #line 4913 "configure" +-import Control.Monad.Error +-main = seq (strMsg "foo" :: String) (putStr "Hello world.\n") +- +-EOF +-rm -f Main.hi Main.o +-if { ac_try='$GHC $GHCFLAGS -o conftest conftest.hs' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && test -s conftest +-then +- { echo "$as_me:$LINENO: result: yes" >&5 +-echo "${ECHO_T}yes" >&6; } +- +-else +- echo "configure: failed program was:" >&5 +- cat conftest.hs >&5 +- echo "end of failed program." >&5 +- rm -f Main.hi Main.o +- +- check_module_save_GHCFLAGS=$GHCFLAGS +- GHCFLAGS="$GHCFLAGS -package util" +- +- +-cat << \EOF > conftest.hs +--- #line 4940 "configure" +-import Control.Monad.Error +-main = seq (strMsg "foo" :: String) (putStr "Hello world.\n") +- +-EOF +-rm -f Main.hi Main.o +-if { ac_try='$GHC $GHCFLAGS -o conftest conftest.hs' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && test -s conftest +-then +- { echo "$as_me:$LINENO: result: in package util" >&5 +-echo "${ECHO_T}in package util" >&6; } +- ++if test $bytestringfound = "yes"; then ++ { echo "$as_me:$LINENO: checking whether to use ByteString" >&5 ++echo $ECHO_N "checking whether to use ByteString... $ECHO_C" >&6; } ++ # Check whether --enable-bytestring was given. ++if test "${enable_bytestring+set}" = set; then ++ enableval=$enable_bytestring; bytestring=$enableval + else +- echo "configure: failed program was:" >&5 +- cat conftest.hs >&5 +- echo "end of failed program." >&5 +- rm -f Main.hi Main.o +- +- GHCFLAGS=$check_module_save_GHCFLAGS +- { echo "$as_me:$LINENO: result: no; and neither in package util" >&5 +-echo "${ECHO_T}no; and neither in package util" >&6; } +- ++ bytestring=yes + fi + +- +- ++ { echo "$as_me:$LINENO: result: $bytestring" >&5 ++echo "${ECHO_T}$bytestring" >&6; } ++ # If we aren't instructed to avoid bytestring, and we did successfully find bytestring... ++ if test $bytestring = "yes"; then ++ CPPFLAGS="$CPPFLAGS -DHAVE_BYTESTRING" ++ fi + fi + + + +- + { echo "$as_me:$LINENO: checking for module Control.Monad.Error" >&5 + echo $ECHO_N "checking for module Control.Monad.Error... $ECHO_C" >&6; } + + + cat << \EOF > conftest.hs +--- #line 4980 "configure" + import Control.Monad.Error + main = seq (strMsg "foo" :: String) (putStr "Hello world.\n") + ++-- this file generated by TRY-COMPILE-GHC + EOF + rm -f Main.hi Main.o +-if { ac_try='$GHC $GHCFLAGS -o conftest conftest.hs' ++# Convert LDFLAGS and LIBS to the format GHC wants them in ++GHCLDFLAGS="" ++for f in $LDFLAGS ; do ++ GHCLDFLAGS="$GHCLDFLAGS -optl$f" ++done ++GHCLIBS="" ++for l in $LIBS ; do ++ GHCLIBS="$GHCLIBS -optl$l" ++done ++if { ac_try='$GHC $GHCFLAGS $GHCLDFLAGS -o conftest conftest.hs $GHCLIBS' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? +@@ -5004,13 +5203,22 @@ + + + cat << \EOF > conftest.hs +--- #line 5007 "configure" + import Control.Monad.Error + main = seq (strMsg "foo" :: String) (putStr "Hello world.\n") + ++-- this file generated by TRY-COMPILE-GHC + EOF + rm -f Main.hi Main.o +-if { ac_try='$GHC $GHCFLAGS -o conftest conftest.hs' ++# Convert LDFLAGS and LIBS to the format GHC wants them in ++GHCLDFLAGS="" ++for f in $LDFLAGS ; do ++ GHCLDFLAGS="$GHCLDFLAGS -optl$f" ++done ++GHCLIBS="" ++for l in $LIBS ; do ++ GHCLIBS="$GHCLIBS -optl$l" ++done ++if { ac_try='$GHC $GHCFLAGS $GHCLDFLAGS -o conftest conftest.hs $GHCLIBS' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? +@@ -5048,13 +5256,22 @@ + + + cat << \EOF > conftest.hs +--- #line 5051 "configure" + import Text.ParserCombinators.Parsec + main = seq (errorPos undefined) (putStr "Hello world.\n") + ++-- this file generated by TRY-COMPILE-GHC + EOF + rm -f Main.hi Main.o +-if { ac_try='$GHC $GHCFLAGS -o conftest conftest.hs' ++# Convert LDFLAGS and LIBS to the format GHC wants them in ++GHCLDFLAGS="" ++for f in $LDFLAGS ; do ++ GHCLDFLAGS="$GHCLDFLAGS -optl$f" ++done ++GHCLIBS="" ++for l in $LIBS ; do ++ GHCLIBS="$GHCLIBS -optl$l" ++done ++if { ac_try='$GHC $GHCFLAGS $GHCLDFLAGS -o conftest conftest.hs $GHCLIBS' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? +@@ -5075,13 +5292,22 @@ + + + cat << \EOF > conftest.hs +--- #line 5078 "configure" + import Text.ParserCombinators.Parsec + main = seq (errorPos undefined) (putStr "Hello world.\n") + ++-- this file generated by TRY-COMPILE-GHC + EOF + rm -f Main.hi Main.o +-if { ac_try='$GHC $GHCFLAGS -o conftest conftest.hs' ++# Convert LDFLAGS and LIBS to the format GHC wants them in ++GHCLDFLAGS="" ++for f in $LDFLAGS ; do ++ GHCLDFLAGS="$GHCLDFLAGS -optl$f" ++done ++GHCLIBS="" ++for l in $LIBS ; do ++ GHCLIBS="$GHCLIBS -optl$l" ++done ++if { ac_try='$GHC $GHCFLAGS $GHCLDFLAGS -o conftest conftest.hs $GHCLIBS' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? +@@ -5100,7 +5326,9 @@ + GHCFLAGS=$check_module_save_GHCFLAGS + { echo "$as_me:$LINENO: result: no; and neither in package parsec" >&5 + echo "${ECHO_T}no; and neither in package parsec" >&6; } +- ++ { { echo "$as_me:$LINENO: error: Cannot find Text.ParserCombinators.Parsec; try installing package parsec?" >&5 ++echo "$as_me: error: Cannot find Text.ParserCombinators.Parsec; try installing package parsec?" >&2;} ++ { (exit 1); exit 1; }; } + fi + + +@@ -5117,13 +5345,22 @@ + + + cat << \EOF > conftest.hs +--- #line 5120 "configure" + import Text.Html + main = seq (text "foo") (putStr "Hello world.\n") + ++-- this file generated by TRY-COMPILE-GHC + EOF + rm -f Main.hi Main.o +-if { ac_try='$GHC $GHCFLAGS -o conftest conftest.hs' ++# Convert LDFLAGS and LIBS to the format GHC wants them in ++GHCLDFLAGS="" ++for f in $LDFLAGS ; do ++ GHCLDFLAGS="$GHCLDFLAGS -optl$f" ++done ++GHCLIBS="" ++for l in $LIBS ; do ++ GHCLIBS="$GHCLIBS -optl$l" ++done ++if { ac_try='$GHC $GHCFLAGS $GHCLDFLAGS -o conftest conftest.hs $GHCLIBS' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? +@@ -5144,13 +5381,22 @@ + + + cat << \EOF > conftest.hs +--- #line 5147 "configure" + import Text.Html + main = seq (text "foo") (putStr "Hello world.\n") + ++-- this file generated by TRY-COMPILE-GHC + EOF + rm -f Main.hi Main.o +-if { ac_try='$GHC $GHCFLAGS -o conftest conftest.hs' ++# Convert LDFLAGS and LIBS to the format GHC wants them in ++GHCLDFLAGS="" ++for f in $LDFLAGS ; do ++ GHCLDFLAGS="$GHCLDFLAGS -optl$f" ++done ++GHCLIBS="" ++for l in $LIBS ; do ++ GHCLIBS="$GHCLIBS -optl$l" ++done ++if { ac_try='$GHC $GHCFLAGS $GHCLDFLAGS -o conftest conftest.hs $GHCLIBS' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? +@@ -5188,13 +5434,22 @@ + + + cat << \EOF > conftest.hs +--- #line 5191 "configure" + import Data.Map + main = seq (empty) (putStr "Hello world.\n") + ++-- this file generated by TRY-COMPILE-GHC + EOF + rm -f Main.hi Main.o +-if { ac_try='$GHC $GHCFLAGS -o conftest conftest.hs' ++# Convert LDFLAGS and LIBS to the format GHC wants them in ++GHCLDFLAGS="" ++for f in $LDFLAGS ; do ++ GHCLDFLAGS="$GHCLDFLAGS -optl$f" ++done ++GHCLIBS="" ++for l in $LIBS ; do ++ GHCLIBS="$GHCLIBS -optl$l" ++done ++if { ac_try='$GHC $GHCFLAGS $GHCLDFLAGS -o conftest conftest.hs $GHCLIBS' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? +@@ -5215,13 +5470,22 @@ + + + cat << \EOF > conftest.hs +--- #line 5218 "configure" + import Data.Map + main = seq (empty) (putStr "Hello world.\n") + ++-- this file generated by TRY-COMPILE-GHC + EOF + rm -f Main.hi Main.o +-if { ac_try='$GHC $GHCFLAGS -o conftest conftest.hs' ++# Convert LDFLAGS and LIBS to the format GHC wants them in ++GHCLDFLAGS="" ++for f in $LDFLAGS ; do ++ GHCLDFLAGS="$GHCLDFLAGS -optl$f" ++done ++GHCLIBS="" ++for l in $LIBS ; do ++ GHCLIBS="$GHCLIBS -optl$l" ++done ++if { ac_try='$GHC $GHCFLAGS $GHCLDFLAGS -o conftest conftest.hs $GHCLIBS' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? +@@ -5240,8 +5504,8 @@ + GHCFLAGS=$check_module_save_GHCFLAGS + { echo "$as_me:$LINENO: result: no; and neither in package containers" >&5 + echo "${ECHO_T}no; and neither in package containers" >&6; } +- { { echo "$as_me:$LINENO: error: Cannot find Data.Map" >&5 +-echo "$as_me: error: Cannot find Data.Map" >&2;} ++ { { echo "$as_me:$LINENO: error: Cannot find Data.Map; try installing package containers?" >&5 ++echo "$as_me: error: Cannot find Data.Map; try installing package containers?" >&2;} + { (exit 1); exit 1; }; } + fi + +@@ -5264,7 +5528,6 @@ + + + cat << \EOF > conftest.hs +--- #line 5267 "configure" + + import System.Directory(getCurrentDirectory, setCurrentDirectory) + main = do setCurrentDirectory "src" +@@ -5272,9 +5535,19 @@ + case reverse $ take 4 $ reverse d of + "/src" -> return () + ++-- this file generated by TRY-COMPILE-GHC + EOF + rm -f Main.hi Main.o +-if { ac_try='$GHC $GHCFLAGS -o conftest conftest.hs' ++# Convert LDFLAGS and LIBS to the format GHC wants them in ++GHCLDFLAGS="" ++for f in $LDFLAGS ; do ++ GHCLDFLAGS="$GHCLDFLAGS -optl$f" ++done ++GHCLIBS="" ++for l in $LIBS ; do ++ GHCLIBS="$GHCLIBS -optl$l" ++done ++if { ac_try='$GHC $GHCFLAGS $GHCLDFLAGS -o conftest conftest.hs $GHCLIBS' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? +@@ -5375,13 +5648,22 @@ + + + cat << \EOF > conftest.hs +--- #line 5378 "configure" + import System.Posix.Files( createLink ) + main = seq (createLink "a" "b") (putStr "Hello world.\n") + ++-- this file generated by TRY-COMPILE-GHC + EOF + rm -f Main.hi Main.o +-if { ac_try='$GHC $GHCFLAGS -o conftest conftest.hs' ++# Convert LDFLAGS and LIBS to the format GHC wants them in ++GHCLDFLAGS="" ++for f in $LDFLAGS ; do ++ GHCLDFLAGS="$GHCLDFLAGS -optl$f" ++done ++GHCLIBS="" ++for l in $LIBS ; do ++ GHCLIBS="$GHCLIBS -optl$l" ++done ++if { ac_try='$GHC $GHCFLAGS $GHCLDFLAGS -o conftest conftest.hs $GHCLIBS' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? +@@ -5406,13 +5688,22 @@ + + + cat << \EOF > conftest.hs +--- #line 5409 "configure" + import System.Posix.Files( createLink ) + main = seq (createLink "a" "b") (putStr "Hello world.\n") + ++-- this file generated by TRY-COMPILE-GHC + EOF + rm -f Main.hi Main.o +-if { ac_try='$GHC $GHCFLAGS -o conftest conftest.hs' ++# Convert LDFLAGS and LIBS to the format GHC wants them in ++GHCLDFLAGS="" ++for f in $LDFLAGS ; do ++ GHCLDFLAGS="$GHCLDFLAGS -optl$f" ++done ++GHCLIBS="" ++for l in $LIBS ; do ++ GHCLIBS="$GHCLIBS -optl$l" ++done ++if { ac_try='$GHC $GHCFLAGS $GHCLDFLAGS -o conftest conftest.hs $GHCLIBS' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? +@@ -5441,13 +5732,22 @@ + + + cat << \EOF > conftest.hs +--- #line 5444 "configure" + import Posix( createLink ) + main = seq (createLink "a" "b") (putStr "Hello world.\n") + ++-- this file generated by TRY-COMPILE-GHC + EOF + rm -f Main.hi Main.o +-if { ac_try='$GHC $GHCFLAGS -o conftest conftest.hs' ++# Convert LDFLAGS and LIBS to the format GHC wants them in ++GHCLDFLAGS="" ++for f in $LDFLAGS ; do ++ GHCLDFLAGS="$GHCLDFLAGS -optl$f" ++done ++GHCLIBS="" ++for l in $LIBS ; do ++ GHCLIBS="$GHCLIBS -optl$l" ++done ++if { ac_try='$GHC $GHCFLAGS $GHCLDFLAGS -o conftest conftest.hs $GHCLIBS' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? +@@ -5472,13 +5772,22 @@ + + + cat << \EOF > conftest.hs +--- #line 5475 "configure" + import Posix( createLink ) + main = seq (createLink "a" "b") (putStr "Hello world.\n") + ++-- this file generated by TRY-COMPILE-GHC + EOF + rm -f Main.hi Main.o +-if { ac_try='$GHC $GHCFLAGS -o conftest conftest.hs' ++# Convert LDFLAGS and LIBS to the format GHC wants them in ++GHCLDFLAGS="" ++for f in $LDFLAGS ; do ++ GHCLDFLAGS="$GHCLDFLAGS -optl$f" ++done ++GHCLIBS="" ++for l in $LIBS ; do ++ GHCLIBS="$GHCLIBS -optl$l" ++done ++if { ac_try='$GHC $GHCFLAGS $GHCLDFLAGS -o conftest conftest.hs $GHCLIBS' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? +@@ -5543,14 +5852,23 @@ + echo $ECHO_N "checking createDirectoryIfMissing... $ECHO_C" >&6; } + + cat << \EOF > conftest.hs +--- #line 5546 "configure" + + import System.Directory(createDirectoryIfMissing) + main = createDirectoryIfMissing True "" + ++-- this file generated by TRY-COMPILE-GHC + EOF + rm -f Main.hi Main.o +-if { ac_try='$GHC $GHCFLAGS -o conftest conftest.hs' ++# Convert LDFLAGS and LIBS to the format GHC wants them in ++GHCLDFLAGS="" ++for f in $LDFLAGS ; do ++ GHCLDFLAGS="$GHCLDFLAGS -optl$f" ++done ++GHCLIBS="" ++for l in $LIBS ; do ++ GHCLIBS="$GHCLIBS -optl$l" ++done ++if { ac_try='$GHC $GHCFLAGS $GHCLDFLAGS -o conftest conftest.hs $GHCLIBS' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? +@@ -5654,7 +5972,6 @@ + + + cat << \EOF > conftest.hs +--- #line 5657 "configure" + + import System.Directory ( renameFile ) + +@@ -5662,9 +5979,19 @@ + writeFile "conftest.newdata" "new_data" + renameFile "conftest.newdata" "conftest.data" + ++-- this file generated by TRY-COMPILE-GHC + EOF + rm -f Main.hi Main.o +-if { ac_try='$GHC $GHCFLAGS -o conftest conftest.hs' ++# Convert LDFLAGS and LIBS to the format GHC wants them in ++GHCLDFLAGS="" ++for f in $LDFLAGS ; do ++ GHCLDFLAGS="$GHCLDFLAGS -optl$f" ++done ++GHCLIBS="" ++for l in $LIBS ; do ++ GHCLIBS="$GHCLIBS -optl$l" ++done ++if { ac_try='$GHC $GHCFLAGS $GHCLDFLAGS -o conftest conftest.hs $GHCLIBS' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? +@@ -5785,13 +6112,22 @@ + + + cat << \EOF > conftest.hs +--- #line 5788 "configure" + import Control.Exception( bracketOnError ) + main = seq (bracketOnError (return ()) (const $ return ()) (const $ return ())) (putStr "Hello world.\n") + ++-- this file generated by TRY-COMPILE-GHC + EOF + rm -f Main.hi Main.o +-if { ac_try='$GHC $GHCFLAGS -o conftest conftest.hs' ++# Convert LDFLAGS and LIBS to the format GHC wants them in ++GHCLDFLAGS="" ++for f in $LDFLAGS ; do ++ GHCLDFLAGS="$GHCLDFLAGS -optl$f" ++done ++GHCLIBS="" ++for l in $LIBS ; do ++ GHCLIBS="$GHCLIBS -optl$l" ++done ++if { ac_try='$GHC $GHCFLAGS $GHCLDFLAGS -o conftest conftest.hs $GHCLIBS' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? +@@ -5816,13 +6152,22 @@ + + + cat << \EOF > conftest.hs +--- #line 5819 "configure" + import Control.Exception( bracketOnError ) + main = seq (bracketOnError (return ()) (const $ return ()) (const $ return ())) (putStr "Hello world.\n") + ++-- this file generated by TRY-COMPILE-GHC + EOF + rm -f Main.hi Main.o +-if { ac_try='$GHC $GHCFLAGS -o conftest conftest.hs' ++# Convert LDFLAGS and LIBS to the format GHC wants them in ++GHCLDFLAGS="" ++for f in $LDFLAGS ; do ++ GHCLDFLAGS="$GHCLDFLAGS -optl$f" ++done ++GHCLIBS="" ++for l in $LIBS ; do ++ GHCLIBS="$GHCLIBS -optl$l" ++done ++if { ac_try='$GHC $GHCFLAGS $GHCLDFLAGS -o conftest conftest.hs $GHCLIBS' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? +@@ -5896,13 +6241,22 @@ + + + cat << \EOF > conftest.hs +--- #line 5899 "configure" + import System.Posix.Files( fileMode, getFileStatus, setFileMode ) + main = seq (getFileStatus "") (putStr "Hello world.\n") + ++-- this file generated by TRY-COMPILE-GHC + EOF + rm -f Main.hi Main.o +-if { ac_try='$GHC $GHCFLAGS -o conftest conftest.hs' ++# Convert LDFLAGS and LIBS to the format GHC wants them in ++GHCLDFLAGS="" ++for f in $LDFLAGS ; do ++ GHCLDFLAGS="$GHCLDFLAGS -optl$f" ++done ++GHCLIBS="" ++for l in $LIBS ; do ++ GHCLIBS="$GHCLIBS -optl$l" ++done ++if { ac_try='$GHC $GHCFLAGS $GHCLDFLAGS -o conftest conftest.hs $GHCLIBS' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? +@@ -5927,13 +6281,22 @@ + + + cat << \EOF > conftest.hs +--- #line 5930 "configure" + import System.Posix.Files( fileMode, getFileStatus, setFileMode ) + main = seq (getFileStatus "") (putStr "Hello world.\n") + ++-- this file generated by TRY-COMPILE-GHC + EOF + rm -f Main.hi Main.o +-if { ac_try='$GHC $GHCFLAGS -o conftest conftest.hs' ++# Convert LDFLAGS and LIBS to the format GHC wants them in ++GHCLDFLAGS="" ++for f in $LDFLAGS ; do ++ GHCLDFLAGS="$GHCLDFLAGS -optl$f" ++done ++GHCLIBS="" ++for l in $LIBS ; do ++ GHCLIBS="$GHCLIBS -optl$l" ++done ++if { ac_try='$GHC $GHCFLAGS $GHCLDFLAGS -o conftest conftest.hs $GHCLIBS' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? +@@ -5982,7 +6345,7 @@ + + + cat << \EOF >> src/Workaround.hs.prefix +- isExecutable, setExecutable, ++ setExecutable, + EOF + + +@@ -5991,13 +6354,22 @@ + + + cat << \EOF > conftest.hs +--- #line 5994 "configure" + import System.Posix.Files( fileMode, getFileStatus, setFileMode, setFileCreationMask ) + main = seq (getFileStatus "") (putStr "Hello world.\n") + ++-- this file generated by TRY-COMPILE-GHC + EOF + rm -f Main.hi Main.o +-if { ac_try='$GHC $GHCFLAGS -o conftest conftest.hs' ++# Convert LDFLAGS and LIBS to the format GHC wants them in ++GHCLDFLAGS="" ++for f in $LDFLAGS ; do ++ GHCLDFLAGS="$GHCLDFLAGS -optl$f" ++done ++GHCLIBS="" ++for l in $LIBS ; do ++ GHCLIBS="$GHCLIBS -optl$l" ++done ++if { ac_try='$GHC $GHCFLAGS $GHCLDFLAGS -o conftest conftest.hs $GHCLIBS' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? +@@ -6015,10 +6387,7 @@ + groupReadMode, groupWriteMode, groupExecuteMode, + otherReadMode, otherWriteMode, otherExecuteMode) + import Data.Bits ( (.&.), (.|.), complement ) +-isExecutable :: FilePath -> IO Bool +-isExecutable f = do st <- getFileStatus f +- let x = fileMode st .&. ownerExecuteMode +- return $ x /= nullFileMode ++ + setExecutable :: FilePath -> Bool -> IO () + setExecutable f ex = + do st <- getFileStatus f +@@ -6047,13 +6416,22 @@ + + + cat << \EOF > conftest.hs +--- #line 6050 "configure" + import System.Posix.Files( fileMode, getFileStatus, setFileMode, setFileCreationMask ) + main = seq (getFileStatus "") (putStr "Hello world.\n") + ++-- this file generated by TRY-COMPILE-GHC + EOF + rm -f Main.hi Main.o +-if { ac_try='$GHC $GHCFLAGS -o conftest conftest.hs' ++# Convert LDFLAGS and LIBS to the format GHC wants them in ++GHCLDFLAGS="" ++for f in $LDFLAGS ; do ++ GHCLDFLAGS="$GHCLDFLAGS -optl$f" ++done ++GHCLIBS="" ++for l in $LIBS ; do ++ GHCLIBS="$GHCLIBS -optl$l" ++done ++if { ac_try='$GHC $GHCFLAGS $GHCLDFLAGS -o conftest conftest.hs $GHCLIBS' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? +@@ -6071,10 +6449,7 @@ + groupReadMode, groupWriteMode, groupExecuteMode, + otherReadMode, otherWriteMode, otherExecuteMode) + import Data.Bits ( (.&.), (.|.), complement ) +-isExecutable :: FilePath -> IO Bool +-isExecutable f = do st <- getFileStatus f +- let x = fileMode st .&. ownerExecuteMode +- return $ x /= nullFileMode ++ + setExecutable :: FilePath -> Bool -> IO () + setExecutable f ex = + do st <- getFileStatus f +@@ -6104,8 +6479,6 @@ + + cat << \EOF >> src/Workaround.hs.ending + +-isExecutable :: FilePath -> IO Bool +-isExecutable _ = return False + setExecutable :: FilePath -> Bool -> IO () + setExecutable _ _ = return () + +@@ -6136,27 +6509,27 @@ + echo "${ECHO_T}$optimize" >&6; } + + if test "$optimize" = yes; then +- GHCFLAGS="$GHCFLAGS -O -funbox-strict-fields" ++ GHCFLAGS="$GHCFLAGS -O2 -funbox-strict-fields" + if test "$CFLAGS" = ""; then + CFLAGS="$CFLAGS -O2" + fi + fi + + +-{ echo "$as_me:$LINENO: checking whether to profile" >&5 +-echo $ECHO_N "checking whether to profile... $ECHO_C" >&6; } +-# Check whether --enable-profile was given. +-if test "${enable_profile+set}" = set; then +- enableval=$enable_profile; profile=$enableval ++{ echo "$as_me:$LINENO: checking whether to use Haskell Program Coverage" >&5 ++echo $ECHO_N "checking whether to use Haskell Program Coverage... $ECHO_C" >&6; } ++# Check whether --enable-hpc was given. ++if test "${enable_hpc+set}" = set; then ++ enableval=$enable_hpc; hpc=$enableval + else +- profile=no ++ hpc=no + fi + +-{ echo "$as_me:$LINENO: result: $profile" >&5 +-echo "${ECHO_T}$profile" >&6; } ++{ echo "$as_me:$LINENO: result: $hpc" >&5 ++echo "${ECHO_T}$hpc" >&6; } + +-if test "$profile" = yes; then +- GHCFLAGS="$GHCFLAGS -prof -auto-all" ++if test "$hpc" = yes; then ++ GHCFLAGS="$GHCFLAGS -fhpc" + fi + + +@@ -6177,7 +6550,7 @@ + echo "${ECHO_T}$enable_mmap" >&6; } + fi + USE_MMAP="True" +-if test '(' "$enable_mmap" = "no" ')' -o '(' "$SYS" = "windows" ')'; then ++if test "$enable_mmap" = "no" || test "$SYS" = "windows" ; then + USE_MMAP="False" + fi + +@@ -6652,54 +7025,10 @@ + + + +-for ac_prog in gawk mawk nawk awk +-do +- # Extract the first word of "$ac_prog", so it can be a program name with args. +-set dummy $ac_prog; ac_word=$2 +-{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +-if test "${ac_cv_prog_AWK+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- if test -n "$AWK"; then +- ac_cv_prog_AWK="$AWK" # Let the user override the test. +-else +-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +-for as_dir in $PATH +-do +- IFS=$as_save_IFS +- test -z "$as_dir" && as_dir=. +- for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then +- ac_cv_prog_AWK="$ac_prog" +- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 +- break 2 +- fi +-done +-done +-IFS=$as_save_IFS + +-fi +-fi +-AWK=$ac_cv_prog_AWK +-if test -n "$AWK"; then +- { echo "$as_me:$LINENO: result: $AWK" >&5 +-echo "${ECHO_T}$AWK" >&6; } +-else +- { echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6; } +-fi +- +- +- test -n "$AWK" && break +-done +- +- +- +- +-# Check whether --with-static-libs was given. +-if test "${with_static_libs+set}" = set; then +- withval=$with_static_libs; ++# Check whether --with-static-libs was given. ++if test "${with_static_libs+set}" = set; then ++ withval=$with_static_libs; + fi + + if test "x$with_static_libs" = "xyes"; then +@@ -6712,11 +7041,14 @@ + + # Check whether --with-type-witnesses was given. + if test "${with_type_witnesses+set}" = set; then +- withval=$with_type_witnesses; ++ withval=$with_type_witnesses; with_typew=yes ++ ++else ++ with_typew=no + fi + + +-if test "$withval" = "yes"; then ++if test "$with_typew" = "yes"; then + GHCFLAGS="$GHCFLAGS -fglasgow-exts" + cat >>confdefs.h <<\_ACEOF + #define GADT_WITNESSES 1 +@@ -6731,28 +7063,131 @@ + + + ++{ echo "$as_me:$LINENO: checking for library z" >&5 ++echo $ECHO_N "checking for library z... $ECHO_C" >&6; } ++ ++ ++cat << \EOF > conftest.hs ++{-# OPTIONS -fffi -Werror #-} ++module Main where ++ ++foreign import ccall unsafe "zlib.h deflate" fun :: Int -> Int -> Int ++ ++main = fun `seq` putStrLn "hello world" ++ ++-- this file generated by TRY-COMPILE-GHC ++EOF ++rm -f Main.hi Main.o ++# Convert LDFLAGS and LIBS to the format GHC wants them in ++GHCLDFLAGS="" ++for f in $LDFLAGS ; do ++ GHCLDFLAGS="$GHCLDFLAGS -optl$f" ++done ++GHCLIBS="" ++for l in $LIBS ; do ++ GHCLIBS="$GHCLIBS -optl$l" ++done ++if { ac_try='$GHC $GHCFLAGS $GHCLDFLAGS -o conftest conftest.hs $GHCLIBS' ++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 ++ (eval $ac_try) 2>&5 ++ ac_status=$? ++ echo "$as_me:$LINENO: \$? = $ac_status" >&5 ++ (exit $ac_status); }; } && test -s conftest ++then ++ { echo "$as_me:$LINENO: result: yes" >&5 ++echo "${ECHO_T}yes" >&6; } ++ ++else ++ echo "configure: failed program was:" >&5 ++ cat conftest.hs >&5 ++ echo "end of failed program." >&5 ++ rm -f Main.hi Main.o ++ ++ check_library_save_LIBS=$LIBS ++ LIBS="$LIBS -lz" ++ ++ ++cat << \EOF > conftest.hs ++{-# OPTIONS -fffi -Werror #-} ++module Main where ++ ++foreign import ccall unsafe "zlib.h deflate" fun :: Int -> Int -> Int ++ ++main = fun `seq` putStrLn "hello world" ++ ++-- this file generated by TRY-COMPILE-GHC ++EOF ++rm -f Main.hi Main.o ++# Convert LDFLAGS and LIBS to the format GHC wants them in ++GHCLDFLAGS="" ++for f in $LDFLAGS ; do ++ GHCLDFLAGS="$GHCLDFLAGS -optl$f" ++done ++GHCLIBS="" ++for l in $LIBS ; do ++ GHCLIBS="$GHCLIBS -optl$l" ++done ++if { ac_try='$GHC $GHCFLAGS $GHCLDFLAGS -o conftest conftest.hs $GHCLIBS' ++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 ++ (eval $ac_try) 2>&5 ++ ac_status=$? ++ echo "$as_me:$LINENO: \$? = $ac_status" >&5 ++ (exit $ac_status); }; } && test -s conftest ++then ++ { echo "$as_me:$LINENO: result: in -lz" >&5 ++echo "${ECHO_T}in -lz" >&6; } ++ ++else ++ echo "configure: failed program was:" >&5 ++ cat conftest.hs >&5 ++ echo "end of failed program." >&5 ++ rm -f Main.hi Main.o ++ ++ LIBS=$check_library_save_LIBS ++ { echo "$as_me:$LINENO: result: no; and not with -lz either" >&5 ++echo "${ECHO_T}no; and not with -lz either" >&6; } ++ { { echo "$as_me:$LINENO: error: Cannot find system's zlib library; please set the LDFLAGS environment variable!" >&5 ++echo "$as_me: error: Cannot find system's zlib library; please set the LDFLAGS environment variable!" >&2;} ++ { (exit 1); exit 1; }; } ++fi ++ ++fi ++ ++ ++ ++ + # Check whether --with-libcurl was given. + if test "${with_libcurl+set}" = set; then + withval=$with_libcurl; + fi + + +-CURLLDFLAGS= ++ ++# Check whether --with-curl was given. ++if test "${with_curl+set}" = set; then ++ withval=$with_curl; ++fi ++ ++ ++CURLLIBS= ++CURL_CONFIG="curl-config" + + if test "$with_libcurl" != "no"; then ++ if test "$with_curl" != ""; then ++ CURL_CONFIG="$with_curl/bin/curl-config" ++ fi ++ + { echo "$as_me:$LINENO: checking for libcurl" >&5 + echo $ECHO_N "checking for libcurl... $ECHO_C" >&6; } +- if eval curl-config --version 2>/dev/null >/dev/null; then +- ver=`curl-config --version | sed -e "s/libcurl //g"` +- if test -z "$AWK"; then +- CURLLDFLAGS=`curl-config --libs | sed "s_-arch [^ ]+__"` +- else +- CURLLDFLAGS=`curl-config --libs | $AWK '{sub(/-arch [^ ]+/,""); print}'` +- fi +- CURLCFLAGS=`curl-config --cflags` ++ if eval $CURL_CONFIG --version 2>/dev/null >/dev/null; then ++ ver=`$CURL_CONFIG --version | sed -e "s/libcurl //g"` ++ opt="--libs" ++ CURLCFLAGS=`$CURL_CONFIG --cflags` + if test "x$with_static_libs" = "xyes"; then + CURLCFLAGS="$CURLFLAGS -DCURL_STATICLIB" ++ opt="--static-libs" + fi ++ CURLLIBS=`$CURL_CONFIG $opt | sed "s_-arch [^ ][^ ]*__"` + { echo "$as_me:$LINENO: result: $ver" >&5 + echo "${ECHO_T}$ver" >&6; } + else +@@ -6763,18 +7198,21 @@ + fi + fi + +-if test "$CURLLDFLAGS" = ""; then +- HAVE_LIBCURL=False +-else ++if test "$CURLLIBS" != ""; then ++ # we enable curl ++ CPPFLAGS="$CPPFLAGS -DHAVE_CURL" ++ + CFLAGS="$CFLAGS $CURLCFLAGS" +- LDFLAGS="$LDFLAGS $CURLLDFLAGS" +- { echo "$as_me:$LINENO: checking for curl_global_init in -lcurl" >&5 ++ LIBS="$LIBS $CURLLIBS" ++ old_LIBS="$LIBS" ++ ++{ echo "$as_me:$LINENO: checking for curl_global_init in -lcurl" >&5 + echo $ECHO_N "checking for curl_global_init in -lcurl... $ECHO_C" >&6; } + if test "${ac_cv_lib_curl_curl_global_init+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + ac_check_lib_save_LIBS=$LIBS +-LIBS="-lcurl $CURLCFLAGS $CURLLDFLAGS $LIBS" ++LIBS="-lcurl $LIBS" + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -6830,50 +7268,19 @@ + { echo "$as_me:$LINENO: result: $ac_cv_lib_curl_curl_global_init" >&5 + echo "${ECHO_T}$ac_cv_lib_curl_curl_global_init" >&6; } + if test $ac_cv_lib_curl_curl_global_init = yes; then +- HAVE_LIBCURL=True ++ cat >>confdefs.h <<_ACEOF ++#define HAVE_LIBCURL 1 ++_ACEOF ++ ++ LIBS="-lcurl $LIBS" ++ + else + { { echo "$as_me:$LINENO: error: Cannot actually use libcurl; try specifying --without-libcurl." >&5 + echo "$as_me: error: Cannot actually use libcurl; try specifying --without-libcurl." >&2;} + { (exit 1); exit 1; }; } + fi + +-fi +- +- +- +-# Check whether --with-curl_pipelining was given. +-if test "${with_curl_pipelining+set}" = set; then +- withval=$with_curl_pipelining; +-fi +- +- +-if test "$with_curl_pipelining" == "yes"; then +- { echo "$as_me:$LINENO: checking for libcurl pipelining" >&5 +-echo $ECHO_N "checking for libcurl pipelining... $ECHO_C" >&6; } +- if test "$HAVE_LIBCURL" == "True"; then +- let vernum=0x0`curl-config --vernum` +- let minver=0x071200 +- if test $vernum -ge $minver; then +- CPPFLAGS="$CPPFLAGS -DCURL_PIPELINING" +- CURL_PIPELINING=True +- { echo "$as_me:$LINENO: result: yes" >&5 +-echo "${ECHO_T}yes" >&6; } +- else +- { echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6; } +- { echo "$as_me:$LINENO: WARNING: Requires libcurl version >= 7.18.0" >&5 +-echo "$as_me: WARNING: Requires libcurl version >= 7.18.0" >&2;} +- fi +- else +- { echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6; } +- { echo "$as_me:$LINENO: WARNING: Requires libcurl" >&5 +-echo "$as_me: WARNING: Requires libcurl" >&2;} +- fi +-fi +- +-if test "$HAVE_LIBCURL" == "True"; then +- { echo "$as_me:$LINENO: checking for curl_multi_timeout in -lcurl" >&5 ++ { echo "$as_me:$LINENO: checking for curl_multi_timeout in -lcurl" >&5 + echo $ECHO_N "checking for curl_multi_timeout in -lcurl... $ECHO_C" >&6; } + if test "${ac_cv_lib_curl_curl_multi_timeout+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +@@ -6938,6 +7345,49 @@ + CPPFLAGS="$CPPFLAGS -DCURL_MULTI_TIMEOUT" + fi + ++ LIBS="$old_LIBS" ++ ++ # Check if we want pipelining enabled... ++ ++# Check whether --with-curl_pipelining was given. ++if test "${with_curl_pipelining+set}" = set; then ++ withval=$with_curl_pipelining; ++fi ++ ++ ++ if test "$with_curl_pipelining" == "yes"; then ++ { echo "$as_me:$LINENO: checking for libcurl pipelining" >&5 ++echo $ECHO_N "checking for libcurl pipelining... $ECHO_C" >&6; } ++ let vernum=0x0`$CURL_CONFIG --vernum` ++ let minver=0x071200 ++ if test $vernum -ge $minver; then ++ CPPFLAGS="$CPPFLAGS -DCURL_PIPELINING" ++ CURL_PIPELINING=True ++ { echo "$as_me:$LINENO: result: yes" >&5 ++echo "${ECHO_T}yes" >&6; } ++ else ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } ++ { echo "$as_me:$LINENO: WARNING: Requires libcurl version >= 7.18.0" >&5 ++echo "$as_me: WARNING: Requires libcurl version >= 7.18.0" >&2;} ++ fi ++ fi ++ ++ # Check if we want curl debug enabled... ++ { echo "$as_me:$LINENO: checking whether to do libcurl debugging" >&5 ++echo $ECHO_N "checking whether to do libcurl debugging... $ECHO_C" >&6; } ++ # Check whether --enable-curl-debug was given. ++if test "${enable_curl_debug+set}" = set; then ++ enableval=$enable_curl_debug; curl_debug=$enableval ++else ++ curl_debug=no ++fi ++ ++ { echo "$as_me:$LINENO: result: $curl_debug" >&5 ++echo "${ECHO_T}$curl_debug" >&6; } ++ if test "$curl_debug" = "yes"; then ++ CPPFLAGS="$CPPFLAGS -DCURL_DEBUG" ++ fi + fi + + +@@ -6948,18 +7398,32 @@ + fi + + +-HAVE_LIBWWW=False +- + if test "$with_libwww" == "yes"; then + { echo "$as_me:$LINENO: checking for libwww" >&5 + echo $ECHO_N "checking for libwww... $ECHO_C" >&6; } + if eval libwww-config --version 2>/dev/null >/dev/null; then +- HAVE_LIBWWW=True ++ CPPFLAGS="$CPPFLAGS -DHAVE_LIBWWW" + WWWVERSION=`libwww-config --version` +- LDFLAGS="$LDFLAGS `libwww-config --libs`" ++ LIBS="$LIBS `libwww-config --libs`" + CFLAGS="$CFLAGS `libwww-config --cflags`" + { echo "$as_me:$LINENO: result: $WWWVERSION" >&5 + echo "${ECHO_T}$WWWVERSION" >&6; } ++ ++ # Check if we want libwww debug enabled... ++ { echo "$as_me:$LINENO: checking whether to do libwww debugging" >&5 ++echo $ECHO_N "checking whether to do libwww debugging... $ECHO_C" >&6; } ++ # Check whether --enable-libwww-debug was given. ++if test "${enable_libwww_debug+set}" = set; then ++ enableval=$enable_libwww_debug; libwww_debug=$enableval ++else ++ libwww_debug=no ++fi ++ ++ { echo "$as_me:$LINENO: result: $libwww_debug" >&5 ++echo "${ECHO_T}$libwww_debug" >&6; } ++ if test "$libwww_debug" = "yes"; then ++ CPPFLAGS="$CPPFLAGS -DLIBWWW_DEBUG" ++ fi + else + { echo "$as_me:$LINENO: result: FAILED" >&5 + echo "${ECHO_T}FAILED" >&6; } +@@ -6969,8 +7433,6 @@ + fi + + +- +- + # Check whether --enable-libcurses was given. + if test "${enable_libcurses+set}" = set; then + enableval=$enable_libcurses; +@@ -7113,371 +7575,17 @@ + fi + + +- +-for ac_header in termio.h +-do +-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then +- { echo "$as_me:$LINENO: checking for $ac_header" >&5 +-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-fi +-ac_res=`eval echo '${'$as_ac_Header'}'` +- { echo "$as_me:$LINENO: result: $ac_res" >&5 +-echo "${ECHO_T}$ac_res" >&6; } +-else +- # Is the header compilable? +-{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 +-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } +-cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +-$ac_includes_default +-#include <$ac_header> +-_ACEOF +-rm -f conftest.$ac_objext +-if { (ac_try="$ac_compile" +-case "(($ac_try" in +- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; +- *) ac_try_echo=$ac_try;; +-esac +-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +- (eval "$ac_compile") 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && { +- test -z "$ac_c_werror_flag" || +- test ! -s conftest.err +- } && test -s conftest.$ac_objext; then +- ac_header_compiler=yes +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 +- +- ac_header_compiler=no +-fi +- +-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +-echo "${ECHO_T}$ac_header_compiler" >&6; } +- +-# Is the header present? +-{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 +-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } +-cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +-#include <$ac_header> +-_ACEOF +-if { (ac_try="$ac_cpp conftest.$ac_ext" +-case "(($ac_try" in +- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; +- *) ac_try_echo=$ac_try;; +-esac +-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } >/dev/null && { +- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || +- test ! -s conftest.err +- }; then +- ac_header_preproc=yes +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 +- +- ac_header_preproc=no +-fi +- +-rm -f conftest.err conftest.$ac_ext +-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +-echo "${ECHO_T}$ac_header_preproc" >&6; } +- +-# So? What about this header? +-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in +- yes:no: ) +- { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} +- { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} +- ac_header_preproc=yes +- ;; +- no:yes:* ) +- { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} +- { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +-echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} +- { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} +- { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +-echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} +- { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} +- { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} +- ( cat <<\_ASBOX +-## ----------------------------- ## +-## Report this to bugs@darcs.net ## +-## ----------------------------- ## +-_ASBOX +- ) | sed "s/^/$as_me: WARNING: /" >&2 +- ;; +-esac +-{ echo "$as_me:$LINENO: checking for $ac_header" >&5 +-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- eval "$as_ac_Header=\$ac_header_preproc" +-fi +-ac_res=`eval echo '${'$as_ac_Header'}'` +- { echo "$as_me:$LINENO: result: $ac_res" >&5 +-echo "${ECHO_T}$ac_res" >&6; } +- +-fi +-if test `eval echo '${'$as_ac_Header'}'` = yes; then +- cat >>confdefs.h <<_ACEOF +-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +-_ACEOF +- HAVE_TERMIO_H=True +-fi +- +-done +- if test "$HAVE_CURSES" != "True"; then ++ if test "$HAVE_CURSES" != "True"; then + { echo "$as_me:$LINENO: WARNING: Cannot find term.h, disabling color." >&5 + echo "$as_me: WARNING: Cannot find term.h, disabling color." >&2;} ++ else ++ # The precondition for this is: we both have curses available and not disabled ++ CPPFLAGS="$CPPFLAGS -DHAVE_CURSES" + fi + fi + + + +- +-if test "${ac_cv_header_zlib_h+set}" = set; then +- { echo "$as_me:$LINENO: checking for zlib.h" >&5 +-echo $ECHO_N "checking for zlib.h... $ECHO_C" >&6; } +-if test "${ac_cv_header_zlib_h+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-fi +-{ echo "$as_me:$LINENO: result: $ac_cv_header_zlib_h" >&5 +-echo "${ECHO_T}$ac_cv_header_zlib_h" >&6; } +-else +- # Is the header compilable? +-{ echo "$as_me:$LINENO: checking zlib.h usability" >&5 +-echo $ECHO_N "checking zlib.h usability... $ECHO_C" >&6; } +-cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +-$ac_includes_default +-#include +-_ACEOF +-rm -f conftest.$ac_objext +-if { (ac_try="$ac_compile" +-case "(($ac_try" in +- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; +- *) ac_try_echo=$ac_try;; +-esac +-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +- (eval "$ac_compile") 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && { +- test -z "$ac_c_werror_flag" || +- test ! -s conftest.err +- } && test -s conftest.$ac_objext; then +- ac_header_compiler=yes +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 +- +- ac_header_compiler=no +-fi +- +-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +-echo "${ECHO_T}$ac_header_compiler" >&6; } +- +-# Is the header present? +-{ echo "$as_me:$LINENO: checking zlib.h presence" >&5 +-echo $ECHO_N "checking zlib.h presence... $ECHO_C" >&6; } +-cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +-#include +-_ACEOF +-if { (ac_try="$ac_cpp conftest.$ac_ext" +-case "(($ac_try" in +- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; +- *) ac_try_echo=$ac_try;; +-esac +-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } >/dev/null && { +- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || +- test ! -s conftest.err +- }; then +- ac_header_preproc=yes +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 +- +- ac_header_preproc=no +-fi +- +-rm -f conftest.err conftest.$ac_ext +-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +-echo "${ECHO_T}$ac_header_preproc" >&6; } +- +-# So? What about this header? +-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in +- yes:no: ) +- { echo "$as_me:$LINENO: WARNING: zlib.h: accepted by the compiler, rejected by the preprocessor!" >&5 +-echo "$as_me: WARNING: zlib.h: accepted by the compiler, rejected by the preprocessor!" >&2;} +- { echo "$as_me:$LINENO: WARNING: zlib.h: proceeding with the compiler's result" >&5 +-echo "$as_me: WARNING: zlib.h: proceeding with the compiler's result" >&2;} +- ac_header_preproc=yes +- ;; +- no:yes:* ) +- { echo "$as_me:$LINENO: WARNING: zlib.h: present but cannot be compiled" >&5 +-echo "$as_me: WARNING: zlib.h: present but cannot be compiled" >&2;} +- { echo "$as_me:$LINENO: WARNING: zlib.h: check for missing prerequisite headers?" >&5 +-echo "$as_me: WARNING: zlib.h: check for missing prerequisite headers?" >&2;} +- { echo "$as_me:$LINENO: WARNING: zlib.h: see the Autoconf documentation" >&5 +-echo "$as_me: WARNING: zlib.h: see the Autoconf documentation" >&2;} +- { echo "$as_me:$LINENO: WARNING: zlib.h: section \"Present But Cannot Be Compiled\"" >&5 +-echo "$as_me: WARNING: zlib.h: section \"Present But Cannot Be Compiled\"" >&2;} +- { echo "$as_me:$LINENO: WARNING: zlib.h: proceeding with the preprocessor's result" >&5 +-echo "$as_me: WARNING: zlib.h: proceeding with the preprocessor's result" >&2;} +- { echo "$as_me:$LINENO: WARNING: zlib.h: in the future, the compiler will take precedence" >&5 +-echo "$as_me: WARNING: zlib.h: in the future, the compiler will take precedence" >&2;} +- ( cat <<\_ASBOX +-## ----------------------------- ## +-## Report this to bugs@darcs.net ## +-## ----------------------------- ## +-_ASBOX +- ) | sed "s/^/$as_me: WARNING: /" >&2 +- ;; +-esac +-{ echo "$as_me:$LINENO: checking for zlib.h" >&5 +-echo $ECHO_N "checking for zlib.h... $ECHO_C" >&6; } +-if test "${ac_cv_header_zlib_h+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- ac_cv_header_zlib_h=$ac_header_preproc +-fi +-{ echo "$as_me:$LINENO: result: $ac_cv_header_zlib_h" >&5 +-echo "${ECHO_T}$ac_cv_header_zlib_h" >&6; } +- +-fi +-if test $ac_cv_header_zlib_h = yes; then +- : +-else +- { { echo "$as_me:$LINENO: error: Cannot find zlib.h; please set the CPPFLAGS environment variable!" >&5 +-echo "$as_me: error: Cannot find zlib.h; please set the CPPFLAGS environment variable!" >&2;} +- { (exit 1); exit 1; }; } +-fi +- +- +-{ echo "$as_me:$LINENO: checking for gzopen in -lz" >&5 +-echo $ECHO_N "checking for gzopen in -lz... $ECHO_C" >&6; } +-if test "${ac_cv_lib_z_gzopen+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- ac_check_lib_save_LIBS=$LIBS +-LIBS="-lz $LIBS" +-cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +- +-/* Override any GCC internal prototype to avoid an error. +- Use char because int might match the return type of a GCC +- builtin and then its argument prototype would still apply. */ +-#ifdef __cplusplus +-extern "C" +-#endif +-char gzopen (); +-int +-main () +-{ +-return gzopen (); +- ; +- return 0; +-} +-_ACEOF +-rm -f conftest.$ac_objext conftest$ac_exeext +-if { (ac_try="$ac_link" +-case "(($ac_try" in +- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; +- *) ac_try_echo=$ac_try;; +-esac +-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +- (eval "$ac_link") 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && { +- test -z "$ac_c_werror_flag" || +- test ! -s conftest.err +- } && test -s conftest$ac_exeext && +- $as_test_x conftest$ac_exeext; then +- ac_cv_lib_z_gzopen=yes +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 +- +- ac_cv_lib_z_gzopen=no +-fi +- +-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ +- conftest$ac_exeext conftest.$ac_ext +-LIBS=$ac_check_lib_save_LIBS +-fi +-{ echo "$as_me:$LINENO: result: $ac_cv_lib_z_gzopen" >&5 +-echo "${ECHO_T}$ac_cv_lib_z_gzopen" >&6; } +-if test $ac_cv_lib_z_gzopen = yes; then +- LIBS="$LIBS -lz" +-else +- +- { { echo "$as_me:$LINENO: error: Cannot find system's zlib library; please set the LDFLAGS environment variable!" >&5 +-echo "$as_me: error: Cannot find system's zlib library; please set the LDFLAGS environment variable!" >&2;} +- { (exit 1); exit 1; }; } +- +-fi +- +- +- + for ac_prog in gdiff gnudiff diff + do + # Extract the first word of "$ac_prog", so it can be a program name with args. +@@ -7804,6 +7912,59 @@ + + + ++# Extract the first word of "haddock", so it can be a program name with args. ++set dummy haddock; ac_word=$2 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } ++if test "${ac_cv_prog_HADDOCK+set}" = set; then ++ echo $ECHO_N "(cached) $ECHO_C" >&6 ++else ++ if test -n "$HADDOCK"; then ++ ac_cv_prog_HADDOCK="$HADDOCK" # Let the user override the test. ++else ++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ ac_cv_prog_HADDOCK="haddock" ++ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 ++ break 2 ++ fi ++done ++done ++IFS=$as_save_IFS ++ ++fi ++fi ++HADDOCK=$ac_cv_prog_HADDOCK ++if test -n "$HADDOCK"; then ++ { echo "$as_me:$LINENO: result: $HADDOCK" >&5 ++echo "${ECHO_T}$HADDOCK" >&6; } ++else ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } ++fi ++ ++ ++{ echo "$as_me:$LINENO: checking haddock version" >&5 ++echo $ECHO_N "checking haddock version... $ECHO_C" >&6; } ++if test "$HADDOCK" = ""; then ++ HADDOCK_VERSION=0 ++else ++ HADDOCK_VERSION=`haddock --version | head -n 1 | sed 's/^.* \([0-9][0-9]*\)\..*/\1/g'` ++fi ++ ++{ echo "$as_me:$LINENO: result: version $HADDOCK_VERSION" >&5 ++echo "${ECHO_T}version $HADDOCK_VERSION" >&6; } ++if test "$HADDOCK_VERSION" -lt 2; then ++ { echo "$as_me:$LINENO: WARNING: You need haddock 2.0.0 or later to build API docs" >&5 ++echo "$as_me: WARNING: You need haddock 2.0.0 or later to build API docs" >&2;} ++fi ++ ++ + if test -z "${datarootdir}"; then + datarootdir=${datarootdir:-'${prefix}/share'} + +@@ -7818,7 +7979,7 @@ + cat src/Workaround.hs.prefix src/Workaround.hs.beginning src/Workaround.hs.ending > src/Workaround.hs + rm -f src/Workaround.hs.beginning src/Workaround.hs.ending src/Workaround.hs.prefix + +-ac_config_files="$ac_config_files autoconf.mk src/Autoconf.lhs src/ThisVersion.lhs tools/cgi/darcs.cgi tools/cgi/README tools/cgi/cgi.conf" ++ac_config_files="$ac_config_files autoconf.mk src/Autoconf.lhs tools/cgi/darcs.cgi tools/cgi/README tools/cgi/cgi.conf release/darcs.spec" + + cat >confcache <<\_ACEOF + # This file is a shell script that caches the results of configure +@@ -8246,7 +8407,7 @@ + # report actual input values of CONFIG_FILES etc. instead of their + # values after options handling. + ac_log=" +-This file was extended by darcs $as_me 2.0.0, which was ++This file was extended by darcs $as_me 2.0.2, which was + generated by GNU Autoconf 2.61. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES +@@ -8293,7 +8454,7 @@ + _ACEOF + cat >>$CONFIG_STATUS <<_ACEOF + ac_cs_version="\\ +-darcs config.status 2.0.0 ++darcs config.status 2.0.2 + configured by $0, generated by GNU Autoconf 2.61, + with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" + +@@ -8400,10 +8561,10 @@ + "config.command") CONFIG_COMMANDS="$CONFIG_COMMANDS config.command" ;; + "autoconf.mk") CONFIG_FILES="$CONFIG_FILES autoconf.mk" ;; + "src/Autoconf.lhs") CONFIG_FILES="$CONFIG_FILES src/Autoconf.lhs" ;; +- "src/ThisVersion.lhs") CONFIG_FILES="$CONFIG_FILES src/ThisVersion.lhs" ;; + "tools/cgi/darcs.cgi") CONFIG_FILES="$CONFIG_FILES tools/cgi/darcs.cgi" ;; + "tools/cgi/README") CONFIG_FILES="$CONFIG_FILES tools/cgi/README" ;; + "tools/cgi/cgi.conf") CONFIG_FILES="$CONFIG_FILES tools/cgi/cgi.conf" ;; ++ "release/darcs.spec") CONFIG_FILES="$CONFIG_FILES release/darcs.spec" ;; + + *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 + echo "$as_me: error: invalid argument: $ac_config_target" >&2;} +@@ -8502,10 +8663,12 @@ + build_alias!$build_alias$ac_delim + host_alias!$host_alias$ac_delim + target_alias!$target_alias$ac_delim +-DARCS!$DARCS$ac_delim + DARCS_VERSION!$DARCS_VERSION$ac_delim +-DARCS_VERSION_STATE!$DARCS_VERSION_STATE$ac_delim ++DARCS!$DARCS$ac_delim + I_AM_IN_REPO!$I_AM_IN_REPO$ac_delim ++INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim ++INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim ++INSTALL_DATA!$INSTALL_DATA$ac_delim + CC!$CC$ac_delim + CFLAGS!$CFLAGS$ac_delim + LDFLAGS!$LDFLAGS$ac_delim +@@ -8514,15 +8677,11 @@ + EXEEXT!$EXEEXT$ac_delim + OBJEXT!$OBJEXT$ac_delim + CPP!$CPP$ac_delim +-INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim +-INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim +-INSTALL_DATA!$INSTALL_DATA$ac_delim + GREP!$GREP$ac_delim + EGREP!$EGREP$ac_delim + SYS!$SYS$ac_delim + GHC!$GHC$ac_delim + GHCFLAGS!$GHCFLAGS$ac_delim +-GHC_LIBDIR!$GHC_LIBDIR$ac_delim + HAVE_HTTP!$HAVE_HTTP$ac_delim + GHC_SEPARATOR!$GHC_SEPARATOR$ac_delim + USE_MMAP!$USE_MMAP$ac_delim +@@ -8540,19 +8699,17 @@ + HAVE_SENDMAIL!$HAVE_SENDMAIL$ac_delim + HAVE_MAPI!$HAVE_MAPI$ac_delim + USE_COLOR!$USE_COLOR$ac_delim +-AWK!$AWK$ac_delim +-HAVE_LIBCURL!$HAVE_LIBCURL$ac_delim +-HAVE_LIBWWW!$HAVE_LIBWWW$ac_delim + HAVE_CURSES!$HAVE_CURSES$ac_delim +-HAVE_TERMIO_H!$HAVE_TERMIO_H$ac_delim + DIFF!$DIFF$ac_delim + MAKENSIS!$MAKENSIS$ac_delim + BIGENDIAN!$BIGENDIAN$ac_delim ++HADDOCK!$HADDOCK$ac_delim ++HADDOCK_VERSION!$HADDOCK_VERSION$ac_delim + LIBOBJS!$LIBOBJS$ac_delim + LTLIBOBJS!$LTLIBOBJS$ac_delim + _ACEOF + +- if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 85; then ++ if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 81; then + break + elif $ac_last_try; then + { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 +diff -ruN darcs-2.0.0/configure.ac darcs-2.0.2/configure.ac +--- darcs-2.0.0/configure.ac 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/configure.ac 2008-06-24 01:23:13.000000000 +0000 +@@ -4,7 +4,7 @@ + + dnl Remove the datarootdir/docdir tests below if this is increased: + AC_PREREQ([2.59]) +-AC_INIT([darcs], [2.0.0], [bugs@darcs.net]) ++AC_INIT([darcs], [2.0.2], [bugs@darcs.net]) + AC_CONFIG_SRCDIR([src/darcs.lhs]) + + dnl Write our invocation date/time and flags into a file so that +@@ -38,27 +38,19 @@ + dnl indicates whether the number is really correct. + + DARCS_VERSION=$PACKAGE_VERSION ++AC_SUBST(DARCS_VERSION) + + dnl See if we are in a darcs repo and also have darcs available, +-dnl in which case we can try to figure out the release state: ++dnl and whether we're in a repository... + + AC_CHECK_PROG(DARCS, darcs, darcs) +-AC_MSG_CHECKING([the release state]) ++AC_MSG_CHECKING([if we're in a darcs repository]) + if test ! -z "$DARCS" && test -e "_darcs/hashed_inventory"; then +- DARCS_VERSION_STATE=`perl release/determine_release_state.pl $DARCS_VERSION`; +- I_AM_IN_REPO=1 ++ I_AM_IN_REPO=yes + else +- I_AM_IN_REPO=0 +- if test -f "release/STATE"; then +- DARCS_VERSION_STATE=`head -n 1 release/STATE` +- else +- DARCS_VERSION_STATE="unknown" +- fi ++ I_AM_IN_REPO=no + fi +-AC_MSG_RESULT($DARCS_VERSION_STATE) +- +-AC_SUBST(DARCS_VERSION) +-AC_SUBST(DARCS_VERSION_STATE) ++AC_MSG_RESULT($I_AM_IN_REPO) + AC_SUBST(I_AM_IN_REPO) + + dnl Get rid of the lousy '-g -O2' defaults +@@ -67,8 +59,8 @@ + + dnl Find gcc + +-AC_PROG_CC +-AC_PROG_CPP ++dnl AC_PROG_CC ++dnl AC_PROG_CPP + + dnl Make sure a decent "install" is installed. + +@@ -93,15 +85,33 @@ + TRY_COMPILE_GHC([main = putStr "Hello world!\n"],, + AC_MSG_ERROR(Compile failed.)) + +-AC_MSG_CHECKING([where GHC keeps its libraries]) +-GHC_LIBDIR=$(${GHC} --print-libdir) ++dnl Before anything else, we need to decide what core compiler features to ++dnl use, becaues this affects all the tests below (e.g. some packages may ++dnl not be available with profiling) + +-if test -z "$GHC_LIBDIR"; then +- AC_MSG_WARN([Couldn't find GHC library path]) +-else +- AC_MSG_RESULT($GHC_LIBDIR) ++dnl Make default to not profile... ++ ++AC_MSG_CHECKING([whether to profile]) ++AC_ARG_ENABLE(profile, ++ AS_HELP_STRING([--enable-profile],[enable profiling]), ++ profile=$enableval,profile=no) ++AC_MSG_RESULT($profile) ++ ++if test "$profile" = yes; then ++ GHCFLAGS="$GHCFLAGS -prof -auto-all" + fi +-AC_SUBST(GHC_LIBDIR) ++ ++dnl See if we want to use -threaded to get more responsive progress reporting. ++AC_MSG_CHECKING([whether to use the threaded runtime]) ++AC_ARG_ENABLE(threaded,AS_HELP_STRING([--disable-threaded], ++ [don't compile with threaded runtime]),[AC_MSG_RESULT([no])], ++ [MYOLDGHCFLAGS=$GHCFLAGS ++ GHCFLAGS="$GHCFLAGS -threaded" ++ TRY_COMPILE_GHC([main = putStr "Hello world!\n"], ++ [AC_MSG_RESULT([yes])], ++ [AC_MSG_RESULT([failed, threaded runtime disabled]) ++ AC_MSG_WARN([Unable to compile with threaded runtime!]) ++ GHCFLAGS=$MYOLDGHCFLAGS])]) + + INIT_WORKAROUND + +@@ -118,12 +128,17 @@ + + dnl Look for Text.Regex + +-GHC_CHECK_MODULE(Text.Regex( mkRegex, matchRegex, Regex ), text, mkRegex undefined) +-GHC_CHECK_MODULE(Text.Regex( mkRegex, matchRegex, Regex ), regex-compat, mkRegex undefined) ++GHC_CHECK_MODULE(Text.Regex( mkRegex, matchRegex, Regex ), text, mkRegex undefined,, ++ GHC_CHECK_MODULE(Text.Regex( mkRegex, matchRegex, Regex ), regex-compat, mkRegex undefined,, ++ AC_MSG_ERROR(Cannot find Test.Regex; try installing the package text or regex-compat?) ++ ) ++) + + dnl Look for native http library + +-GHC_CHECK_MODULE(Network.HTTP( urlEncode ), HTTP, urlEncode undefined, [HAVE_HTTP=True],[HAVE_HTTP=False]) ++GHC_CHECK_MODULE(Network.HTTP( urlEncode ), HTTP, urlEncode undefined, ++ [HAVE_HTTP=True ++ AC_DEFINE([HAVE_HTTP])],[HAVE_HTTP=False]) + + AC_SUBST(HAVE_HTTP) + +@@ -132,28 +147,34 @@ + GHC_CHECK_MODULE(Test.QuickCheck( quickCheck ), QuickCheck, quickCheck True,, + AC_MSG_ERROR(Cannot find Test.QuickCheck; try installing package quickcheck?)) + +-dnl See if we want to use -threaded to get more responsive progress reporting. +- +-AC_ARG_ENABLE(threaded,AS_HELP_STRING([--enable-threaded], +- [compile with threaded runtime]),[ +- GHCFLAGS="$GHCFLAGS -threaded"],[]) +- + dnl See if we have an adequate version of bytestring +- +-AC_ARG_ENABLE(bytestring,AS_HELP_STRING([--enable-bytestring], +- [use bytestring if it is present]),[ +- GHC_CHECK_MODULE(Data.ByteString.Internal( fromForeignPtr ), bytestring, undefined, +- CPPFLAGS="$CPPFLAGS -DHAVE_BYTESTRING",)],[]) ++GHC_CHECK_MODULE(Data.ByteString.Internal( fromForeignPtr ), ++ bytestring, ++ fromForeignPtr, ++ [bytestringfound=yes], ++ [bytestringfound=no]) ++if test $bytestringfound = "yes"; then ++ AC_MSG_CHECKING([whether to use ByteString]) ++ AC_ARG_ENABLE(bytestring, ++ AS_HELP_STRING([--disable-bytestring], [do not use bytestring, even if it is present]), ++ bytestring=$enableval, ++ bytestring=yes) ++ AC_MSG_RESULT($bytestring) ++ # If we aren't instructed to avoid bytestring, and we did successfully find bytestring... ++ if test $bytestring = "yes"; then ++ CPPFLAGS="$CPPFLAGS -DHAVE_BYTESTRING" ++ fi ++fi + + dnl See if we need the util or mtl packages for Control.Monad + +-GHC_CHECK_MODULE(Control.Monad.Error, util, strMsg "foo" :: String) + GHC_CHECK_MODULE(Control.Monad.Error, mtl, strMsg "foo" :: String,, + AC_MSG_ERROR(Cannot find Control.Monad.Error; try installing package mtl?)) + + dnl See if we need a package for parsec... + +-GHC_CHECK_MODULE(Text.ParserCombinators.Parsec, parsec, errorPos undefined) ++GHC_CHECK_MODULE(Text.ParserCombinators.Parsec, parsec, errorPos undefined,, ++ AC_MSG_ERROR(Cannot find Text.ParserCombinators.Parsec; try installing package parsec?)) + + dnl Check if we need package html + +@@ -163,7 +184,7 @@ + dnl Check if we need package containers + + GHC_CHECK_MODULE(Data.Map, containers, empty,, +- AC_MSG_ERROR(Cannot find Data.Map)) ++ AC_MSG_ERROR(Cannot find Data.Map; try installing package containers?)) + + dnl Deal with systems on which getCurrentDirectory uses '\\' rather than '/': + +@@ -201,22 +222,22 @@ + AC_MSG_RESULT($optimize) + + if test "$optimize" = yes; then +- GHCFLAGS="$GHCFLAGS -O -funbox-strict-fields" ++ GHCFLAGS="$GHCFLAGS -O2 -funbox-strict-fields" + if test "$CFLAGS" = ""; then + CFLAGS="$CFLAGS -O2" + fi + fi + +-dnl Make default to not profile... ++dnl Make default to not use hpc + +-AC_MSG_CHECKING([whether to profile]) +-AC_ARG_ENABLE(profile, +- AS_HELP_STRING([--enable-profile],[enable profiling]), +- profile=$enableval,profile=no) +-AC_MSG_RESULT($profile) ++AC_MSG_CHECKING([whether to use Haskell Program Coverage]) ++AC_ARG_ENABLE(hpc, ++ AS_HELP_STRING([--enable-hpc],[enable Haskell Program Coverage]), ++ hpc=$enableval,hpc=no) ++AC_MSG_RESULT($hpc) + +-if test "$profile" = yes; then +- GHCFLAGS="$GHCFLAGS -prof -auto-all" ++if test "$hpc" = yes; then ++ GHCFLAGS="$GHCFLAGS -fhpc" + fi + + dnl See if we want to use mmap... defaults to yes, except under +@@ -232,7 +253,7 @@ + AC_MSG_RESULT($enable_mmap) + fi + USE_MMAP="True" +-if test '(' "$enable_mmap" = "no" ')' -o '(' "$SYS" = "windows" ')'; then ++if test "$enable_mmap" = "no" || test "$SYS" = "windows" ; then + USE_MMAP="False" + fi + AC_SUBST(USE_MMAP) +@@ -362,10 +383,6 @@ + fi + AC_SUBST(USE_COLOR) + +-dnl Find awk +- +-AC_PROG_AWK +- + dnl Try to link with static versions of libraries. + + AC_ARG_WITH(static-libs, [ --with-static-libs link with static versions of libraries]) +@@ -378,9 +395,11 @@ + AC_MSG_CHECKING([for gadt type witnesses]) + AC_ARG_WITH(type-witnesses, + AS_HELP_STRING([--with-type-witnesses], +- [use GADT type witnesses (EXPERIMENTAL!)])) ++ [use GADT type witnesses (EXPERIMENTAL!)]) ++ ,with_typew=yes ++ ,with_typew=no) + +-if test "$withval" = "yes"; then ++if test "$with_typew" = "yes"; then + GHCFLAGS="$GHCFLAGS -fglasgow-exts" + AC_DEFINE([GADT_WITNESSES]) + AC_MSG_RESULT([yes]) +@@ -388,26 +407,38 @@ + AC_MSG_RESULT([no]) + fi + ++dnl look for zlib library and header. ++dnl Use GHC_CHECK_LIBRARY and not AC_CHECK_HEADER / AC_CHECK_LIB because GHC may ++dnl use a different library and header than the system GCC (on Windows, issue 813) ++ ++GHC_CHECK_LIBRARY([z],[zlib.h deflate],[Int -> Int -> Int],[], ++ [AC_MSG_ERROR(Cannot find system's zlib library; please set the LDFLAGS environment variable!)]) ++ + dnl Find libcurl and other libraries needed by hscurl.c + + AC_ARG_WITH(libcurl, + AS_HELP_STRING([--without-libcurl],[do not use libcurl])) + +-CURLLDFLAGS= ++AC_ARG_WITH(curl, AS_HELP_STRING([--with-curl=],[use curl installed in directory ])) ++ ++CURLLIBS= ++CURL_CONFIG="curl-config" + + if test "$with_libcurl" != "no"; then ++ if test "$with_curl" != ""; then ++ CURL_CONFIG="$with_curl/bin/curl-config" ++ fi ++ + AC_MSG_CHECKING([for libcurl]) +- if eval curl-config --version 2>/dev/null >/dev/null; then +- ver=`curl-config --version | sed -e "s/libcurl //g"` +- if test -z "$AWK"; then +- CURLLDFLAGS=`curl-config --libs | sed "s_-arch @<:@^ @:>@+__"` +- else +- CURLLDFLAGS=`curl-config --libs | $AWK '{sub(/-arch @<:@^ @:>@+/,""); print}'` +- fi +- CURLCFLAGS=`curl-config --cflags` ++ if eval $CURL_CONFIG --version 2>/dev/null >/dev/null; then ++ ver=`$CURL_CONFIG --version | sed -e "s/libcurl //g"` ++ opt="--libs" ++ CURLCFLAGS=`$CURL_CONFIG --cflags` + if test "x$with_static_libs" = "xyes"; then + CURLCFLAGS="$CURLFLAGS -DCURL_STATICLIB" ++ opt="--static-libs" + fi ++ CURLLIBS=`$CURL_CONFIG $opt | sed "s_-arch @<:@^ @:>@@<:@^ @:>@*__"` + AC_MSG_RESULT($ver) + else + AC_MSG_RESULT(FAILED) +@@ -415,43 +446,47 @@ + fi + fi + +-if test "$CURLLDFLAGS" = ""; then +- HAVE_LIBCURL=False +-else ++if test "$CURLLIBS" != ""; then ++ # we enable curl ++ CPPFLAGS="$CPPFLAGS -DHAVE_CURL" ++ + CFLAGS="$CFLAGS $CURLCFLAGS" +- LDFLAGS="$LDFLAGS $CURLLDFLAGS" ++ LIBS="$LIBS $CURLLIBS" ++ old_LIBS="$LIBS" + AC_CHECK_LIB(curl, curl_global_init, +- [HAVE_LIBCURL=True], +- AC_MSG_ERROR(Cannot actually use libcurl; try specifying --without-libcurl.), +- $CURLCFLAGS $CURLLDFLAGS) +-fi +-AC_SUBST(HAVE_LIBCURL) ++ [], ++ AC_MSG_ERROR(Cannot actually use libcurl; try specifying --without-libcurl.)) ++ AC_CHECK_LIB(curl, curl_multi_timeout, ++ CPPFLAGS="$CPPFLAGS -DCURL_MULTI_TIMEOUT") ++ LIBS="$old_LIBS" + +-AC_ARG_WITH(curl_pipelining, ++ # Check if we want pipelining enabled... ++ AC_ARG_WITH(curl_pipelining, + AS_HELP_STRING([--with-curl-pipelining],[use curl pipelining (requires libcurl >= 7.18.0)])) + +-if test "$with_curl_pipelining" == "yes"; then +- AC_MSG_CHECKING([for libcurl pipelining]) +- if test "$HAVE_LIBCURL" == "True"; then +- let vernum=0x0`curl-config --vernum` +- let minver=0x071200 +- if test $vernum -ge $minver; then +- CPPFLAGS="$CPPFLAGS -DCURL_PIPELINING" +- CURL_PIPELINING=True +- AC_MSG_RESULT([yes]) +- else +- AC_MSG_RESULT([no]) +- AC_MSG_WARN([Requires libcurl version >= 7.18.0]) +- fi +- else +- AC_MSG_RESULT([no]) +- AC_MSG_WARN([Requires libcurl]) +- fi +-fi +- +-if test "$HAVE_LIBCURL" == "True"; then +- AC_CHECK_LIB(curl, curl_multi_timeout, +- CPPFLAGS="$CPPFLAGS -DCURL_MULTI_TIMEOUT") ++ if test "$with_curl_pipelining" == "yes"; then ++ AC_MSG_CHECKING([for libcurl pipelining]) ++ let vernum=0x0`$CURL_CONFIG --vernum` ++ let minver=0x071200 ++ if test $vernum -ge $minver; then ++ CPPFLAGS="$CPPFLAGS -DCURL_PIPELINING" ++ CURL_PIPELINING=True ++ AC_MSG_RESULT([yes]) ++ else ++ AC_MSG_RESULT([no]) ++ AC_MSG_WARN([Requires libcurl version >= 7.18.0]) ++ fi ++ fi ++ ++ # Check if we want curl debug enabled... ++ AC_MSG_CHECKING([whether to do libcurl debugging]) ++ AC_ARG_ENABLE(curl-debug, ++ AS_HELP_STRING([--enable-curl-debug],[enable libcurl debug mode]), ++ curl_debug=$enableval, curl_debug=no) ++ AC_MSG_RESULT($curl_debug) ++ if test "$curl_debug" = "yes"; then ++ CPPFLAGS="$CPPFLAGS -DCURL_DEBUG" ++ fi + fi + + dnl Find libwww and other libraries needed by hswww.c +@@ -459,24 +494,30 @@ + AC_ARG_WITH(libwww, + AS_HELP_STRING([--with-libwww],[use libwww])) + +-HAVE_LIBWWW=False +- + if test "$with_libwww" == "yes"; then + AC_MSG_CHECKING([for libwww]) + if eval libwww-config --version 2>/dev/null >/dev/null; then +- HAVE_LIBWWW=True ++ CPPFLAGS="$CPPFLAGS -DHAVE_LIBWWW" + WWWVERSION=`libwww-config --version` +- LDFLAGS="$LDFLAGS `libwww-config --libs`" ++ LIBS="$LIBS `libwww-config --libs`" + CFLAGS="$CFLAGS `libwww-config --cflags`" + AC_MSG_RESULT($WWWVERSION) ++ ++ # Check if we want libwww debug enabled... ++ AC_MSG_CHECKING([whether to do libwww debugging]) ++ AC_ARG_ENABLE(libwww-debug, ++ AS_HELP_STRING([--enable-libwww-debug],[enable libwww debug mode]), ++ libwww_debug=$enableval, libwww_debug=no) ++ AC_MSG_RESULT($libwww_debug) ++ if test "$libwww_debug" = "yes"; then ++ CPPFLAGS="$CPPFLAGS -DLIBWWW_DEBUG" ++ fi + else + AC_MSG_RESULT(FAILED) + AC_MSG_WARN([libwww-config was not found]) + fi + fi + +-AC_SUBST(HAVE_LIBWWW) +- + dnl Check for libcurses... + + AC_ARG_ENABLE(libcurses, [ --without-curses do not use libcurses]) +@@ -489,22 +530,14 @@ + [AC_SEARCH_LIBS(tgetent, [curses ncurses], [HAVE_CURSES=True])], , + [#include + ]) +- AC_CHECK_HEADERS([termio.h], [HAVE_TERMIO_H=True]) dnl see External.hs + if test "$HAVE_CURSES" != "True"; then + AC_MSG_WARN([Cannot find term.h, disabling color.]) ++ else ++ # The precondition for this is: we both have curses available and not disabled ++ CPPFLAGS="$CPPFLAGS -DHAVE_CURSES" + fi + fi + AC_SUBST(HAVE_CURSES) +-AC_SUBST(HAVE_TERMIO_H) +- +-dnl look for zlib library and header. +- +-AC_CHECK_HEADER(zlib.h, :, +- AC_MSG_ERROR([Cannot find zlib.h; please set the CPPFLAGS environment variable!])) +-AC_CHECK_LIB(z, gzopen, LIBS="$LIBS -lz", +- [ +- AC_MSG_ERROR(Cannot find system's zlib library; please set the LDFLAGS environment variable!) +- ]) + + dnl Look for a suitable diff command + +@@ -519,6 +552,21 @@ + AC_C_BIGENDIAN([BIGENDIAN="True"],[BIGENDIAN="False"]) + AC_SUBST(BIGENDIAN) + ++dnl Check for a haddock 2.0.0 or more recent ++ ++AC_CHECK_PROG(HADDOCK, haddock, haddock) ++AC_MSG_CHECKING([haddock version]) ++if test "$HADDOCK" = ""; then ++ HADDOCK_VERSION=0 ++else ++ HADDOCK_VERSION=`haddock --version | head -n 1 | sed 's/^.* \(@<:@0-9@:>@@<:@0-9@:>@*\)\..*/\1/g'` ++fi ++AC_SUBST(HADDOCK_VERSION) ++AC_MSG_RESULT(version $HADDOCK_VERSION) ++if test "$HADDOCK_VERSION" -lt 2; then ++ AC_MSG_WARN([You need haddock 2.0.0 or later to build API docs]) ++fi ++ + dnl Write results + + dnl Remove these two tests when autoconf >2.59 can be required. +@@ -533,8 +581,9 @@ + + AC_DEFUN([AC_DATAROOTDIR_CHECKED]) + OUTPUT_WORKAROUND +-AC_CONFIG_FILES([autoconf.mk src/Autoconf.lhs src/ThisVersion.lhs +- tools/cgi/darcs.cgi tools/cgi/README tools/cgi/cgi.conf]) ++AC_CONFIG_FILES([autoconf.mk src/Autoconf.lhs ++ tools/cgi/darcs.cgi tools/cgi/README tools/cgi/cgi.conf ++ release/darcs.spec]) + AC_OUTPUT + + cat <<[EOF] +diff -ruN darcs-2.0.0/Context.hs darcs-2.0.2/Context.hs +--- darcs-2.0.0/Context.hs 2008-04-07 15:08:48.000000000 +0000 ++++ darcs-2.0.2/Context.hs 1970-01-01 00:00:00.000000000 +0000 +@@ -1,9 +0,0 @@ +-module Context (context) where +-context :: String +-context = "# configured Mon Apr 7 11:03:38 EDT 2008\n\ +- \./configure /usr/local/share/config.site /usr/local/etc/config.site\n\ +- \\n\ +- \Context:\n\ +- \\n\ +- \[TAG 2.0.0\n\ +- \David Roundy **20080407150638] " +diff -ruN darcs-2.0.0/.depend darcs-2.0.2/.depend +--- darcs-2.0.0/.depend 2008-04-07 15:08:48.000000000 +0000 ++++ darcs-2.0.2/.depend 2008-06-24 01:23:36.000000000 +0000 +@@ -32,22 +32,19 @@ + src/FileName.o : src/UTF8.hi + src/Printer.o : src/Printer.lhs + src/Printer.o : src/FastPackedString.hi +-src/Stringalike.o : src/Stringalike.hs +-src/Stringalike.o : src/FastPackedString.hi +-src/Darcs/Patch/ReadMonads.o : src/Darcs/Patch/ReadMonads.hs +-src/Darcs/Patch/ReadMonads.o : src/Stringalike.hi + src/Crypt/SHA256.o : src/Crypt/SHA256.hs + src/Crypt/SHA256.o : src/FastPackedString.hi + src/Darcs/Email.o : src/Darcs/Email.hs + src/Darcs/Email.o : src/FastPackedString.hi + src/Darcs/Email.o : src/Printer.hi ++src/Darcs/Patch/ReadMonads.o : src/Darcs/Patch/ReadMonads.hs ++src/Darcs/Patch/ReadMonads.o : src/FastPackedString.hi + src/Darcs/Patch/Check.o : src/Darcs/Patch/Check.lhs + src/Darcs/Patch/Check.o : src/FastPackedString.hi + src/SHA1.o : src/SHA1.lhs + src/SHA1.o : src/FastPackedString.hi + src/SHA1.o : src/Autoconf.hi + src/Darcs/Patch/Info.o : src/Darcs/Patch/Info.lhs +-src/Darcs/Patch/Info.o : src/Darcs/Patch/ReadMonads.hi + src/Darcs/Patch/Info.o : src/SHA1.hi + src/Darcs/Patch/Info.o : src/OldDate.hi + src/Darcs/Patch/Info.o : src/Printer.hi +@@ -84,7 +81,6 @@ + src/Darcs/Utils.o : src/Darcs/SignalHandler.hi + src/Darcs/Compat.o : src/Darcs/Compat.hs + src/Darcs/Compat.o : src/Darcs/SignalHandler.hi +-src/Darcs/Compat.o : src/Workaround.hi + src/Darcs/Compat.o : src/Darcs/Utils.hi + src/Darcs/FilePathUtils.o : src/Darcs/FilePathUtils.hs + src/Darcs/FilePathUtils.o : src/Darcs/Bug.hi +@@ -152,10 +148,10 @@ + src/Darcs/External.o : src/Darcs/Flags.hi + src/Darcs/External.o : src/Workaround.hi + src/Darcs/External.o : src/Autoconf.hi +-src/Darcs/ColourPrinter.o : src/Darcs/ColourPrinter.lhs +-src/Darcs/ColourPrinter.o : src/FastPackedString.hi +-src/Darcs/ColourPrinter.o : src/Printer.hi +-src/Darcs/ColourPrinter.o : src/Darcs/External.hi ++src/Darcs/ColorPrinter.o : src/Darcs/ColorPrinter.lhs ++src/Darcs/ColorPrinter.o : src/FastPackedString.hi ++src/Darcs/ColorPrinter.o : src/Printer.hi ++src/Darcs/ColorPrinter.o : src/Darcs/External.hi + src/Darcs/IO.o : src/Darcs/IO.lhs + src/Darcs/IO.o : src/Workaround.hi + src/Darcs/IO.o : src/Darcs/Lock.hi +@@ -179,6 +175,7 @@ + src/Darcs/SlurpDirectory.o : src/Workaround.hi + src/Darcs/Patch/Patchy.o : src/Darcs/Patch/Patchy.lhs + src/Darcs/Patch/Patchy.o : src/FastPackedString.hi ++src/Darcs/Patch/Patchy.o : src/English.hi + src/Darcs/Patch/Patchy.o : src/Darcs/Flags.hi + src/Darcs/Patch/Patchy.o : src/Darcs/IO.hi + src/Darcs/Patch/Patchy.o : src/Darcs/Lock.hi +@@ -255,6 +252,7 @@ + src/Darcs/RemoteApply.o : src/Darcs/Flags.hi + src/Darcs/Repository/Format.o : src/Darcs/Repository/Format.lhs + src/Darcs/Repository/Format.o : src/Darcs/Bug.hi ++src/Darcs/Repository/Format.o : src/Darcs/Global.hi + src/Darcs/Repository/Format.o : src/Darcs/Progress.hi + src/Darcs/Repository/Format.o : src/Darcs/Utils.hi + src/Darcs/Repository/Format.o : src/Darcs/Lock.hi +@@ -265,9 +263,11 @@ + src/Darcs/Repository/Motd.o : src/Darcs/Repository/Motd.lhs + src/Darcs/Repository/Motd.o : src/Darcs/Utils.hi + src/Darcs/Repository/Motd.o : src/FastPackedString.hi ++src/Darcs/Repository/Motd.o : src/Darcs/Global.hi + src/Darcs/Repository/Motd.o : src/Darcs/External.hi + src/Darcs/Repository/Motd.o : src/Darcs/Flags.hi + src/Darcs/Repository/Prefs.o : src/Darcs/Repository/Prefs.lhs ++src/Darcs/Repository/Prefs.o : src/Darcs/Global.hi + src/Darcs/Repository/Prefs.o : src/FastPackedString.hi + src/Darcs/Repository/Prefs.o : src/Crypt/SHA256.hi + src/Darcs/Repository/Prefs.o : src/SHA1.hi +@@ -281,13 +281,13 @@ + src/Darcs/Repository/Prefs.o : src/Darcs/Utils.hi + src/Darcs/Repository/Prefs.o : src/Darcs/Flags.hi + src/Darcs/Repository/Prefs.o : src/Darcs/SlurpDirectory.hi +-src/Darcs/Repository/Prefs.o : src/Stringalike.hi + src/Darcs/Repository/Prefs.o : src/Workaround.hi + src/Darcs/Patch/Apply.o : src/Darcs/Patch/Apply.lhs + src/Darcs/Patch/Apply.o : src/Darcs/Patch/Ordered.hi + src/Darcs/Patch/Apply.o : src/Darcs/Bug.hi + src/Darcs/Patch/Apply.o : src/Darcs/FilePathMonad.hi + src/Darcs/Patch/Apply.o : src/Darcs/IO.hi ++src/Darcs/Patch/Apply.o : src/Darcs/Global.hi + src/Darcs/Patch/Apply.o : src/Darcs/Repository/Prefs.hi + src/Darcs/Patch/Apply.o : src/RegChars.hi + src/Darcs/Patch/Apply.o : src/Darcs/SlurpDirectory.hi +@@ -315,7 +315,6 @@ + src/Darcs/Patch/Viewing.o : src/Darcs/SlurpDirectory.hi + src/Darcs/Patch/Non.o : src/Darcs/Patch/Non.lhs + src/Darcs/Patch/Non.o : src/Printer.hi +-src/Darcs/Patch/Non.o : src/FastPackedString.hi + src/Darcs/Patch/Non.o : src/Darcs/Sealed.hi + src/Darcs/Patch/Non.o : src/Darcs/Show.hi + src/Darcs/Patch/Non.o : src/Darcs/Patch/Permutations.hi +@@ -327,13 +326,13 @@ + src/Darcs/Patch/Non.o : src/Darcs/Patch/Prim.hi + src/Darcs/Patch/Real.o : src/Darcs/Patch/Real.lhs + src/Darcs/Patch/Real.o : src/Darcs/Bug.hi +-src/Darcs/Patch/Real.o : src/Darcs/ColourPrinter.hi ++src/Darcs/Patch/Real.o : src/Darcs/ColorPrinter.hi + src/Darcs/Patch/Real.o : src/Printer.hi + src/Darcs/Patch/Real.o : src/Darcs/Show.hi + src/Darcs/Patch/Real.o : src/Darcs/Sealed.hi + src/Darcs/Patch/Real.o : src/Darcs/Utils.hi + src/Darcs/Patch/Real.o : src/Darcs/Patch/ReadMonads.hi +-src/Darcs/Patch/Real.o : src/Stringalike.hi ++src/Darcs/Patch/Real.o : src/FastPackedString.hi + src/Darcs/Patch/Real.o : src/Darcs/Patch/Permutations.hi + src/Darcs/Patch/Real.o : src/Darcs/Patch/Non.hi + src/Darcs/Patch/Real.o : src/Darcs/Patch/Commute.hi +@@ -353,6 +352,7 @@ + src/Darcs/Patch.o : src/Darcs/Patch/Core.hi + src/Darcs/Patch.o : src/Darcs/PopulationData.hi + src/Darcs/CommandsAux.o : src/Darcs/CommandsAux.lhs ++src/Darcs/CommandsAux.o : src/Darcs/Global.hi + src/Darcs/CommandsAux.o : src/Darcs/Patch/Ordered.hi + src/Darcs/CommandsAux.o : src/Darcs/Patch.hi + src/Darcs/CommandsAux.o : src/FileName.hi +@@ -481,7 +481,7 @@ + src/Darcs/Patch/QuickCheck.o : src/Darcs/Sealed.hi + src/Darcs/Patch/QuickCheck.o : src/FastPackedString.hi + src/Darcs/Patch/Unit.o : src/Darcs/Patch/Unit.lhs +-src/Darcs/Patch/Unit.o : src/Darcs/ColourPrinter.hi ++src/Darcs/Patch/Unit.o : src/Darcs/ColorPrinter.hi + src/Darcs/Patch/Unit.o : src/Printer.hi + src/Darcs/Patch/Unit.o : src/Darcs/Patch/QuickCheck.hi + src/Darcs/Patch/Unit.o : src/Darcs/Patch/Prim.hi +@@ -511,6 +511,7 @@ + src/Darcs/Repository/InternalTypes.o : src/Darcs/Flags.hi + src/Darcs/Repository/InternalTypes.o : src/Darcs/Repository/Prefs.hi + src/Darcs/Repository/HashedRepo.o : src/Darcs/Repository/HashedRepo.lhs ++src/Darcs/Repository/HashedRepo.o : src/Darcs/Global.hi + src/Darcs/Repository/HashedRepo.o : src/Darcs/Sealed.hi + src/Darcs/Repository/HashedRepo.o : src/Darcs/Patch/Ordered.hi + src/Darcs/Repository/HashedRepo.o : src/Darcs/Bug.hi +@@ -537,6 +538,7 @@ + src/Darcs/Repository/HashedRepo.o : src/Workaround.hi + src/Darcs/Repository/Pristine.o : src/Darcs/Repository/Pristine.lhs + src/Darcs/Repository/Pristine.o : src/Darcs/Bug.hi ++src/Darcs/Repository/Pristine.o : src/Darcs/Global.hi + src/Darcs/Repository/Pristine.o : src/Darcs/Repository/InternalTypes.hi + src/Darcs/Repository/Pristine.o : src/Darcs/External.hi + src/Darcs/Repository/Pristine.o : src/SHA1.hi +@@ -557,6 +559,7 @@ + src/Darcs/Repository/DarcsRepo.o : src/Printer.hi + src/Darcs/Repository/DarcsRepo.o : src/Darcs/Progress.hi + src/Darcs/Repository/DarcsRepo.o : src/Darcs/Utils.hi ++src/Darcs/Repository/DarcsRepo.o : src/Darcs/Global.hi + src/Darcs/Repository/DarcsRepo.o : src/Darcs/Repository/Pristine.hi + src/Darcs/Repository/DarcsRepo.o : src/Darcs/Patch/Depends.hi + src/Darcs/Repository/DarcsRepo.o : src/Darcs/Flags.hi +@@ -577,6 +580,7 @@ + src/Darcs/Repository/DarcsRepo.o : src/Workaround.hi + src/Darcs/Repository/Internal.o : src/Darcs/Repository/Internal.lhs + src/Darcs/Repository/Internal.o : src/Darcs/Bug.hi ++src/Darcs/Repository/Internal.o : src/Darcs/Global.hi + src/Darcs/Repository/Internal.o : src/Darcs/Repository/InternalTypes.hi + src/Darcs/Repository/Internal.o : src/Darcs/Sealed.hi + src/Darcs/Repository/Internal.o : src/Darcs/Lock.hi +@@ -617,6 +621,7 @@ + src/Darcs/Repository/Checkpoint.o : src/Darcs/Sealed.hi + src/Darcs/Repository/Checkpoint.o : src/Darcs/Bug.hi + src/Darcs/Repository/Checkpoint.o : src/Printer.hi ++src/Darcs/Repository/Checkpoint.o : src/Darcs/Global.hi + src/Darcs/Repository/Checkpoint.o : src/Darcs/FilePathUtils.hi + src/Darcs/Repository/Checkpoint.o : src/Darcs/Utils.hi + src/Darcs/Repository/Checkpoint.o : src/Darcs/Repository/Prefs.hi +@@ -635,6 +640,8 @@ + src/Darcs/Repository/Checkpoint.o : src/Darcs/Hopefully.hi + src/Darcs/Repository/Checkpoint.o : src/Workaround.hi + src/Darcs/Repository.o : src/Darcs/Repository.lhs ++src/Darcs/Repository.o : src/Darcs/Bug.hi ++src/Darcs/Repository.o : src/Darcs/Global.hi + src/Darcs/Repository.o : src/Darcs/Flags.hi + src/Darcs/Repository.o : src/Darcs/Sealed.hi + src/Darcs/Repository.o : src/Darcs/Lock.hi +@@ -656,6 +663,7 @@ + src/Darcs/Repository.o : src/Darcs/Repository/Internal.hi + src/Darcs/Arguments.o : src/Darcs/Arguments.lhs + src/Darcs/Arguments.o : src/Printer.hi ++src/Darcs/Arguments.o : src/Darcs/Global.hi + src/Darcs/Arguments.o : src/Darcs/SlurpDirectory.hi + src/Darcs/Arguments.o : src/Darcs/Repository/HashedRepo.hi + src/Darcs/Arguments.o : src/Darcs/Repository.hi +@@ -665,24 +673,30 @@ + src/Darcs/Arguments.o : src/Darcs/FilePathUtils.hi + src/Darcs/Arguments.o : src/Darcs/URL.hi + src/Darcs/Arguments.o : src/Darcs/Repository/Prefs.hi +-src/Darcs/Arguments.o : src/Darcs/Progress.hi + src/Darcs/Arguments.o : src/Darcs/Utils.hi + src/Darcs/Arguments.o : src/Darcs/Patch.hi + src/Darcs/Arguments.o : src/Darcs/Patch/Ordered.hi + src/Darcs/Arguments.o : src/Darcs/Patch/Info.hi + src/Darcs/Arguments.o : src/Darcs/Patch.hi + src/Darcs/Arguments.o : src/Darcs/Hopefully.hi ++src/Darcs/Arguments.o : src/Darcs/Progress.hi ++src/Darcs/Arguments.o : src/Darcs/Patch.hi ++src/Darcs/Arguments.o : src/Printer.hi + src/Darcs/ArgumentDefaults.o : src/Darcs/ArgumentDefaults.lhs + src/Darcs/ArgumentDefaults.o : src/Darcs/Repository/Prefs.hi + src/Darcs/ArgumentDefaults.o : src/Darcs/Arguments.hi + src/Darcs/PrintPatch.o : src/Darcs/PrintPatch.lhs +-src/Darcs/PrintPatch.o : src/Darcs/Utils.hi +-src/Darcs/PrintPatch.o : src/Darcs/Lock.hi +-src/Darcs/PrintPatch.o : src/Darcs/ColourPrinter.hi ++src/Darcs/PrintPatch.o : src/Darcs/External.hi ++src/Darcs/PrintPatch.o : src/Darcs/ColorPrinter.hi + src/Darcs/PrintPatch.o : src/Printer.hi + src/Darcs/PrintPatch.o : src/Darcs/Arguments.hi + src/Darcs/PrintPatch.o : src/Darcs/SlurpDirectory.hi + src/Darcs/PrintPatch.o : src/Darcs/Patch.hi ++src/Darcs/Test.o : src/Darcs/Test.lhs ++src/Darcs/Test.o : src/Darcs/Utils.hi ++src/Darcs/Test.o : src/Darcs/Repository/Prefs.hi ++src/Darcs/Test.o : src/Darcs/Arguments.hi ++src/Darcs/Test.o : src/Darcs/Utils.hi + src/Darcs/Match.o : src/Darcs/Match.lhs + src/Darcs/Match.o : src/Darcs/Bug.hi + src/Darcs/Match.o : src/Darcs/Sealed.hi +@@ -703,6 +717,19 @@ + src/Darcs/Match.o : src/Darcs/Patch.hi + src/Darcs/Match.o : src/Darcs/Patch/Info.hi + src/Darcs/Match.o : src/Darcs/Hopefully.hi ++src/Darcs/Commands.o : src/Darcs/Commands.lhs ++src/Darcs/Commands.o : src/Printer.hi ++src/Darcs/Commands.o : src/Darcs/Match.hi ++src/Darcs/Commands.o : src/Darcs/ArgumentDefaults.hi ++src/Darcs/Commands.o : src/Darcs/Utils.hi ++src/Darcs/Commands.o : src/Darcs/RepoPath.hi ++src/Darcs/Commands.o : src/Darcs/External.hi ++src/Darcs/Commands.o : src/Darcs/Arguments.hi ++src/Darcs/Commands.o : src/Darcs/SignalHandler.hi ++src/Darcs/Commands.o : src/Workaround.hi ++src/Darcs/Commands.o : src/Darcs/Progress.hi ++src/Darcs/Commands.o : src/Darcs/Global.hi ++src/Darcs/Commands.o : src/Darcs/Test.hi + src/Darcs/Population.o : src/Darcs/Population.lhs + src/Darcs/Population.o : src/Darcs/Bug.hi + src/Darcs/Population.o : src/Printer.hi +@@ -718,30 +745,6 @@ + src/Darcs/Population.o : src/Darcs/Hopefully.hi + src/Darcs/Population.o : src/Darcs/Utils.hi + src/Darcs/Population.o : src/FastPackedString.hi +-src/Darcs/Test.o : src/Darcs/Test.lhs +-src/Darcs/Test.o : src/Darcs/Utils.hi +-src/Darcs/Test.o : src/Darcs/Lock.hi +-src/Darcs/Test.o : src/Darcs/Repository/Prefs.hi +-src/Darcs/Test.o : src/Darcs/Arguments.hi +-src/Darcs/Test.o : src/Darcs/Repository.hi +-src/Darcs/Test.o : src/Darcs/Patch/Info.hi +-src/Darcs/Test.o : src/Darcs/Patch/Core.hi +-src/Darcs/Test.o : src/Darcs/Patch.hi +-src/Darcs/Test.o : src/Workaround.hi +-src/Darcs/Test.o : src/Darcs/Utils.hi +-src/Darcs/Commands.o : src/Darcs/Commands.lhs +-src/Darcs/Commands.o : src/Printer.hi +-src/Darcs/Commands.o : src/Darcs/Match.hi +-src/Darcs/Commands.o : src/Darcs/ArgumentDefaults.hi +-src/Darcs/Commands.o : src/Darcs/Utils.hi +-src/Darcs/Commands.o : src/Darcs/RepoPath.hi +-src/Darcs/Commands.o : src/Darcs/External.hi +-src/Darcs/Commands.o : src/Darcs/Arguments.hi +-src/Darcs/Commands.o : src/Darcs/SignalHandler.hi +-src/Darcs/Commands.o : src/Workaround.hi +-src/Darcs/Commands.o : src/Darcs/Progress.hi +-src/Darcs/Commands.o : src/Darcs/Global.hi +-src/Darcs/Commands.o : src/Darcs/Test.hi + src/Darcs/SelectChanges.o : src/Darcs/SelectChanges.lhs + src/Darcs/SelectChanges.o : src/Darcs/Bug.hi + src/Darcs/SelectChanges.o : src/Printer.hi +@@ -797,7 +800,7 @@ + src/Darcs/Commands/Changes.o : src/Darcs/Sealed.hi + src/Darcs/Commands/Changes.o : src/Darcs/SelectChanges.hi + src/Darcs/Commands/Changes.o : src/Darcs/Progress.hi +-src/Darcs/Commands/Changes.o : src/Darcs/ColourPrinter.hi ++src/Darcs/Commands/Changes.o : src/Darcs/ColorPrinter.hi + src/Darcs/Commands/Changes.o : src/Printer.hi + src/Darcs/Commands/Changes.o : src/FastPackedString.hi + src/Darcs/Commands/Changes.o : src/Darcs/Commands/Annotate.hi +@@ -933,6 +936,11 @@ + src/Darcs/Commands/SetPref.o : src/Darcs/Repository.hi + src/Darcs/Commands/SetPref.o : src/Darcs/Arguments.hi + src/Darcs/Commands/SetPref.o : src/Darcs/Commands.hi ++src/Darcs/Commands/ShowBug.o : src/Darcs/Commands/ShowBug.lhs ++src/Darcs/Commands/ShowBug.o : src/Darcs/Bug.hi ++src/Darcs/Commands/ShowBug.o : src/Darcs/Repository.hi ++src/Darcs/Commands/ShowBug.o : src/Darcs/Arguments.hi ++src/Darcs/Commands/ShowBug.o : src/Darcs/Commands.hi + src/Darcs/Commands/ShowContents.o : src/Darcs/Commands/ShowContents.lhs + src/Darcs/Commands/ShowContents.o : src/Darcs/Lock.hi + src/Darcs/Commands/ShowContents.o : src/Darcs/Repository.hi +@@ -972,6 +980,7 @@ + src/Darcs/Commands/TrackDown.o : src/Darcs/Commands.hi + src/Darcs/Commands/TransferMode.o : src/Darcs/Commands/TransferMode.lhs + src/Darcs/Commands/TransferMode.o : src/FastPackedString.hi ++src/Darcs/Commands/TransferMode.o : src/Darcs/Global.hi + src/Darcs/Commands/TransferMode.o : src/Darcs/Progress.hi + src/Darcs/Commands/TransferMode.o : src/Darcs/Repository.hi + src/Darcs/Commands/TransferMode.o : src/Darcs/Arguments.hi +@@ -1078,6 +1087,7 @@ + src/Darcs/Commands/Check.o : src/Workaround.hi + src/Darcs/Commands/Optimize.o : src/Darcs/Commands/Optimize.lhs + src/Darcs/Commands/Optimize.o : src/Darcs/Bug.hi ++src/Darcs/Commands/Optimize.o : src/Darcs/Global.hi + src/Darcs/Commands/Optimize.o : src/Darcs/Sealed.hi + src/Darcs/Commands/Optimize.o : src/Darcs/Repository/Pristine.hi + src/Darcs/Commands/Optimize.o : src/Darcs/SlurpDirectory.hi +@@ -1103,11 +1113,14 @@ + src/Darcs/Commands/Repair.o : src/Darcs/Commands/Check.hi + src/Darcs/Commands/Repair.o : src/Darcs/Lock.hi + src/Darcs/Commands/Repair.o : src/Darcs/Patch/Depends.hi +-src/Darcs/Commands/Repair.o : src/Darcs/Repository/ApplyPatches.hi ++src/Darcs/Commands/Repair.o : src/Darcs/Progress.hi ++src/Darcs/Commands/Repair.o : src/Darcs/Global.hi + src/Darcs/Commands/Repair.o : src/Darcs/Repository/Checkpoint.hi + src/Darcs/Commands/Repair.o : src/Darcs/Repository.hi + src/Darcs/Commands/Repair.o : src/Darcs/Hopefully.hi + src/Darcs/Commands/Repair.o : src/Darcs/Patch/Ordered.hi ++src/Darcs/Commands/Repair.o : src/Darcs/Patch/Info.hi ++src/Darcs/Commands/Repair.o : src/Darcs/Patch/Patchy.hi + src/Darcs/Commands/Repair.o : src/Darcs/Patch.hi + src/Darcs/Commands/Repair.o : src/Darcs/Arguments.hi + src/Darcs/Commands/Repair.o : src/Darcs/Commands.hi +@@ -1128,6 +1141,7 @@ + src/Darcs/Commands/ShowRepo.o : src/Darcs/Sealed.hi + src/Darcs/Commands/ShowRepo.o : src/Darcs/Patch/Ordered.hi + src/Darcs/Commands/ShowRepo.o : src/Darcs/Patch.hi ++src/Darcs/Commands/ShowRepo.o : src/Darcs/Global.hi + src/Darcs/Commands/ShowRepo.o : src/Darcs/Repository/Motd.hi + src/Darcs/Commands/ShowRepo.o : src/Darcs/Repository/Prefs.hi + src/Darcs/Commands/ShowRepo.o : src/Darcs/Repository/Pristine.hi +@@ -1138,6 +1152,7 @@ + src/Darcs/Commands/ShowRepo.o : src/Darcs/Arguments.hi + src/Darcs/Commands/ShowRepo.o : src/FastPackedString.hi + src/Darcs/Commands/Init.o : src/Darcs/Commands/Init.lhs ++src/Darcs/Commands/Init.o : src/Darcs/Global.hi + src/Darcs/Commands/Init.o : src/Darcs/Repository.hi + src/Darcs/Commands/Init.o : src/Darcs/Repository/DarcsRepo.hi + src/Darcs/Commands/Init.o : src/Darcs/Lock.hi +@@ -1154,7 +1169,7 @@ + src/Darcs/Commands/Convert.o : src/Workaround.hi + src/Darcs/Commands/Convert.o : src/Darcs/Lock.hi + src/Darcs/Commands/Convert.o : src/Darcs/SlurpDirectory.hi +-src/Darcs/Commands/Convert.o : src/Darcs/ColourPrinter.hi ++src/Darcs/Commands/Convert.o : src/Darcs/ColorPrinter.hi + src/Darcs/Commands/Convert.o : src/Printer.hi + src/Darcs/Commands/Convert.o : src/Darcs/Sealed.hi + src/Darcs/Commands/Convert.o : src/Darcs/Progress.hi +@@ -1167,6 +1182,7 @@ + src/Darcs/Commands/Convert.o : src/Darcs/Patch/Ordered.hi + src/Darcs/Commands/Convert.o : src/Darcs/Patch.hi + src/Darcs/Commands/Convert.o : src/Darcs/FilePathUtils.hi ++src/Darcs/Commands/Convert.o : src/Darcs/Global.hi + src/Darcs/Commands/Convert.o : src/Darcs/Repository.hi + src/Darcs/Commands/Convert.o : src/Darcs/Arguments.hi + src/Darcs/Commands/Convert.o : src/Darcs/Commands/Init.hi +@@ -1219,12 +1235,10 @@ + src/Darcs/Commands/Diff.o : src/Workaround.hi + src/Darcs/Commands/Get.o : src/Darcs/Commands/Get.lhs + src/Darcs/Commands/Get.o : src/Darcs/Bug.hi +-src/Darcs/Commands/Get.o : src/FastPackedString.hi +-src/Darcs/Commands/Get.o : src/Workaround.hi ++src/Darcs/Commands/Get.o : src/Darcs/Global.hi + src/Darcs/Commands/Get.o : src/Darcs/URL.hi + src/Darcs/Commands/Get.o : src/Darcs/Sealed.hi + src/Darcs/Commands/Get.o : src/Darcs/Lock.hi +-src/Darcs/Commands/Get.o : src/Darcs/SlurpDirectory.hi + src/Darcs/Commands/Get.o : src/Printer.hi + src/Darcs/Commands/Get.o : src/Darcs/FilePathUtils.hi + src/Darcs/Commands/Get.o : src/Darcs/Progress.hi +@@ -1241,7 +1255,6 @@ + src/Darcs/Commands/Get.o : src/Darcs/Repository/Checkpoint.hi + src/Darcs/Commands/Get.o : src/Darcs/Repository/ApplyPatches.hi + src/Darcs/Commands/Get.o : src/Darcs/Repository.hi +-src/Darcs/Commands/Get.o : src/Darcs/Repository/HashedRepo.hi + src/Darcs/Commands/Get.o : src/Darcs/Repository/DarcsRepo.hi + src/Darcs/Commands/Get.o : src/Darcs/Repository/DarcsRepo.hi + src/Darcs/Commands/Get.o : src/Darcs/Repository/Format.hi +@@ -1251,6 +1264,7 @@ + src/Darcs/Commands/Get.o : src/Workaround.hi + src/Darcs/Commands/Push.o : src/Darcs/Commands/Push.lhs + src/Darcs/Commands/Push.o : src/Darcs/Bug.hi ++src/Darcs/Commands/Push.o : src/English.hi + src/Darcs/Commands/Push.o : src/Darcs/Sealed.hi + src/Darcs/Commands/Push.o : src/Darcs/Email.hi + src/Darcs/Commands/Push.o : src/Darcs/RemoteApply.hi +@@ -1306,6 +1320,7 @@ + src/Darcs/Commands/Show.o : src/Darcs/Commands/ShowTags.hi + src/Darcs/Commands/Show.o : src/Darcs/Commands/ShowFiles.hi + src/Darcs/Commands/Show.o : src/Darcs/Commands/ShowContents.hi ++src/Darcs/Commands/Show.o : src/Darcs/Commands/ShowBug.hi + src/Darcs/Commands/Show.o : src/Darcs/Commands/ShowAuthors.hi + src/Darcs/Commands/Show.o : src/Darcs/Commands.hi + src/Darcs/Commands/Send.o : src/Darcs/Commands/Send.lhs +diff -ruN darcs-2.0.0/doc/darcs.1 darcs-2.0.2/doc/darcs.1 +--- darcs-2.0.0/doc/darcs.1 2008-04-07 15:11:24.000000000 +0000 ++++ darcs-2.0.2/doc/darcs.1 2008-06-24 01:25:48.000000000 +0000 +@@ -1,4 +1,4 @@ +-.TH DARCS "1" "April 2008" "darcs" "User Commands" ++.TH DARCS "1" "June 2008" "darcs" "User Commands" + .SH NAME + darcs \- an advanced revision control system + .SH SYNOPSIS +diff -ruN darcs-2.0.0/doc/index.html darcs-2.0.2/doc/index.html +--- darcs-2.0.0/doc/index.html 1970-01-01 00:00:00.000000000 +0000 ++++ darcs-2.0.2/doc/index.html 2008-06-24 01:23:34.000000000 +0000 +@@ -0,0 +1,99 @@ ++ ++ ++ ++ darcs ++ ++ ++ ++ ++ ++ ++ ++ ++
++
++ Distributed. Interactive. Smart. ++
++ ++ ++ ++ ++ ++ ++ ++
++

 

++

 

++

 

++
++ "Project leaders should certainly consider its adoption."
++ —Linux Weekly News
++
++ ++ ++
++ ++

Darcs is a free, open source source code management system.

++ ++

Distributed

++ ++

Every user has access to the full command set, removing ++ boundaries between server and client or committer and non-committers.

++ ++

Interactive

++ ++

Darcs is easy to learn and efficient to use because it asks ++ you questions in response to simple commands, giving you choices ++ in your work flow. You can choose to record ++ one change in a file, while ignoring another. As you update ++ from upstream, you can review each patch name, even the full "diff" ++ for interesting patches.

++ ++

Smart

++ ++

Originally developed by physicist David Roundy, darcs is ++ based on a unique algebra of patches.

++ ++

This smartness lets you respond to changing demands ++ in ways that would otherwise not be possible. Learn ++ more about spontaneous branches with darcs.

++ ++
++ ++ ++ ++

Download

++ ++

++ Binaries and source of the latest stable release of darcs for various platforms including Windows, Mac OS X, FreeBSD and its siblings, Solaris, and AIX, a dozen flavors of Linux, and Cygwin.

++ ++

While using a binary from above is recommend, here is the latest source code for those who want it.

++ ++ ++

Documentation

++ ++ ++ ++

Community

++ ++ ++ ++

Darcs source repository

++
    ++
  • darcs get --lazy http://darcs.net
  • ++
++ ++
++ ++ ++ +diff -ruN darcs-2.0.0/doc/index.html.in darcs-2.0.2/doc/index.html.in +--- darcs-2.0.0/doc/index.html.in 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/doc/index.html.in 2008-06-24 01:23:12.000000000 +0000 +@@ -1,110 +1,99 @@ +- ++ + + + darcs + + + +- ++ + + + + +-
+-
+- Distributed. Interactive. Smart. +-
+- +- +- +- +- +- +- +-
+-

 

+-

 

+-

 

+-
+- "Project leaders should certainly consider its adoption."
+- —Linux Weekly News
+-
+- +- +-
+- +-

Darcs is a free, open source source code management system.

+- +-

Distributed

+- +-

Every user has access to the full command set, removing +- boundaries between server and client or committer and non-committers.

+- +-

Interactive

+- +-

Darcs is easy to learn and efficient to use because it asks +- you questions in response to simple commands, giving you choices +- in your work flow. You can choose to record +- one change in a file, while ignoring another. As you update +- from upstream, you can review each patch name, even the full "diff" +- for interesting patches.

+- +-

Smart

+- +-

Originally developed by physicist David Roundy, darcs is +- based on a unique algebra of patches.

+- +-

This smartness lets you respond to changing demands +- in ways that would otherwise not be possible. Learn +- more about spontaneous branches with darcs.

+- +-
+- +- +- +-

Download

+- +-

+-Binaries and source of the latest stable release of darcs for various platforms including Windows, Mac OS X, FreeBSD and its siblings, Solaris, and AIX, a dozen flavors of Linux, and Cygwin.

+- +-

While using a binary from above is recommend, here is the latest source code for those who want it.

+- +- +-

Documentation

+- +- +- +-

Community

+- +- +- +-

Darcs source repositories

+-
    +-
  • Darcs stable branch:
    +- darcs get http://darcs.net/repos/stable +-
  • +-
  • Darcs unstable branch in darcs 1.x format:
    +- darcs get http://darcs.net/repos/unstable +-
  • +-
  • Darcs unstable branch in hashed repository format:
    +- darcs get --lazy http://darcs.net/repos/unstable-hashed +-
  • +-
+- +-
++
++
++ Distributed. Interactive. Smart. ++
++ ++ ++ ++ ++ ++ ++ ++
++

 

++

 

++

 

++
++ "Project leaders should certainly consider its adoption."
++ —Linux Weekly News
++
++ ++ ++
++ ++

Darcs is a free, open source source code management system.

++ ++

Distributed

++ ++

Every user has access to the full command set, removing ++ boundaries between server and client or committer and non-committers.

++ ++

Interactive

++ ++

Darcs is easy to learn and efficient to use because it asks ++ you questions in response to simple commands, giving you choices ++ in your work flow. You can choose to record ++ one change in a file, while ignoring another. As you update ++ from upstream, you can review each patch name, even the full "diff" ++ for interesting patches.

++ ++

Smart

++ ++

Originally developed by physicist David Roundy, darcs is ++ based on a unique algebra of patches.

++ ++

This smartness lets you respond to changing demands ++ in ways that would otherwise not be possible. Learn ++ more about spontaneous branches with darcs.

++ ++
++ ++ ++ ++

Download

++ ++

++ Binaries and source of the latest stable release of darcs for various platforms including Windows, Mac OS X, FreeBSD and its siblings, Solaris, and AIX, a dozen flavors of Linux, and Cygwin.

++ ++

While using a binary from above is recommend, here is the latest source code for those who want it.

++ ++ ++

Documentation

++ ++ ++ ++

Community

++ ++ ++ ++

Darcs source repository

++
    ++
  • darcs get --lazy http://darcs.net
  • ++
++ ++
+ + + +- +Binary files darcs-2.0.0/doc/logos/large_logo_only.png and darcs-2.0.2/doc/logos/large_logo_only.png differ +Binary files darcs-2.0.0/doc/logos/logo_only.png and darcs-2.0.2/doc/logos/logo_only.png differ +diff -ruN darcs-2.0.0/doc/manual/darcs.html darcs-2.0.2/doc/manual/darcs.html +--- darcs-2.0.0/doc/manual/darcs.html 2008-04-07 15:11:54.000000000 +0000 ++++ darcs-2.0.2/doc/manual/darcs.html 2008-06-24 01:26:12.000000000 +0000 +@@ -7,10 +7,10 @@ + Jens Lippmann, Marek Rouchal, Martin Wilck and others --> + + +-Darcs 2.0.0 (unknown) ++<TITLE>Darcs 2.0.2 (unknown) + Darcs + +- + +@@ -53,7 +53,7 @@ + +

+

+- Darcs 2.0.0 (unknown) ++ Darcs 2.0.2 (unknown) +
Darcs +

+
+@@ -95,305 +95,299 @@ +
  • Building darcs from the repository +
  • Building darcs with git +-
  • Submitting patches to darcs ++ HREF="node3.html#SECTION00360000000000000000">Submitting patches to darcs + +
    +-
  • Getting started + +
    +-
  • Configuring darcs + +
    +-
  • Best practices + +
    +-
  • Darcs commands + +
    +-
  • Theory of patches + +
    +-
  • DarcsRepo format +-
  • The GNU General Public License + +
    +-
  • About this document ... + + +

    +
    + David Roundy +-2008-04-07 ++2008-06-23 +
    + + +diff -ruN darcs-2.0.0/doc/manual/footnode.html darcs-2.0.2/doc/manual/footnode.html +--- darcs-2.0.0/doc/manual/footnode.html 2008-04-07 15:11:55.000000000 +0000 ++++ darcs-2.0.2/doc/manual/footnode.html 2008-06-24 01:26:12.000000000 +0000 +@@ -25,7 +25,7 @@ + + +
    +-
    ......3.1
    +
    Note that darcs does not do wildcard expansion, instead relying + on the command shell. The Windows port of darcs has a limited form of +@@ -63,7 +63,7 @@ + . + +
    +-
    ...patch)....patch).5.1
    +
    If + you look inside _darcs you will find files or directories named +@@ -105,7 +105,7 @@ + . + +
    +-
    ......5.2
    +
    Revert can undo precious work in a blink. + To protect you from great grief, +@@ -144,7 +144,7 @@ + . + +
    +-
    ...pending...pending5.3
    +
    In the file _darcs/patches/pending. + +@@ -180,7 +180,7 @@ + . + +
    +-
    ... code.... code.5.4
    +
    Actually it doesn't have to--in theory--, + but in practice it's hard to create ``negative'' files or lines in the working tree. +@@ -218,7 +218,7 @@ + . + +
    +-
    ... it.... it.5.5
    +
    darcs even has a special command, trackdown + that automatically removes patches +@@ -256,7 +256,7 @@ + . + +
    +-
    ... repository.... repository.5.6
    +
    It will omit patches already depended upon by other patches, + since they will be indirectly depended upon anyway. +@@ -293,7 +293,7 @@ + . + +
    +-
    ... parts... parts5.7
    +
    The primitive patches making up the total patch. + +@@ -329,7 +329,7 @@ + . + +
    +-
    ... ++
    ... + push6.1
    +
    But it affects the repository and working directory targeted by +@@ -367,7 +367,7 @@ + . + +
    +-
    ... ++
    ... + send6.2
    +
    As for the other end, see apply +@@ -404,7 +404,7 @@ + . + +
    +-
    ... ++
    ... + put6.3
    +
    Creates a new repository +@@ -441,7 +441,7 @@ + . + +
    +-
    ... repositories... repositories6.4
    +
    The first thing darcs will do is + remove duplicates, keeping only the first specification. This is +@@ -493,7 +493,7 @@ + . + +
    +-
    ... ++
    ... + input.6.5
    +
    One caveat: don't name your patch file ``magic darcs +@@ -531,7 +531,7 @@ + . + +
    +-
    ... back.... back.6.6
    +
    The patch file itself is not actually deleted, but its + context is lost, so it cannot be reliably read--your only choice would be +@@ -569,7 +569,7 @@ + . + +
    +-
    ... representation... representationA.1
    +
    For those comfortable with + quantum mechanics, think of a patch as a quantum mechanical operator, and +@@ -611,7 +611,7 @@ + . + +
    +-
    ... tree... treeA.2
    +
    This is very similar to the second-quantized picture, + in which any state is seen as the result of a number of creation operators +@@ -651,7 +651,7 @@ + . + +
    +-
    ...#tex2html_wrap_inline2471#...#tex2html_wrap_inline2520#A.3
    +
    This notation is + inspired by the notation of matrix multiplication or the application of +@@ -691,7 +691,7 @@ + . + +
    +-
    ... tree).... tree).A.4
    +
    The fact that commutation can fail makes a huge difference in the + whole patch formalism. It may be possible to create a formalism in which +@@ -741,7 +741,7 @@ + . + +
    +-
    ... considered... consideredA.5
    +
    Alas, I don't know how to prove that the two + constraints even can be satisfied. The best I have been able to do +diff -ruN darcs-2.0.0/doc/manual/images.log darcs-2.0.2/doc/manual/images.log +--- darcs-2.0.0/doc/manual/images.log 2008-04-07 15:11:41.000000000 +0000 ++++ darcs-2.0.2/doc/manual/images.log 2008-06-24 01:26:02.000000000 +0000 +@@ -1,4 +1,4 @@ +-This is pdfeTeX, Version 3.141592-1.21a-2.2 (Web2C 7.5.4) (format=latex 2008.1.30) 7 APR 2008 11:11 ++This is pdfeTeX, Version 3.141592-1.21a-2.2 (Web2C 7.5.4) (format=latex 2008.1.30) 23 JUN 2008 18:26 + entering extended mode + **./images.tex + (./images.tex +@@ -115,188 +115,188 @@ + latex2htmlLength evensidemargin=89.0pt + + LaTeX Font Info: External font `cmex10' loaded for size +-(Font) <7> on input line 205. ++(Font) <7> on input line 204. + LaTeX Font Info: External font `cmex10' loaded for size +-(Font) <5> on input line 205. +-l2hSize :tex2html_wrap_inline2385:6.95831pt::6.95831pt::8.27783pt. ++(Font) <5> on input line 204. ++l2hSize :tex2html_wrap_inline2434:6.95831pt::6.95831pt::8.27783pt. + [1 + + + + ] +-l2hSize :tex2html_wrap_inline2387:6.95831pt::6.95831pt::8.27783pt. ++l2hSize :tex2html_wrap_inline2436:6.95831pt::6.95831pt::8.27783pt. + [2 + + + ] +-l2hSize :tex2html_wrap_inline2389:6.95831pt::6.95831pt::8.27783pt. ++l2hSize :tex2html_wrap_inline2438:6.95831pt::6.95831pt::8.27783pt. + [3 + + + ] +-l2hSize :tex2html_wrap_inline2391:7.33331pt::7.33331pt::12.16667pt. ++l2hSize :tex2html_wrap_inline2440:7.33331pt::7.33331pt::12.16667pt. + [4 + + + ] +-l2hSize :tex2html_wrap_inline2393:7.44444pt::7.44444pt::9.88202pt. ++l2hSize :tex2html_wrap_inline2442:7.44444pt::7.44444pt::9.88202pt. + [5 + + + ] +-l2hSize :tex2html_wrap_inline2395:7.33331pt::7.33331pt::12.16667pt. ++l2hSize :tex2html_wrap_inline2444:7.33331pt::7.33331pt::12.16667pt. + [6 + + + ] +-l2hSize :tex2html_wrap_inline2397:7.33331pt::7.33331pt::12.57906pt. ++l2hSize :tex2html_wrap_inline2446:7.33331pt::7.33331pt::12.57906pt. + [7 + + + ] +-l2hSize :tex2html_wrap_inline2401:7.44444pt::7.44444pt::9.88202pt. ++l2hSize :tex2html_wrap_inline2450:7.44444pt::7.44444pt::9.88202pt. + [8 + + + ] +-l2hSize :tex2html_wrap_inline2409:7.33331pt::7.33331pt::12.57906pt. ++l2hSize :tex2html_wrap_inline2458:7.33331pt::7.33331pt::12.57906pt. + [9 + + + ] +-l2hSize :tex2html_wrap_inline2449:7.33331pt::7.33331pt::12.71527pt. ++l2hSize :tex2html_wrap_inline2498:7.33331pt::7.33331pt::12.71527pt. + [10 + + + ] +-l2hSize :tex2html_wrap_inline2453:7.33331pt::7.33331pt::11.16238pt. ++l2hSize :tex2html_wrap_inline2502:7.33331pt::7.33331pt::11.16238pt. + [11 + + + ] +-l2hSize :tex2html_wrap_inline2455:8.00006pt::8.00006pt::73.40356pt. ++l2hSize :tex2html_wrap_inline2504:8.00006pt::8.00006pt::73.40356pt. + [12 + + + ] +-l2hSize :tex2html_wrap_inline2457:8.00006pt::8.00006pt::73.40356pt. ++l2hSize :tex2html_wrap_inline2506:8.00006pt::8.00006pt::73.40356pt. + [13 + + + ] +-l2hSize :tex2html_wrap_inline2459:8.0pt::8.0pt::39.47212pt. ++l2hSize :tex2html_wrap_inline2508:8.0pt::8.0pt::39.47212pt. + [14 + + + ] +-l2hSize :tex2html_wrap_inline2461:8.00006pt::8.00006pt::80.62585pt. ++l2hSize :tex2html_wrap_inline2510:8.00006pt::8.00006pt::80.62585pt. + [15 + + + ] + \c@thm=\count99 + \c@dfn=\count100 +-l2hSize :tex2html_wrap_inline2463:7.33331pt::7.33331pt::11.4063pt. ++l2hSize :tex2html_wrap_inline2512:7.33331pt::7.33331pt::11.4063pt. + [16 + + + ] +-l2hSize :tex2html_wrap_inline2465:7.33331pt::7.33331pt::11.4063pt. ++l2hSize :tex2html_wrap_inline2514:7.33331pt::7.33331pt::11.4063pt. + [17 + + + ] +-l2hSize :tex2html_wrap_inline2467:7.33331pt::7.33331pt::22.31256pt. ++l2hSize :tex2html_wrap_inline2516:7.33331pt::7.33331pt::22.31256pt. + [18 + + + ] +-l2hSize :tex2html_wrap_inline2473:8.0pt::8.0pt::32.868pt. ++l2hSize :tex2html_wrap_inline2522:8.0pt::8.0pt::32.868pt. + [19 + + + ] +-l2hSize :tex2html_wrap_inline2475:8.14003pt::0.0pt::19.04521pt. ++l2hSize :tex2html_wrap_inline2524:8.14003pt::0.0pt::19.04521pt. + [20 + + + ] +-l2hSize :tex2html_wrap_inline2477:6.83331pt::0.0pt::8.30907pt. ++l2hSize :tex2html_wrap_inline2526:6.83331pt::0.0pt::8.30907pt. + [21 + + + ] +-l2hSize :tex2html_wrap_inline2373:8.14003pt::0.0pt::26.85425pt. ++l2hSize :tex2html_wrap_inline2422:8.14003pt::0.0pt::26.85425pt. + [22 + + + ] +-l2hSize :displaymath2377:14.6666pt::0.0pt::349.0pt. ++l2hSize :displaymath2426:14.6666pt::0.0pt::349.0pt. + [23 + + + ] +-l2hSize :displaymath2378:13.49998pt::0.0pt::349.0pt. ++l2hSize :displaymath2427:13.49998pt::0.0pt::349.0pt. + [24 + + + ] +-l2hSize :tex2html_wrap_inline2485:8.01782pt::8.01782pt::11.4063pt. ++l2hSize :tex2html_wrap_inline2534:8.01782pt::8.01782pt::11.4063pt. + [25 + + + ] +-l2hSize :tex2html_wrap_inline2491:8.01782pt::8.01782pt::11.4063pt. ++l2hSize :tex2html_wrap_inline2540:8.01782pt::8.01782pt::11.4063pt. + [26 + + + ] +-l2hSize :tex2html_wrap_inline2495:6.45831pt::0.0pt::18.83344pt. ++l2hSize :tex2html_wrap_inline2544:6.45831pt::0.0pt::18.83344pt. + [27 + + + ] +-l2hSize :tex2html_wrap_inline2497:6.45831pt::0.0pt::16.05563pt. ++l2hSize :tex2html_wrap_inline2546:6.45831pt::0.0pt::16.05563pt. + [28 + + + ] +-l2hSize :tex2html_wrap_inline2499:6.67859pt::0.0pt::10.50005pt. ++l2hSize :tex2html_wrap_inline2548:6.67859pt::0.0pt::10.50005pt. + [29 + + + ] +-l2hSize :tex2html_wrap_inline2374:6.45831pt::0.0pt::16.61122pt. ++l2hSize :tex2html_wrap_inline2423:6.45831pt::0.0pt::16.61122pt. + [30 + + + ] +-l2hSize :displaymath2379:14.5pt::0.0pt::349.0pt. ++l2hSize :displaymath2428:14.5pt::0.0pt::349.0pt. + [31 + + + ] +-l2hSize :tex2html_wrap_inline2509:8.01782pt::8.01782pt::68.01392pt. ++l2hSize :tex2html_wrap_inline2558:8.01782pt::8.01782pt::68.01392pt. + [32 + + + ] +-l2hSize :tex2html_wrap_inline2511:9.28888pt::9.28888pt::85.5973pt. ++l2hSize :tex2html_wrap_inline2560:9.28888pt::9.28888pt::85.5973pt. + [33 + + + ] +-l2hSize :tex2html_wrap_inline2513:9.28888pt::9.28888pt::21.35077pt. ++l2hSize :tex2html_wrap_inline2562:9.28888pt::9.28888pt::21.35077pt. + [34 + + + ] +-l2hSize :tex2html_wrap_inline2515:9.28888pt::9.28888pt::19.04521pt. ++l2hSize :tex2html_wrap_inline2564:9.28888pt::9.28888pt::19.04521pt. + [35 + + + ] +-l2hSize :displaymath2380:12.0pt::0.0pt::349.0pt. ++l2hSize :displaymath2429:12.0pt::0.0pt::349.0pt. + [36 + + +diff -ruN darcs-2.0.0/doc/manual/images.tex darcs-2.0.2/doc/manual/images.tex +--- darcs-2.0.0/doc/manual/images.tex 2008-04-07 15:11:40.000000000 +0000 ++++ darcs-2.0.2/doc/manual/images.tex 2008-06-24 01:26:02.000000000 +0000 +@@ -184,7 +184,6 @@ + \stepcounter{section} + \stepcounter{section} + \stepcounter{section} +-\stepcounter{section} + \stepcounter{chapter} + \stepcounter{section} + \stepcounter{section} +@@ -201,13 +200,13 @@ + \stepcounter{paragraph} + \stepcounter{paragraph} + {\newpage\clearpage +-\lthtmlinlinemathA{tex2html_wrap_inline2385}% ++\lthtmlinlinemathA{tex2html_wrap_inline2434}% + $<$% + \lthtmlinlinemathZ + \lthtmlcheckvsize\clearpage} + + {\newpage\clearpage +-\lthtmlinlinemathA{tex2html_wrap_inline2387}% ++\lthtmlinlinemathA{tex2html_wrap_inline2436}% + $>$% + \lthtmlinlinemathZ + \lthtmlcheckvsize\clearpage} +@@ -251,7 +250,7 @@ + \stepcounter{subsection} + \stepcounter{subsection} + {\newpage\clearpage +-\lthtmlinlinemathA{tex2html_wrap_inline2389}% ++\lthtmlinlinemathA{tex2html_wrap_inline2438}% + $+$% + \lthtmlinlinemathZ + \lthtmlcheckvsize\clearpage} +@@ -267,50 +266,50 @@ + \stepcounter{section} + \stepcounter{section} + {\newpage\clearpage +-\lthtmlinlinemathA{tex2html_wrap_inline2391}% ++\lthtmlinlinemathA{tex2html_wrap_inline2440}% + $R_{c}$% + \lthtmlinlinemathZ + \lthtmlcheckvsize\clearpage} + + {\newpage\clearpage +-\lthtmlinlinemathA{tex2html_wrap_inline2393}% ++\lthtmlinlinemathA{tex2html_wrap_inline2442}% + $f_1$% + \lthtmlinlinemathZ + \lthtmlcheckvsize\clearpage} + + {\newpage\clearpage +-\lthtmlinlinemathA{tex2html_wrap_inline2395}% ++\lthtmlinlinemathA{tex2html_wrap_inline2444}% + $R_c$% + \lthtmlinlinemathZ + \lthtmlcheckvsize\clearpage} + + {\newpage\clearpage +-\lthtmlinlinemathA{tex2html_wrap_inline2397}% ++\lthtmlinlinemathA{tex2html_wrap_inline2446}% + $R_1$% + \lthtmlinlinemathZ + \lthtmlcheckvsize\clearpage} + + {\newpage\clearpage +-\lthtmlinlinemathA{tex2html_wrap_inline2401}% ++\lthtmlinlinemathA{tex2html_wrap_inline2450}% + $f_2$% + \lthtmlinlinemathZ + \lthtmlcheckvsize\clearpage} + + {\newpage\clearpage +-\lthtmlinlinemathA{tex2html_wrap_inline2409}% ++\lthtmlinlinemathA{tex2html_wrap_inline2458}% + $R_2$% + \lthtmlinlinemathZ + \lthtmlcheckvsize\clearpage} + + \stepcounter{subsection} + {\newpage\clearpage +-\lthtmlinlinemathA{tex2html_wrap_inline2449}% ++\lthtmlinlinemathA{tex2html_wrap_inline2498}% + $R_p$% + \lthtmlinlinemathZ + \lthtmlcheckvsize\clearpage} + + {\newpage\clearpage +-\lthtmlinlinemathA{tex2html_wrap_inline2453}% ++\lthtmlinlinemathA{tex2html_wrap_inline2502}% + $R_l$% + \lthtmlinlinemathZ + \lthtmlcheckvsize\clearpage} +@@ -337,27 +336,27 @@ + \stepcounter{subsection} + \stepcounter{subsection} + {\newpage\clearpage +-\lthtmlinlinemathA{tex2html_wrap_inline2455}% ++\lthtmlinlinemathA{tex2html_wrap_inline2504}% + $ R_1 \bigcup R_2 + \bigcup R_3 \ldots$% + \lthtmlinlinemathZ + \lthtmlcheckvsize\clearpage} + + {\newpage\clearpage +-\lthtmlinlinemathA{tex2html_wrap_inline2457}% ++\lthtmlinlinemathA{tex2html_wrap_inline2506}% + $ R_1 \bigcap R_2 \bigcap R_3 \ldots$% + \lthtmlinlinemathZ + \lthtmlcheckvsize\clearpage} + + {\newpage\clearpage +-\lthtmlinlinemathA{tex2html_wrap_inline2459}% ++\lthtmlinlinemathA{tex2html_wrap_inline2508}% + $ S + \backslash S \rightarrow \emptyset $% + \lthtmlinlinemathZ + \lthtmlcheckvsize\clearpage} + + {\newpage\clearpage +-\lthtmlinlinemathA{tex2html_wrap_inline2461}% ++\lthtmlinlinemathA{tex2html_wrap_inline2510}% + $ R_1 + \backslash (R_2 \bigcup R_3 \bigcup \ldots$% + \lthtmlinlinemathZ +@@ -371,7 +370,7 @@ + \stepcounter{subsection} + \stepcounter{subsection} + \stepcounter{subsubsection} +-\stepcounter{subsection} ++\stepcounter{subsubsection} + \stepcounter{subsubsection} + \stepcounter{subsubsection} + \stepcounter{subsubsection} +@@ -399,7 +398,7 @@ + \stepcounter{subsection} + \stepcounter{subsection} + \stepcounter{subsubsection} +-\stepcounter{subsection} ++\stepcounter{subsubsection} + \stepcounter{subsubsection} + \stepcounter{subsubsection} + \stepcounter{subsubsection} +@@ -427,49 +426,49 @@ + \stepcounter{subsection} + \stepcounter{section} + {\newpage\clearpage +-\lthtmlinlinemathA{tex2html_wrap_inline2463}% ++\lthtmlinlinemathA{tex2html_wrap_inline2512}% + $P_1$% + \lthtmlinlinemathZ + \lthtmlcheckvsize\clearpage} + + {\newpage\clearpage +-\lthtmlinlinemathA{tex2html_wrap_inline2465}% ++\lthtmlinlinemathA{tex2html_wrap_inline2514}% + $P_2$% + \lthtmlinlinemathZ + \lthtmlcheckvsize\clearpage} + + {\newpage\clearpage +-\lthtmlinlinemathA{tex2html_wrap_inline2467}% ++\lthtmlinlinemathA{tex2html_wrap_inline2516}% + $P_2P_1$% + \lthtmlinlinemathZ + \lthtmlcheckvsize\clearpage} + + {\newpage\clearpage +-\lthtmlinlinemathA{tex2html_wrap_inline2473}% ++\lthtmlinlinemathA{tex2html_wrap_inline2522}% + $P_1\parallel P_2$% + \lthtmlinlinemathZ + \lthtmlcheckvsize\clearpage} + + {\newpage\clearpage +-\lthtmlinlinemathA{tex2html_wrap_inline2475}% ++\lthtmlinlinemathA{tex2html_wrap_inline2524}% + $P^{ -1}$% + \lthtmlinlinemathZ + \lthtmlcheckvsize\clearpage} + + {\newpage\clearpage +-\lthtmlinlinemathA{tex2html_wrap_inline2477}% ++\lthtmlinlinemathA{tex2html_wrap_inline2526}% + $P$% + \lthtmlinlinemathZ + \lthtmlcheckvsize\clearpage} + + {\newpage\clearpage +-\lthtmlinlinemathA{tex2html_wrap_inline2373}% ++\lthtmlinlinemathA{tex2html_wrap_inline2422}% + \( P^{ -1} P \)% + \lthtmlinlinemathZ + \lthtmlcheckvsize\clearpage} + + {\newpage\clearpage +-\lthtmldisplayA{displaymath2377}% ++\lthtmldisplayA{displaymath2426}% + \begin{displaymath} (P_2 P_1)^{ -1} = P_1^{ -1} P_2^{ -1}. \end{displaymath}% + \lthtmldisplayZ + \lthtmlcheckvsize\clearpage} +@@ -485,37 +484,37 @@ + \providecommand{\commutes}{\longleftrightarrow}% + + {\newpage\clearpage +-\lthtmldisplayA{displaymath2378}% ++\lthtmldisplayA{displaymath2427}% + \begin{displaymath} P_2 P_1 \longleftrightarrow {P_1}' {P_2}'. \end{displaymath}% + \lthtmldisplayZ + \lthtmlcheckvsize\clearpage} + + {\newpage\clearpage +-\lthtmlinlinemathA{tex2html_wrap_inline2485}% ++\lthtmlinlinemathA{tex2html_wrap_inline2534}% + $P_1'$% + \lthtmlinlinemathZ + \lthtmlcheckvsize\clearpage} + + {\newpage\clearpage +-\lthtmlinlinemathA{tex2html_wrap_inline2491}% ++\lthtmlinlinemathA{tex2html_wrap_inline2540}% + $P_2'$% + \lthtmlinlinemathZ + \lthtmlcheckvsize\clearpage} + + {\newpage\clearpage +-\lthtmlinlinemathA{tex2html_wrap_inline2495}% ++\lthtmlinlinemathA{tex2html_wrap_inline2544}% + $\longleftrightarrow $% + \lthtmlinlinemathZ + \lthtmlcheckvsize\clearpage} + + {\newpage\clearpage +-\lthtmlinlinemathA{tex2html_wrap_inline2497}% ++\lthtmlinlinemathA{tex2html_wrap_inline2546}% + $==$% + \lthtmlinlinemathZ + \lthtmlcheckvsize\clearpage} + + {\newpage\clearpage +-\lthtmlinlinemathA{tex2html_wrap_inline2499}% ++\lthtmlinlinemathA{tex2html_wrap_inline2548}% + $\ddot\frown$% + \lthtmlinlinemathZ + \lthtmlcheckvsize\clearpage} +@@ -526,45 +525,45 @@ + \providecommand{\merge}{\Longrightarrow}% + + {\newpage\clearpage +-\lthtmlinlinemathA{tex2html_wrap_inline2374}% ++\lthtmlinlinemathA{tex2html_wrap_inline2423}% + \( \Longrightarrow \)% + \lthtmlinlinemathZ + \lthtmlcheckvsize\clearpage} + + {\newpage\clearpage +-\lthtmldisplayA{displaymath2379}% ++\lthtmldisplayA{displaymath2428}% + \begin{displaymath} P_2 \parallel P_1 \Longrightarrow {P_2}' P_1 \longleftrightarrow {P_1}' P_2. \end{displaymath}% + \lthtmldisplayZ + \lthtmlcheckvsize\clearpage} + + \stepcounter{subsection} + {\newpage\clearpage +-\lthtmlinlinemathA{tex2html_wrap_inline2509}% ++\lthtmlinlinemathA{tex2html_wrap_inline2558}% + $ P_2' P_1 \longleftrightarrow P_1' P_2 $% + \lthtmlinlinemathZ + \lthtmlcheckvsize\clearpage} + + {\newpage\clearpage +-\lthtmlinlinemathA{tex2html_wrap_inline2511}% ++\lthtmlinlinemathA{tex2html_wrap_inline2560}% + $ P_1'^{ -1} + P_2' \longleftrightarrow P_2 P_1^{ -1} $% + \lthtmlinlinemathZ + \lthtmlcheckvsize\clearpage} + + {\newpage\clearpage +-\lthtmlinlinemathA{tex2html_wrap_inline2513}% ++\lthtmlinlinemathA{tex2html_wrap_inline2562}% + $P_1'^{ -1}$% + \lthtmlinlinemathZ + \lthtmlcheckvsize\clearpage} + + {\newpage\clearpage +-\lthtmlinlinemathA{tex2html_wrap_inline2515}% ++\lthtmlinlinemathA{tex2html_wrap_inline2564}% + $P_1^{ -1}$% + \lthtmlinlinemathZ + \lthtmlcheckvsize\clearpage} + + {\newpage\clearpage +-\lthtmldisplayA{displaymath2380}% ++\lthtmldisplayA{displaymath2429}% + \begin{displaymath} + A^{ -1} C \longleftrightarrow C' A'^{ -1} + \end{displaymath}% +Binary files darcs-2.0.0/doc/manual/img18.png and darcs-2.0.2/doc/manual/img18.png differ +Binary files darcs-2.0.0/doc/manual/img20.png and darcs-2.0.2/doc/manual/img20.png differ +Binary files darcs-2.0.0/doc/manual/img23.png and darcs-2.0.2/doc/manual/img23.png differ +Binary files darcs-2.0.0/doc/manual/img26.png and darcs-2.0.2/doc/manual/img26.png differ +Binary files darcs-2.0.0/doc/manual/img33.png and darcs-2.0.2/doc/manual/img33.png differ +Binary files darcs-2.0.0/doc/manual/img4.png and darcs-2.0.2/doc/manual/img4.png differ +diff -ruN darcs-2.0.0/doc/manual/index.html darcs-2.0.2/doc/manual/index.html +--- darcs-2.0.0/doc/manual/index.html 2008-04-07 15:11:54.000000000 +0000 ++++ darcs-2.0.2/doc/manual/index.html 2008-06-24 01:26:12.000000000 +0000 +@@ -7,10 +7,10 @@ + Jens Lippmann, Marek Rouchal, Martin Wilck and others --> + + +-Darcs 2.0.0 (unknown) ++<TITLE>Darcs 2.0.2 (unknown) + Darcs + +- + +@@ -53,7 +53,7 @@ + +

    +

    +- Darcs 2.0.0 (unknown) ++ Darcs 2.0.2 (unknown) +
    Darcs +

    +
    +@@ -95,305 +95,299 @@ +
  • Building darcs from the repository +
  • Building darcs with git +-
  • Submitting patches to darcs ++ HREF="node3.html#SECTION00360000000000000000">Submitting patches to darcs + +
    +-
  • Getting started + +
    +-
  • Configuring darcs + +
    +-
  • Best practices + +
    +-
  • Darcs commands + +
    +-
  • Theory of patches + +
    +-
  • DarcsRepo format +-
  • The GNU General Public License + +
    +-
  • About this document ... + + +

    +
    + David Roundy +-2008-04-07 ++2008-06-23 +
    + + +diff -ruN darcs-2.0.0/doc/manual/internals.pl darcs-2.0.2/doc/manual/internals.pl +--- darcs-2.0.0/doc/manual/internals.pl 2008-04-07 15:11:55.000000000 +0000 ++++ darcs-2.0.2/doc/manual/internals.pl 2008-06-24 01:26:12.000000000 +0000 +@@ -98,6 +98,10 @@ + $ref_files{$key} = "$dir".q|node6.html|; + $noresave{$key} = "$nosave"; + ++$key = q/initialize/; ++$ref_files{$key} = "$dir".q|node7.html|; ++$noresave{$key} = "$nosave"; ++ + $key = q/env:DARCS_EDITOR/; + $ref_files{$key} = "$dir".q|node5.html|; + $noresave{$key} = "$nosave"; +@@ -134,6 +138,10 @@ + $ref_files{$key} = "$dir".q|node5.html|; + $noresave{$key} = "$nosave"; + ++$key = q/env:DARCS_DO_COLOR_LINES/; ++$ref_files{$key} = "$dir".q|node5.html|; ++$noresave{$key} = "$nosave"; ++ + $key = q/env:HOME/; + $ref_files{$key} = "$dir".q|node5.html|; + $noresave{$key} = "$nosave"; +diff -ruN darcs-2.0.0/doc/manual/labels.pl darcs-2.0.2/doc/manual/labels.pl +--- darcs-2.0.0/doc/manual/labels.pl 2008-04-07 15:11:55.000000000 +0000 ++++ darcs-2.0.2/doc/manual/labels.pl 2008-06-24 01:26:12.000000000 +0000 +@@ -98,6 +98,10 @@ + $external_labels{$key} = "$URL/" . q|node6.html|; + $noresave{$key} = "$nosave"; + ++$key = q/initialize/; ++$external_labels{$key} = "$URL/" . q|node7.html|; ++$noresave{$key} = "$nosave"; ++ + $key = q/env:DARCS_EDITOR/; + $external_labels{$key} = "$URL/" . q|node5.html|; + $noresave{$key} = "$nosave"; +@@ -134,6 +138,10 @@ + $external_labels{$key} = "$URL/" . q|node5.html|; + $noresave{$key} = "$nosave"; + ++$key = q/env:DARCS_DO_COLOR_LINES/; ++$external_labels{$key} = "$URL/" . q|node5.html|; ++$noresave{$key} = "$nosave"; ++ + $key = q/env:HOME/; + $external_labels{$key} = "$URL/" . q|node5.html|; + $noresave{$key} = "$nosave"; +diff -ruN darcs-2.0.0/doc/manual/node10.html darcs-2.0.2/doc/manual/node10.html +--- darcs-2.0.0/doc/manual/node10.html 2008-04-07 15:11:55.000000000 +0000 ++++ darcs-2.0.2/doc/manual/node10.html 2008-06-24 01:26:12.000000000 +0000 +@@ -27,30 +27,30 @@ + + + +@@ -59,11 +59,11 @@ + Subsections + + + +@@ -610,35 +610,35 @@ + + + +
    + David Roundy +-2008-04-07 ++2008-06-23 +
    + + +diff -ruN darcs-2.0.0/doc/manual/node11.html darcs-2.0.2/doc/manual/node11.html +--- darcs-2.0.0/doc/manual/node11.html 2008-04-07 15:11:55.000000000 +0000 ++++ darcs-2.0.2/doc/manual/node11.html 2008-06-24 01:26:12.000000000 +0000 +@@ -27,24 +27,24 @@ + +@@ -54,7 +54,7 @@ + About this document ... + + +- Darcs 2.0.0 (unknown) ++ Darcs 2.0.2 (unknown) +
    Darcs +

    + This document was generated using the +@@ -71,11 +71,11 @@ + The command line arguments were:
    + latex2html -split +1 -dir doc/manual src/darcs.tex +

    +-The translation was initiated by David Roundy on 2008-04-07 ++The translation was initiated by David Roundy on 2008-06-23 +


    +
    + David Roundy +-2008-04-07 ++2008-06-23 +
    + + +diff -ruN darcs-2.0.0/doc/manual/node1.html darcs-2.0.2/doc/manual/node1.html +--- darcs-2.0.0/doc/manual/node1.html 2008-04-07 15:11:54.000000000 +0000 ++++ darcs-2.0.2/doc/manual/node1.html 2008-06-24 01:26:12.000000000 +0000 +@@ -27,25 +27,25 @@ + + + + +@@ -57,287 +57,281 @@ + + + + +@@ -345,7 +339,7 @@ +

    +
    + David Roundy +-2008-04-07 ++2008-06-23 +
    + + +diff -ruN darcs-2.0.0/doc/manual/node2.html darcs-2.0.2/doc/manual/node2.html +--- darcs-2.0.0/doc/manual/node2.html 2008-04-07 15:11:54.000000000 +0000 ++++ darcs-2.0.2/doc/manual/node2.html 2008-06-24 01:26:12.000000000 +0000 +@@ -27,30 +27,30 @@ + + + +@@ -62,64 +62,64 @@ +
  • +
    +-
  • Features + +
    +-
  • Switching from CVS + +
    +-
  • Switching from arch + + +@@ -645,35 +645,35 @@ + + + +
    + David Roundy +-2008-04-07 ++2008-06-23 +
    + + +diff -ruN darcs-2.0.0/doc/manual/node3.html darcs-2.0.2/doc/manual/node3.html +--- darcs-2.0.0/doc/manual/node3.html 2008-04-07 15:11:54.000000000 +0000 ++++ darcs-2.0.2/doc/manual/node3.html 2008-06-24 01:26:12.000000000 +0000 +@@ -27,30 +27,30 @@ + + + +@@ -59,20 +59,18 @@ + Subsections + + + +
    +@@ -104,7 +102,7 @@ + It is a good idea (but not required) to have software installed that provide darcs + network access. The libwww-dev, libwww-ssl-dev or libcurl packages + newer than than 7.18.0 are recommended because they provide pipelining support speed +-up HTTP access. They have to explicitly chosen with -with-libwww or ++up HTTP access. They have to be explicitly chosen with -with-libwww or + -with-curl-pipelining. Otherwise, darcs will automatically look for one of + libcurl, curl or wget. You also might want to have scp + available if you want to grab your repos over ssh... +@@ -225,9 +223,9 @@ + Building darcs from the repository + + To build the latest darcs from its repository, you will first need a +-working copy of darcs. You can get darcs using: ++working copy of Darcs 2. You can get darcs using: +
    +-% darcs get -v http://darcs.net/repos/stable
    ++% darcs get -v http://darcs.net/
    + 
    + and once you have the darcs repository you can bring it up to date with a +
    +@@ -237,12 +235,12 @@
    + 

    + The repository doesn't hold automatically generated files, which include + the configure script and the HTML documentation, so you need to run +-autoconf first. ++autoconf first. + +

    + You'll need autoconf 2.50 or higher. Some systems have more than one + version of autoconf installed. For example, autoconf may point to +-version 2.13, while autoconf259 runs version 2.59. ++version 2.13, while autoconf259 runs version 2.59. + +

    + Also note that make is really "GNU make". On some systems, such as +@@ -263,22 +261,6 @@ +

    + +

    +-Building darcs with git +-

    +- +-

    +-To enable git support, you first need to grab a copy of the git +-source code; since darcs doesn't yet have the capability of accessing +-remote git repositories, you'll have to either download a tarball or use +-git itself to clone a git repository. Compile git (no need to +-install); this will create a file ``libgit.a''. Then create a +-symlink to the git source directory named ``git'' in your darcs +-source directory, configure darcs using the ``--enable-git'' +-option, and build darcs as usual. +- +-

    +- +-

    + Submitting patches to darcs +

    + I know, this doesn't really belong in this chapter, but if you're using the +@@ -308,35 +290,35 @@ + + + +
    + David Roundy +-2008-04-07 ++2008-06-23 +
    + + +diff -ruN darcs-2.0.0/doc/manual/node4.html darcs-2.0.2/doc/manual/node4.html +--- darcs-2.0.0/doc/manual/node4.html 2008-04-07 15:11:54.000000000 +0000 ++++ darcs-2.0.2/doc/manual/node4.html 2008-06-24 01:26:12.000000000 +0000 +@@ -27,30 +27,30 @@ + + + +@@ -59,47 +59,47 @@ + Subsections + + + +@@ -126,13 +126,13 @@ + from the root directory of your project: +
    + % cd my_project/
    +-% darcs initialize
    ++% darcs initialize --darcs-2
    + 
    + This creates the _darcs directory and populates it with whatever + files and directories are needed to describe an empty project. You now + need to tell darcs what files and directories in your project should be + under revision control. You do this using the command darcs add3.1: ++ HREF="footnode.html#foot203">3.1: +
    + % darcs add *.c Makefile.am configure.ac
    + 
    +@@ -568,7 +568,7 @@ + even if the patch is applied. You can confirm whether or not your patch was applied + to the remote repository by pointing darcs changes at a remote repository: +
    +-darcs changes --last=10 --repo=http://darcs.net/repos/stable
    ++darcs changes --last=10 --repo=http://darcs.net/
    + 
    + +

    +@@ -627,7 +627,7 @@ + sibling. This is done with darcs optimize --relink, with + -the --sibling flag specifying the sibling. +

    +-  $ cd /var/repos/darcs-unstable
    ++  $ cd /var/repos/darcs.net
    +   $ darcs optimize --relink --sibling /var/repos/darcs
    + 
    + The --sibling flag can be repeated multiple times, in which +@@ -677,35 +677,35 @@ + + + +
    + David Roundy +-2008-04-07 ++2008-06-23 +
    + + +diff -ruN darcs-2.0.0/doc/manual/node5.html darcs-2.0.2/doc/manual/node5.html +--- darcs-2.0.0/doc/manual/node5.html 2008-04-07 15:11:54.000000000 +0000 ++++ darcs-2.0.2/doc/manual/node5.html 2008-06-24 01:26:12.000000000 +0000 +@@ -27,30 +27,30 @@ + + + +@@ -59,66 +59,66 @@ + Subsections + + + +@@ -340,7 +340,7 @@ + The _darcs/prefs/binaries file may contain a list of regular + expressions describing files that should be treated as binary files rather + than text files. Darcs automatically treats files containing +-^Z\ or '\0' as binary. ++^Z\ or '\0' within the first 4096 bytes as being binary files. + You probably will want to have the binaries file under + version control. To do this you can use darcs setpref to set the value + ``binariesfile'' to the name of your desired binaries file +@@ -354,7 +354,7 @@ +

    + email +

    +-The _darcs/prefs/email file is used to provide the e-mail address for your ++The _darcs/prefs/email file is used to provide the e-mail address for your + repository that others will use when they darcs send a patch back to you. + The contents of the file should simply be an e-mail address. + +@@ -491,6 +491,10 @@ + [*] + ++DARCS_DO_COLOR_LINES ++[*] ++ + DARCS_DONT_COLOR + [*] +@@ -749,7 +753,7 @@ +

    + +

    +- ++ +
    + Highlighted output +

    +@@ -763,6 +767,8 @@ + by setting DARCS_ALWAYS_COLOR to 1. + If you can't see colors you can set DARCS_ALTERNATIVE_COLOR to 1, + and darcs will use ANSI codes for bold and reverse video instead of colors. ++In addition, there is an extra-colorful mode, which is not enabled by ++default, which can be activated with DARCS_DO_COLOR_LINES. + +

    + By default darcs will escape (by highlighting if possible) any kind of spaces at the end of lines +@@ -839,35 +845,35 @@ + +

    + +
    + David Roundy +-2008-04-07 ++2008-06-23 +
    + + +diff -ruN darcs-2.0.0/doc/manual/node6.html darcs-2.0.2/doc/manual/node6.html +--- darcs-2.0.0/doc/manual/node6.html 2008-04-07 15:11:55.000000000 +0000 ++++ darcs-2.0.2/doc/manual/node6.html 2008-06-24 01:26:12.000000000 +0000 +@@ -27,30 +27,30 @@ + + + +@@ -59,46 +59,46 @@ + Subsections + + + +@@ -145,7 +145,7 @@ + The pristine tree is constructed from groups of changes, + called patches (some other version control systems use the + term changeset instead of patch).5.1 Darcs will create and store these patches ++ HREF="footnode.html#foot2392">5.1 Darcs will create and store these patches + based on the changes you make in working. + +

    +@@ -176,7 +176,7 @@ + + If you have a difference in working, you do two things + with it: record it to keep it, or revert it to lose the changes.5.2 ++ HREF="footnode.html#foot428">5.2 +

    + If you have a difference between working and pristine--for example after editing some files in working--whatsnew will show some ``unrecorded changes''. + To save these changes, use record. +@@ -266,7 +266,7 @@ + But other types of primitive patches need to be explicitly created + with a darcs command. + They are kept in pending5.3until they are either recorded or reverted. ++ HREF="footnode.html#foot2393">5.3until they are either recorded or reverted. + +

    + Pending can be thought of as a special extension of working. +@@ -341,7 +341,7 @@ + These are calculated automatically by darcs. + If a patch removes a file or a line of code, + it will have to depend on the patch that added that file or line of code.5.4If a patch adds a line of code, ++ HREF="footnode.html#foot479">5.4If a patch adds a line of code, + it will usually have to depend on the patch or patches that added the adjacent lines. + +

    +@@ -395,7 +395,7 @@ + If you suspect a certain feature from some time ago introduced a bug, + you can remove the patch/patches that adds the feature, + and try without it.5.5 ++ HREF="footnode.html#foot2394">5.5 +

    + Patches are added to a repository with pull + and removed from the repositories with obliterate. +@@ -438,7 +438,7 @@ +

    + A tag is just a patch, but it only contains explicit dependencies. + It will depend on all the patches in the current repository.5.6Darcs can recognize if a patch is as a tag; ++ HREF="footnode.html#foot488">5.6Darcs can recognize if a patch is as a tag; + tags are sometimes treated specially by darcs commands. + +

    +@@ -468,14 +468,13 @@ + but the same line added by a common depended-upon patch. + +

    +-Contrary to many other merging tools, +-darcs considers two patches making the same change to be a conflict. +-In fact, darcs doesn't even look at the contents of the conflicting lines. +-If you think this is wrong, think about two different patches +-each adding a new keyword and also changing the line +-``#define NUM_OF_KEYWORDS 17'' +-to +-``#define NUM_OF_KEYWORDS 18''. ++If you are using a darcs-2 repository (Section [*]), ++darcs does not consider two patches making the same change to be a ++conflict, much in the same fashion as other version control systems. ++(The caveat here is two non-identical patches with some identical ++changes may conflict. For the most part, darcs should just do what you ++expect). + +

    + A conflict happens when two conflicting patches meet in the same repository. +@@ -487,7 +486,7 @@ +

    + Darcs escapes this problem + by ignoring those parts5.7of the patches that conflict. ++ HREF="footnode.html#foot497">5.7of the patches that conflict. + They are ignored in both patches. + If patch A changes the line ``FIXME'' to ``FIXED'', + and patch B changes the same line to ``DONE'', +@@ -888,35 +887,35 @@ + +

    + +
    + David Roundy +-2008-04-07 ++2008-06-23 +
    + + +diff -ruN darcs-2.0.0/doc/manual/node7.html darcs-2.0.2/doc/manual/node7.html +--- darcs-2.0.0/doc/manual/node7.html 2008-04-07 15:11:55.000000000 +0000 ++++ darcs-2.0.2/doc/manual/node7.html 2008-06-24 01:26:12.000000000 +0000 +@@ -27,30 +27,30 @@ + + + +@@ -62,167 +62,163 @@ +
  • +
    +-
  • Common options to darcs commands + +
    +-
  • Options apart from darcs commands +-
  • Getting help + +
    +-
  • Creating repositories + +
    +-
  • Modifying the contents of a repository + +
    +-
  • Working with changes + +
    +-
  • Seeing what you've done + +
    +-
  • More advanced commands + +
    +-
  • Undoing, redoing and running in circles + +
    +-
  • Advanced examination of the repository + +
    +-
  • Rarely needed and obscure commands + + +@@ -309,17 +305,17 @@ + yes + + push6.1 ++ HREF="footnode.html#foot528">6.1 + no + no + + send6.2 ++ HREF="footnode.html#foot529">6.2 + no + no + + put6.3 ++ HREF="footnode.html#foot530">6.3 + no + no + +@@ -393,6 +389,22 @@ + +

    + ++

    ++--remote-repo ++
    ++ ++

    ++Some commands, such as pull require a remote repository to be specified, ++either from the command line or as a default. The --remote-repo ++provides an alternative way to supply this remote repository path. This flag ++can be seen as temporarily ``replacing'' the default repository. Setting it ++causes the command to ignore the default repository (it also does not affect, ++i.e. overwrite the default repository). On the other hand, if any other ++repositories are supplied as command line arguments, this flag will be ignored ++(and the default repository may be overwritten). ++ ++

    ++ +

    +
    + Selecting patches +@@ -880,11 +892,11 @@ +

    + +
    +---help, --extended-help ++--help, --overview +
    + Calling darcs with just --help as an argument gives a brief + summary of what commands are available. +-The --extended-help option gives a more technical summary of ++The --overview option gives a more technical summary of + what the commands actually do. + +
    +@@ -921,9 +933,6 @@ +

    + You could also call help as a command. This is equivalent to calling + darcs -help. +-The --verbose argument is equivalent to the darcs option +---extended-help. +-If you pass it another command as an argument, it will be equivalent to passing + the --help to that command. For example, darcs help query manifest + is equivalent to darcs query manifest --help. + +@@ -951,10 +960,6 @@ + command (for example, darcs help query manifest). + +

    +-Note that -verbose prints extra help for darcs as a whole, +-but it makes no difference when getting help for a single command. +- +-

    + +

    + Creating repositories +@@ -962,8 +967,9 @@ + +

    + +-

    +-darcs initialize ++

    ++
    ++darcs initialize +

    + +

    +@@ -1059,7 +1065,7 @@ + it does have are well known. + +

    +-hashed Overs several features while still be compatible with old-fashioned repos. The specific features are: ++hashed Offers several features while still being compatible with old-fashioned repositories. The specific features are: + +

    + +@@ -1075,7 +1081,7 @@ + +

    +

  • +-
  • Darcs get is now much faster, and always operates in a "lazy" ++
  • Darcs get can optionally operate in a much faster ``lazy'' + fashion, meaning that patches are downloaded only when they are + needed. This gives us much of the benefits of -partial repositories, + without most of their disadvantages. This approach, however, does have +@@ -1093,7 +1099,7 @@ + + +

    +-darcs-2 Enables all available features, at the expense of still being experimental, and requiring that all repos for a project use the same format. In addition to the features of the hashed format described above, the darcs-2 format also enables the following: ++darcs-2 Enables all available features, and requiring that all repos for a project use the same format. In addition to the features of the hashed format described above, the darcs-2 format also enables the following: + +

    + +@@ -1423,6 +1429,22 @@ + + +   ++--set-default ++ ++ ++
    ++ ++set default repository [DEFAULT]
    ++ ++  ++--no-set-default ++ ++ ++
    ++ ++don't set default repository
    ++ ++  + --repodir DIRECTORY + + +
    +@@ -2121,6 +2143,22 @@ + specify umask to use when writing
    + ++  ++--set-scripts-executable ++ ++ ++
    ++ ++make scripts executable
    ++ ++  ++--dont-set-scripts-executable ++ ++ ++
    ++ ++don't make scripts executable
    ++ + + +

    +@@ -2210,6 +2248,16 @@ +

    + +

    ++--set-scripts-executable ++
    ++ ++

    ++If you pass --set-scripts-executable to darcs record, darcs will set scripts ++executable in the test directory before running the test. ++ ++

    ++ ++

    + --pipe +
    + +@@ -2374,6 +2422,14 @@ + don't actually take the action + + ++  ++--xml-output ++ ++ ++
    ++ ++generate XML formatted output
    ++ + -s + --summary + +@@ -2486,6 +2542,14 @@ +
    + +   ++--remote-repo URL ++ ++ ++
    ++ ++specify the remote repository URL to work with
    ++ ++  + --no-ssh-cm + + +
    +@@ -2578,7 +2642,7 @@ +
  • If you specify the --complement flag, darcs will only + pull elements in the first repository that do not exist in any of the + remaining repositories6.4 ( +@@ -2746,6 +2810,14 @@ + don't actually take the action
  • + ++  ++--xml-output ++ ++ ++
    ++ ++generate XML formatted output
    ++ + -s + --summary + +@@ -2818,6 +2890,14 @@ +
    + +   ++--remote-repo URL ++ ++ ++
    ++ ++specify the remote repository URL to work with
    ++ ++  + --no-ssh-cm + + +
    +@@ -3078,20 +3158,20 @@ + don't sign the patch
    + +--u +---unified ++  ++--dry-run + + ++don't actually take the action +
    + +-output patch in a darcs-specific format similar to diff -u
    + +   +---dry-run ++--xml-output + + ++generate XML formatted output +
    + +-don't actually take the action
    + + -s +@@ -3182,6 +3262,14 @@ + + +   ++--remote-repo URL ++ ++ ++
    ++ ++specify the remote repository URL to work with
    ++ ++  + --context FILENAME + +
    +@@ -3252,18 +3340,6 @@ +

    + +

    +---unified +-
    +- +-

    +-If you want to create patches having context, you can use the +---unified option, which creates output vaguely reminiscent of +-diff -u. This format is still darcs-specific and should not +-be expected to apply cleanly by patch. +- +-

    +- +-

    + --output, --to, --cc +
    + +@@ -3342,7 +3418,7 @@ +

    +

    + evolution "mailto:%T?subject=%S&attach=%A&cc=%C&body=%B"
    +-msmtp %t %<
    ++msmtp -t %<
    + 
    + +

    +@@ -3408,6 +3484,14 @@ +

    + +   ++--xml-output ++ ++ ++
    ++ ++generate XML formatted output
    ++ ++  + --mark-conflicts + + +
    +@@ -3584,7 +3668,7 @@ + Darcs apply accepts a single argument, which is the name of the patch file + to be applied. If you omit this argument, the patch is read from standard + input.6.5 This ++ HREF="footnode.html#foot1342">6.5 This + allows you to use apply with a pipe from your email program, for example. + +

    +@@ -3727,7 +3811,7 @@ + +

    +

    +-msmtp %t %<
    ++msmtp -t %<
    + 
    + +

    +@@ -3982,6 +4066,14 @@ + give human-readable output

    + ++  ++--count ++ ++ ++
    ++ ++output count of changes
    ++ + -s + --summary + +@@ -4146,9 +4238,9 @@ + +

    + +-

    ++

    + darcs show contents +-

    ++

    + +

    + Usage: darcs show contents [OPTION]... [FILE]... +@@ -4199,7 +4291,7 @@ + +

    + +-

    ++

    + +
    + darcs show files +@@ -4306,7 +4398,7 @@ + +

    + +-

    ++

    + darcs show tags +

    + +@@ -4339,7 +4431,7 @@ + +

    + +-

    ++

    + darcs show repo +

    + +@@ -4709,14 +4801,6 @@ +

    + +   +---verify-hashes +- +- +-
    +- +-verify validity of patch files
    +- +-  + --no-test + + +
    +@@ -5207,6 +5291,22 @@ + specify umask to use when writing
    + ++  ++--set-scripts-executable ++ ++ ++
    ++ ++make scripts executable
    ++ ++  ++--dont-set-scripts-executable ++ ++ ++
    ++ ++don't make scripts executable
    ++ + + +

    +@@ -5236,7 +5336,9 @@ + If you configure darcs to run a test suite, darcs will run this test on the + amended repository to make sure it is valid. Darcs first creates a pristine + copy of the source tree (in a temporary directory), then it runs the test, +-using its return value to decide if the amended change is valid. ++using its return value to decide if the amended change is valid. If the ++--set-scripts-executable flag is passed to amend-record, darcs will set ++scripts executable in the temporary test directory before running the test. + +

    + +@@ -5603,7 +5705,7 @@ + recorded again in a new patch. The unrecorded patch however is actually + removed from your repository, so there is no way to record it again to get + it back.6.6. ++ HREF="footnode.html#foot1868">6.6. + +

    + If you want to remove +@@ -6444,9 +6546,9 @@ + +

    + +-

    ++

    + darcs show contents +-

    ++

    + +

    + Usage: darcs show contents [OPTION]... [FILE]... +@@ -6497,7 +6599,7 @@ + +

    + +-

    ++

    + +
    + darcs show files +@@ -6604,7 +6706,7 @@ + +

    + +-

    ++

    + darcs show tags +

    + +@@ -6637,7 +6739,7 @@ + +

    + +-

    ++

    + darcs show repo +

    + +@@ -6923,6 +7025,29 @@ + + +

    ++Advanced options: ++ ++

    ++ ++ ++ ++ ++ ++ ++ ++ ++ ++
     --set-scripts-executable ++ ++
    ++ ++make scripts executable
     --dont-set-scripts-executable ++ ++
    ++ ++don't make scripts executable
    ++ ++

    + Trackdown tries to find the most recent version in the repository which + passes a test. Given no arguments, it uses the default repository test. + Given one argument, it treats it as a test command. Given two arguments, +@@ -7046,35 +7171,35 @@ + +

    + +
    + David Roundy +-2008-04-07 ++2008-06-23 +
    + + +diff -ruN darcs-2.0.0/doc/manual/node8.html darcs-2.0.2/doc/manual/node8.html +--- darcs-2.0.0/doc/manual/node8.html 2008-04-07 15:11:55.000000000 +0000 ++++ darcs-2.0.2/doc/manual/node8.html 2008-06-24 01:26:12.000000000 +0000 +@@ -27,30 +27,30 @@ + + + +@@ -59,42 +59,42 @@ + Subsections + + + +@@ -160,13 +160,13 @@ + place it in the context of a different tree. The patch itself is not + changed, since it describes a single change, which must be the same + regardless of its representationA.1. ++ HREF="footnode.html#foot2401">A.1. + +

    + So how does one define a tree, or the context of a patch? The simplest way + to define a tree is as the result of a series of patches applied to the + empty treeA.2. Thus, the ++ HREF="footnode.html#foot2262">A.2. Thus, the + context of a patch consists of the set of patches that precede it. + +

    +@@ -242,7 +242,7 @@ + WIDTH="22" HEIGHT="30" ALIGN="MIDDLE" BORDER="0" + SRC="img17.png" + ALT="$P_2$">A.3 ++ HREF="footnode.html#foot2272">A.3 +

    + There is one other very useful relationship that two patches can have, + which is to be parallel patches, which means that the two patches have an +@@ -397,7 +397,7 @@ + that it must have the first patch in its context (remembering that the + context of a patch is a set of patches, which is how we represent a tree). + A.4 ++ HREF="footnode.html#foot2294">A.4 +

    + +

    +@@ -453,7 +453,7 @@ + requirements seem contradictory. In reality, what it means is that the + result of a merge may be a patch which is much more complex than any we + have yet consideredA.5. ++ HREF="footnode.html#foot2402">A.5. + +

    + +@@ -727,35 +727,35 @@ + +

    + +
    + David Roundy +-2008-04-07 ++2008-06-23 +
    + + +diff -ruN darcs-2.0.0/doc/manual/node9.html darcs-2.0.2/doc/manual/node9.html +--- darcs-2.0.0/doc/manual/node9.html 2008-04-07 15:11:55.000000000 +0000 ++++ darcs-2.0.2/doc/manual/node9.html 2008-06-24 01:26:12.000000000 +0000 +@@ -27,30 +27,30 @@ + + + +@@ -108,35 +108,35 @@ + + + +
    + David Roundy +-2008-04-07 ++2008-06-23 +
    + + +diff -ruN darcs-2.0.0/GNUmakefile darcs-2.0.2/GNUmakefile +--- darcs-2.0.0/GNUmakefile 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/GNUmakefile 2008-06-24 01:23:13.000000000 +0000 +@@ -15,7 +15,6 @@ + GHCFLAGS_src__Darcs__Commands__Record.o = $(filter-out -auto-all,$(GHCFLAGS)) + GHCFLAGS_src__Darcs__SelectChanges.o = $(filter-out -auto-all,$(GHCFLAGS)) + GHCFLAGS_src__SHA1.o = $(GHCFLAGS) -no-auto-all -funfolding-use-threshold20 +-GHCFLAGS_src__Context.o = $(filter-out -cpp,$(GHCFLAGS)) + ifeq ($(HAVE_CURSES),True) + GHCFLAGS_src__Darcs__External.o = $(GHCFLAGS) + ifeq ($(HAVE_TERMIO_H),True) +@@ -52,7 +51,7 @@ + Lcs.lhs OldDate.lhs OldFastPackedString.hs \ + Printer.lhs \ + RegChars.lhs \ +- SHA1.lhs Ssh.hs Stringalike.hs UTF8.lhs \ ++ SHA1.lhs Ssh.hs UTF8.lhs \ + + MODULES_CRYPT := SHA256.hs + +@@ -60,7 +59,7 @@ + ArgumentDefaults.lhs \ + Arguments.lhs Bug.lhs \ + CheckFileSystem.lhs \ +- ColourPrinter.lhs \ ++ ColorPrinter.lhs \ + Commands.lhs CommandsAux.lhs Compat.hs \ + Diff.lhs Email.hs FilePathUtils.hs \ + FilePathMonad.lhs \ +@@ -81,7 +80,7 @@ + MODULES_PATCH:=\ + Apply.lhs Bundle.lhs \ + Commute.lhs Core.lhs \ +- Check.lhs Choices.lhs \ ++ Choices.lhs \ + Depends.lhs Info.lhs Match.lhs MatchData.lhs \ + Non.lhs \ + Ordered.lhs \ +@@ -108,13 +107,15 @@ + Record.lhs Remove.lhs Repair.lhs Replace.lhs \ + Revert.lhs Rollback.lhs \ + Send.lhs SetPref.lhs \ +- Show.lhs ShowAuthors.lhs ShowContents.lhs ShowFiles.lhs ShowTags.lhs ShowRepo.lhs \ ++ Show.lhs ShowAuthors.lhs ShowBug.lhs \ ++ ShowContents.lhs ShowFiles.lhs ShowTags.lhs ShowRepo.lhs \ + Tag.lhs TrackDown.lhs TransferMode.lhs \ + Unrecord.lhs Unrevert.lhs WhatsNew.lhs \ + + witnesses: src/Darcs/Patch/Real.hi src/Darcs/Patch/Properties.hi src/Darcs/Patch.hi \ + src/Darcs/Repository/ApplyPatches.hi src/Darcs/Patch/Bundle.hi \ + src/Darcs/Patch/Match.hi src/Darcs/Repository/HashedRepo.hi \ ++ src/Darcs/Resolution.hi src/Darcs/Patch/Check.hi \ + src/Darcs/Repository/Pristine.hi src/Darcs/Repository/DarcsRepo.hi + + DARCS_FILES := $(DARCS_FILES_DEPS)\ +@@ -124,15 +125,13 @@ + $(patsubst %,src/Darcs/%,$(MODULES_DARCS))\ + $(patsubst %,src/Darcs/Patch/%,$(MODULES_PATCH))\ + $(patsubst %,src/Darcs/Repository/%,$(MODULES_REPOSITORY))\ +- $(patsubst %,src/Darcs/Commands/%,$(MODULES_COMMANDS))\ +- $(GIT_SRCS) \ ++ $(patsubst %,src/Darcs/Commands/%,$(MODULES_COMMANDS)) + + UNIT_FILES := $(DARCS_FILES) src/Darcs/Patch/Test.lhs src/Darcs/Patch/QuickCheck.lhs \ +- src/Darcs/Patch/Unit.lhs src/Darcs/Patch/Properties.lhs ++ src/Darcs/Patch/Unit.lhs src/Darcs/Patch/Properties.lhs src/Darcs/Patch/Check.lhs + + C_OBJS := $(patsubst %,src/%,c_compat.o maybe_relink.o atomic_create.o fpstring.o umask.o) \ +- src/Crypt/sha2.o \ +- $(GIT_C_OBJS) ++ src/Crypt/sha2.o src/hscurl.o src/hslibwww.o + + ifeq ($(SYS), windows) + GHCFLAGS += -isrc/win32 -Isrc/win32 -DWIN32 +@@ -143,35 +142,12 @@ + src/win32/System/Posix/IO.hs + endif + +-ifeq ($(HAVE_CURSES),True) +-GHCFLAGS += -DHAVE_CURSES +-endif +- +-ifeq ($(HAVE_HTTP),True) +-GHCFLAGS += -DHAVE_HTTP +-endif +- + ifeq ($(HAVE_MAPI),True) + C_OBJS += src/win32/send_email.o + CPPFLAGS += -Isrc/win32 + GHCFLAGS += -DHAVE_MAPI + endif + +-ifeq ($(USE_GNULIBSHA1),True) +-C_OBJS += src/sha1.o +-GHCFLAGS += -DUSE_GNULIBSHA1 +-endif +- +-ifeq ($(HAVE_LIBCURL),True) +-C_OBJS += src/hscurl.o +-GHCFLAGS += -DHAVE_CURL +-endif +- +-ifeq ($(HAVE_LIBWWW),True) +-C_OBJS += src/hslibwww.o +-GHCFLAGS += -DHAVE_LIBWWW +-endif +- + DARCS_OBJS := $(patsubst %.hs,%.o,$(patsubst %.lhs,%.o,$(DARCS_FILES))) + UNIT_OBJS := $(patsubst %.hs,%.o,$(patsubst %.lhs,%.o,$(UNIT_FILES))) + +@@ -182,7 +158,8 @@ + bugs bugs_shell bugs_shell_hashed bugs_shell_format2 \ + bugs_perl bugs_perl_hashed bugs_perl_format2 \ + installserver installdocs installbin windowsinstaller \ +- website slowtest witnesses ++ website slowtest witnesses\ ++ api-doc-dir + + config: configure autoconf.mk + +@@ -248,9 +225,12 @@ + REPO_PATH="$$PWD" ./darcs dist --dist-name darcs-$(DARCS_VERSION) + ln -sf darcs-$(DARCS_VERSION).tar.gz darcs-latest.tar.gz + ++darcs-test.tar.gz: darcs $(PREDIST_COPY_FILES) ++ REPO_PATH="$$PWD" ./darcs dist --dist-name darcs-test ++ + predist_copy: + for F in $(PREDIST_COPY_FILES); do \ +- cp -v "$$REPO_PATH/$$F" .; \ ++ cp -v "$$REPO_PATH/$$F" "$$F"; \ + done + + predist: predist_copy doc/manual/darcs.ps doc/darcs.1 doc/manual/index.html distclean +@@ -267,31 +247,41 @@ + #ensure the directory exists for api documentation + api-doc-dir: + @echo "Creating api-doc directory" ++ @mkdir -p api-doc + + #generate the api documentation + api-doc: api-doc-dir $(DARCS_FILES) +- @echo "Generating html" +- @haddock --ignore-all-exports --optghc=-I. --optghc=-I./src --optghc=-i./src --optghc=-cpp --optghc=-D__HADDOCK__ -B `$(GHC) --print-libdir` -o api-doc -h $(filter-out %api-doc-dir,$^) ++ @if test $(HADDOCK_VERSION) -lt 2 ; then \ ++ echo "You need haddock 2.0.0 or later to build the API documentation" ; \ ++ exit 1 ; \ ++ else \ ++ echo "Generating html" ; \ ++ haddock --ignore-all-exports --optghc=-I. --optghc=-I./src --optghc=-i./src --optghc=-D__HADDOCK__ -B `$(GHC) --print-libdir` -o api-doc -h $(filter-out %api-doc-dir,$^) ; \ ++ fi + + windowsinstaller: darcs doc/manual/index.html release/darcs.nsi + echo "!define VERSION $(DARCS_VERSION)" > version.nsi + "$(MAKENSIS)" version.nsi release/darcs.nsi + rm -f version.nsi + +-darcs: $(DARCS_OBJS) src/darcs.lhs $(C_OBJS) src/rts.o ++darcs: $(DARCS_OBJS) src/darcs.lhs $(C_OBJS) + @echo Linking $@ ... + @rm -f Main.o Main.hi +- @$(GHC) $(GHCFLAGS) $(OPTLLDFLAGS) -o $@ $^ ++ifdef VERBOSE ++ $(GHC) $(GHCFLAGS) $(OPTLLDFLAGS) -o $@ $^ $(OPTLLIBS) ++else ++ @$(GHC) $(GHCFLAGS) $(OPTLLDFLAGS) -o $@ $^ $(OPTLLIBS) ++endif + + ghci: $(DARCS_FILES) $(C_OBJS) +- ghci $(filter-out -Wall,$(GHCFLAGS)) $(OPTLLDFLAGS) src/darcs.lhs $(C_OBJS) ++ ghci $(filter-out -Wall,$(GHCFLAGS)) $(OPTLLDFLAGS) src/darcs.lhs $(C_OBJS) $(OPTLLIBS) + .PHONY: ghci + + darcsman: src/darcsman.hs $(C_OBJS) $(DARCS_OBJS) + list_authors: src/list_authors.hs $(C_OBJS) $(DARCS_OBJS) + microbench: src/microbench.hs $(C_OBJS) $(DARCS_OBJS) + make_changelog: src/make_changelog.hs $(C_OBJS) $(DARCS_OBJS) +-unit: src/unit.lhs $(UNIT_OBJS) src/rts.o $(C_OBJS) ++unit: src/unit.lhs $(UNIT_OBJS) $(C_OBJS) + preproc: src/preproc.hs $(C_OBJS) $(DARCS_OBJS) + + TEXSOURCES := preproc src/darcs.lhs src/features.tex \ +@@ -322,9 +312,6 @@ + rm src/bigpage.tex + cp -f doc/darcs.css doc/manual/bigpage.css + +-doc/index.html: doc/index.html.in config.status +- sed "s/VERSION/$(DARCS_VERSION)/g" $< > $@ +- + doc/manual/darcs.ps: src/darcs_print.ps + cp src/darcs_print.ps doc/manual/darcs.ps + doc/manual/darcs.pdf: src/darcs_print.pdf +@@ -369,6 +356,7 @@ + # $6 - harness + define harness + @echo Running $4 tests on $1 repositories... ++ @chmod -R u+rwx tests-$4-$1.dir || true + @rm -rf tests-$4-$1.dir && cp -R tests tests-$4-$1.dir + @cd tests-$4-$1.dir && rm -rf .darcs; mkdir .darcs;\ + $2;\ +diff -ruN darcs-2.0.0/hpc.README darcs-2.0.2/hpc.README +--- darcs-2.0.0/hpc.README 1970-01-01 00:00:00.000000000 +0000 ++++ darcs-2.0.2/hpc.README 2008-06-24 01:23:12.000000000 +0000 +@@ -0,0 +1,46 @@ ++#!/bin/bash ++ ++# To use hpc (Haskell Program Coverage) with darcs you need at least ++# ghc 6.8.3. ++ ++# You can build darcs with hpc support using --enable-hpc ++ ++# Then create a directory and set it as HPCTIXDIR. ++# Note that simply building darcs will begin populating ++# this directory before you ever run any tests. ++# Therefore, clean the directory after building. ++ ++mkdir -p hpctixdir ++export HPCTIXDIR=${PWD}/hpctixdir ++ ++rm -rf ./.hpc ++ ++make clean && ++./configure --enable-hpc && ++make darcs && ++#make unit && ++rm -f hpctixdir/*.tix || exit 1 ++ ++echo "hpc.README: running tests." ++make test_network ++#make test_unit ++make test_shell_hashed ++make test_shell ++make test_shell_format2 ++make test_perl ++make test_perl_hashed ++make test_perl_format2 ++make bugs_shell_hashed ++make bugs_shell ++make bugs_shell_format2 ++make bugs_perl ++make bugs_perl_hashed ++make bugs_perl_format2 ++ ++echo "hpc.README: summing results." ++hpc sum --union --exclude=Main --exclude=Context --exclude=Autoconf --exclude=Workaround hpctixdir/*.tix > darcs-hpc-summed.tix && ++ ++mkdir -p darcs-hpc && ++ ++echo "hpc.README: generating report." && ++hpc markup darcs-hpc-summed.tix --destdir=darcs-hpc +diff -ruN darcs-2.0.0/README darcs-2.0.2/README +--- darcs-2.0.0/README 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/README 2008-06-24 01:23:13.000000000 +0000 +@@ -31,8 +31,8 @@ + the darcs wiki at http://darcs.net/DarcsWiki + + Of particular interest are the following documents: +- * http://darcs.net/DarcsWiki/DeveloperFAQ +- * http://darcs.net/DarcsWiki/DeveloperTips ++ * http://wiki.darcs.net/index.html/DeveloperFAQ ++ * http://wiki.darcs.net/index.html/DeveloperTips + + Testing + ======= +diff -ruN darcs-2.0.0/release/darcs.spec darcs-2.0.2/release/darcs.spec +--- darcs-2.0.0/release/darcs.spec 1970-01-01 00:00:00.000000000 +0000 ++++ darcs-2.0.2/release/darcs.spec 2008-06-24 01:23:33.000000000 +0000 +@@ -0,0 +1,194 @@ ++## darcs.spec is autogenerated from darcs.spec.in in the darcs ++## distribution edit darcs.spec.in if you want to make long term ++## changes ++ ++ ++Name: darcs ++Version: 2.0.2 ++Release: 1%{?dist} ++Summary: David's advanced revision control system ++ ++Group: Development/Tools ++License: GPLv2+ ++URL: http://www.darcs.net/ ++Source0: http://www.darcs.net/%{name}-%{version}.tar.gz ++BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) ++ ++BuildRequires: ghc, %{_sbindir}/sendmail, curl-devel, ncurses-devel, zlib-devel ++# for make check ++BuildRequires: which ++# need chcon ++Requires(post): coreutils ++ ++# http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=246051 ++ExcludeArch: ppc64 ++ ++%description ++Darcs is a revision control system, along the lines of CVS ++or arch. That means that it keeps track of various revisions ++and branches of your project, allows for changes to ++propagate from one branch to another. Darcs is intended to ++be an ``advanced'' revision control system. Darcs has two ++particularly distinctive features which differ from other ++revision control systems: 1) each copy of the source is a ++fully functional branch, and 2) underlying darcs is a ++consistent and powerful theory of patches. ++ ++ ++%package server ++Summary: David's advanced revision control system Server ++Group: Development/Tools ++Requires: webserver ++ ++%description server ++Darcs is a revision control system, along the lines of CVS ++or arch. That means that it keeps track of various revisions ++and branches of your project, allows for changes to ++propagate from one branch to another. Darcs is intended to ++be an ``advanced'' revision control system. Darcs has two ++particularly distinctive features which differ from other ++revision control systems: 1) each copy of the source is a ++fully functional branch, and 2) underlying darcs is a ++consistent and powerful theory of patches. ++ ++This package contains the darcs cgi server program. ++ ++ ++%prep ++%setup -q -n %{name}-%{version} ++# skip test currently failing in buildsystem ++mv tests/send.sh{,-disabled} ++ ++ ++%build ++%configure --libexecdir=%{_localstatedir}/www ++make all ++ ++%check ++make check ++ ++ ++%install ++rm -rf $RPM_BUILD_ROOT ++make DESTDIR=$RPM_BUILD_ROOT installbin installserver ++ ++cp tools/darcs_completion bash_completion ++rm -r %buildroot%{_sysconfdir}/bash_completion.d ++ ++ ++%clean ++rm -rf $RPM_BUILD_ROOT ++ ++ ++%post ++semanage fcontext -a -t unconfined_execmem_exec_t %{_bindir}/darcs >/dev/null 2>&1 || : ++restorecon -v %{_bindir}/darcs ++ ++ ++%files ++%defattr(-,root,root,-) ++%doc AUTHORS COPYING ChangeLog doc/manual bash_completion tools/zsh_completion_* ++%{_bindir}/darcs ++%{_mandir}/man1/* ++ ++ ++%files server ++%defattr(-,root,root,-) ++%{_localstatedir}/www/cgi-bin ++%config(noreplace) %{_sysconfdir}/darcs ++%{_datadir}/darcs ++ ++ ++%changelog ++* Mon Jun 16 2008 Michael De La Rue - 2.0.0-1 ++- update to version 2.0.0 ++- remove build of index.html which is already built ++ ++* Fri Sep 21 2007 Jens Petersen - 1.0.9-6 ++- fix the "|| :" quoting in the post install script (#295351) ++ ++* Thu Sep 20 2007 Jens Petersen - 1.0.9-5 ++- set selinux file-context for %{_bindir}/darcs ++ (reported by Jim Radford, #295351) ++ ++* Fri Aug 10 2007 Jens Petersen - 1.0.9-4 ++- specify license is GPL 2 or later ++ ++* Wed Jun 27 2007 Jeremy Hinegardner - 1.0.9-3 ++- clean rpmlint warnings/errors ++ - move PreReq to Requires(post) ++ - move make check to 'check' section ++ - mark config files as such ++ ++* Wed Jun 27 2007 Jeremy Hinegardner - 1.0.9-2 ++- added ExcludeArch: ppc64 ++ ++* Wed Jun 27 2007 Jeremy Hinegardner - 1.0.9-1 ++- update to 1.0.9 ++ ++* Mon Feb 19 2007 Jens Petersen - 1.0.9-0.1.rc2 ++- update to 1.0.9rc2 which builds with ghc66 ++ ++* Fri Feb 2 2007 Jens Petersen - 1.0.8-5 ++- rebuild for ncurses replacing termcap (#226754) ++ ++* Wed Nov 1 2006 Jens Petersen - 1.0.8-4 ++- rebuild for new libcurl ++ ++* Thu Sep 28 2006 Jens Petersen - 1.0.8-3 ++- rebuild for FC6 ++- enable make check ++ ++* Fri Jun 23 2006 Jens Petersen - 1.0.8-2 ++- set unconfined_execmem_exec_t context to allow running under selinux targeted ++ policy (#195820) ++ ++* Wed Jun 21 2006 Jens Petersen - 1.0.8-1 ++- update to 1.0.8 ++ ++* Sun May 14 2006 Jens Petersen - 1.0.7-1 ++- update to 1.0.7 ++- fix typo of propagate in description (#189651) ++- disable "make check" for now since it blows up in buildsystem ++ ++* Thu Mar 2 2006 Jens Petersen - 1.0.6-1 ++- update to 1.0.6 ++ - darcs-createrepo is gone ++ ++* Thu Dec 8 2005 Jens Petersen - 1.0.5-1 ++- 1.0.5 bugfix release ++ ++* Mon Nov 14 2005 Jens Petersen - 1.0.4-1 ++- 1.0.4 release ++ - skip tests/send.sh for now since it is failing in buildsystem ++ ++* Tue Jul 5 2005 Jens Petersen ++- drop superfluous doc buildrequires (Karanbir Singh, #162436) ++ ++* Fri Jul 1 2005 Jens Petersen - 1.0.3-2 ++- fix buildrequires ++ - add sendmail, curl-devel, ncurses-devel, zlib-devel, and ++ tetex-latex, tetex-dvips, latex2html for doc generation ++ ++* Tue May 31 2005 Jens Petersen - 1.0.3-1 ++- initial import into Fedora Extras ++- 1.0.3 release ++- include bash completion file in doc dir ++ ++* Sun May 8 2005 Jens Petersen - 1.0.3-0.rc1.1 ++- 1.0.3rc1 ++ - build with ghc-6.4 ++ ++* Wed Feb 8 2005 Jens Petersen - 1.0.2-1 ++- update to 1.0.2 ++ ++* Thu Jul 15 2004 Jens Petersen - 0.9.22-1 ++- 0.9.22 ++- darcs-0.9.21-css-symlinks.patch no longer needed ++ ++* Thu Jun 24 2004 Jens Petersen - 0.9.21-1 ++- update to 0.9.21 ++- replace darcs-0.9.13-mk-include.patch with darcs-0.9.21-css-symlinks.patch ++ ++* Wed Nov 5 2003 Jens Petersen ++- Initial packaging. +diff -ruN darcs-2.0.0/release/darcs.spec.in darcs-2.0.2/release/darcs.spec.in +--- darcs-2.0.0/release/darcs.spec.in 1970-01-01 00:00:00.000000000 +0000 ++++ darcs-2.0.2/release/darcs.spec.in 2008-06-24 01:23:12.000000000 +0000 +@@ -0,0 +1,194 @@ ++## darcs.spec is autogenerated from darcs.spec.in in the darcs ++## distribution edit darcs.spec.in if you want to make long term ++## changes ++ ++ ++Name: darcs ++Version: @DARCS_VERSION@ ++Release: 1%{?dist} ++Summary: David's advanced revision control system ++ ++Group: Development/Tools ++License: GPLv2+ ++URL: http://www.darcs.net/ ++Source0: http://www.darcs.net/%{name}-%{version}.tar.gz ++BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) ++ ++BuildRequires: ghc, %{_sbindir}/sendmail, curl-devel, ncurses-devel, zlib-devel ++# for make check ++BuildRequires: which ++# need chcon ++Requires(post): coreutils ++ ++# http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=246051 ++ExcludeArch: ppc64 ++ ++%description ++Darcs is a revision control system, along the lines of CVS ++or arch. That means that it keeps track of various revisions ++and branches of your project, allows for changes to ++propagate from one branch to another. Darcs is intended to ++be an ``advanced'' revision control system. Darcs has two ++particularly distinctive features which differ from other ++revision control systems: 1) each copy of the source is a ++fully functional branch, and 2) underlying darcs is a ++consistent and powerful theory of patches. ++ ++ ++%package server ++Summary: David's advanced revision control system Server ++Group: Development/Tools ++Requires: webserver ++ ++%description server ++Darcs is a revision control system, along the lines of CVS ++or arch. That means that it keeps track of various revisions ++and branches of your project, allows for changes to ++propagate from one branch to another. Darcs is intended to ++be an ``advanced'' revision control system. Darcs has two ++particularly distinctive features which differ from other ++revision control systems: 1) each copy of the source is a ++fully functional branch, and 2) underlying darcs is a ++consistent and powerful theory of patches. ++ ++This package contains the darcs cgi server program. ++ ++ ++%prep ++%setup -q -n %{name}-%{version} ++# skip test currently failing in buildsystem ++mv tests/send.sh{,-disabled} ++ ++ ++%build ++%configure --libexecdir=%{_localstatedir}/www ++make all ++ ++%check ++make check ++ ++ ++%install ++rm -rf $RPM_BUILD_ROOT ++make DESTDIR=$RPM_BUILD_ROOT installbin installserver ++ ++cp tools/darcs_completion bash_completion ++rm -r %buildroot%{_sysconfdir}/bash_completion.d ++ ++ ++%clean ++rm -rf $RPM_BUILD_ROOT ++ ++ ++%post ++semanage fcontext -a -t unconfined_execmem_exec_t %{_bindir}/darcs >/dev/null 2>&1 || : ++restorecon -v %{_bindir}/darcs ++ ++ ++%files ++%defattr(-,root,root,-) ++%doc AUTHORS COPYING ChangeLog doc/manual bash_completion tools/zsh_completion_* ++%{_bindir}/darcs ++%{_mandir}/man1/* ++ ++ ++%files server ++%defattr(-,root,root,-) ++%{_localstatedir}/www/cgi-bin ++%config(noreplace) %{_sysconfdir}/darcs ++%{_datadir}/darcs ++ ++ ++%changelog ++* Mon Jun 16 2008 Michael De La Rue - 2.0.0-1 ++- update to version 2.0.0 ++- remove build of index.html which is already built ++ ++* Fri Sep 21 2007 Jens Petersen - 1.0.9-6 ++- fix the "|| :" quoting in the post install script (#295351) ++ ++* Thu Sep 20 2007 Jens Petersen - 1.0.9-5 ++- set selinux file-context for %{_bindir}/darcs ++ (reported by Jim Radford, #295351) ++ ++* Fri Aug 10 2007 Jens Petersen - 1.0.9-4 ++- specify license is GPL 2 or later ++ ++* Wed Jun 27 2007 Jeremy Hinegardner - 1.0.9-3 ++- clean rpmlint warnings/errors ++ - move PreReq to Requires(post) ++ - move make check to 'check' section ++ - mark config files as such ++ ++* Wed Jun 27 2007 Jeremy Hinegardner - 1.0.9-2 ++- added ExcludeArch: ppc64 ++ ++* Wed Jun 27 2007 Jeremy Hinegardner - 1.0.9-1 ++- update to 1.0.9 ++ ++* Mon Feb 19 2007 Jens Petersen - 1.0.9-0.1.rc2 ++- update to 1.0.9rc2 which builds with ghc66 ++ ++* Fri Feb 2 2007 Jens Petersen - 1.0.8-5 ++- rebuild for ncurses replacing termcap (#226754) ++ ++* Wed Nov 1 2006 Jens Petersen - 1.0.8-4 ++- rebuild for new libcurl ++ ++* Thu Sep 28 2006 Jens Petersen - 1.0.8-3 ++- rebuild for FC6 ++- enable make check ++ ++* Fri Jun 23 2006 Jens Petersen - 1.0.8-2 ++- set unconfined_execmem_exec_t context to allow running under selinux targeted ++ policy (#195820) ++ ++* Wed Jun 21 2006 Jens Petersen - 1.0.8-1 ++- update to 1.0.8 ++ ++* Sun May 14 2006 Jens Petersen - 1.0.7-1 ++- update to 1.0.7 ++- fix typo of propagate in description (#189651) ++- disable "make check" for now since it blows up in buildsystem ++ ++* Thu Mar 2 2006 Jens Petersen - 1.0.6-1 ++- update to 1.0.6 ++ - darcs-createrepo is gone ++ ++* Thu Dec 8 2005 Jens Petersen - 1.0.5-1 ++- 1.0.5 bugfix release ++ ++* Mon Nov 14 2005 Jens Petersen - 1.0.4-1 ++- 1.0.4 release ++ - skip tests/send.sh for now since it is failing in buildsystem ++ ++* Tue Jul 5 2005 Jens Petersen ++- drop superfluous doc buildrequires (Karanbir Singh, #162436) ++ ++* Fri Jul 1 2005 Jens Petersen - 1.0.3-2 ++- fix buildrequires ++ - add sendmail, curl-devel, ncurses-devel, zlib-devel, and ++ tetex-latex, tetex-dvips, latex2html for doc generation ++ ++* Tue May 31 2005 Jens Petersen - 1.0.3-1 ++- initial import into Fedora Extras ++- 1.0.3 release ++- include bash completion file in doc dir ++ ++* Sun May 8 2005 Jens Petersen - 1.0.3-0.rc1.1 ++- 1.0.3rc1 ++ - build with ghc-6.4 ++ ++* Wed Feb 8 2005 Jens Petersen - 1.0.2-1 ++- update to 1.0.2 ++ ++* Thu Jul 15 2004 Jens Petersen - 0.9.22-1 ++- 0.9.22 ++- darcs-0.9.21-css-symlinks.patch no longer needed ++ ++* Thu Jun 24 2004 Jens Petersen - 0.9.21-1 ++- update to 0.9.21 ++- replace darcs-0.9.13-mk-include.patch with darcs-0.9.21-css-symlinks.patch ++ ++* Wed Nov 5 2003 Jens Petersen ++- Initial packaging. +diff -ruN darcs-2.0.0/release/determine_release_state.pl darcs-2.0.2/release/determine_release_state.pl +--- darcs-2.0.0/release/determine_release_state.pl 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/release/determine_release_state.pl 2008-06-24 01:23:12.000000000 +0000 +@@ -4,30 +4,45 @@ + + # This is the version in configure.ac: + my $official_version = $ARGV[0]; ++my $lastrelease = "unknown"; + + my $state = "unknown"; +-my $last_change = `darcs changes --last 1`; +-if ($last_change =~ /tagged (\S+)$/ && $1 eq $official_version) { +- my $t = $1; +- if ($t =~ /pre(\d+)/) { +- $state = "prerelease $1"; +- } elsif ($t =~ /rc(\d+)/) { +- $state = "release candidate $1"; +- } elsif ($1 =~ /^[0-9\.]+$/) { +- $state = "release"; ++if (-e "_darcs/hashed_inventory") { ++ my $patches = `darcs changes --from-tag '$official_version' --count 2>/dev/null`; ++ unless ($patches) { ++ # Looks like "darcs changes" does not support --count argument ++ $patches = grep(/^\S/, `darcs changes --from-tag '$official_version'`); ++ } ++ $patches = $patches - 1 if ($patches > 0); ++ if ($patches == 0) { ++ if ($official_version =~ /pre(\d+)/) { ++ $state = "prerelease $1"; ++ } elsif ($official_version =~ /rc(\d+)/) { ++ $state = "release candidate $1"; ++ } elsif ($official_version =~ /^[0-9\.]+$/) { ++ $state = "release"; ++ } else { ++ $state = "tag"; ++ } ++ } elsif ($patches > 1) { ++ $state = "+ $patches patches"; + } else { +- $state = "tag $t"; ++ $state = "+ $patches patch"; + } +-} else { +- my $lastrepo = $ENV{PWD}; +- if (-f "_darcs/prefs/defaultrepo") { +- $lastrepo = `cat _darcs/prefs/repos`; +- } +- if ($lastrepo =~ /repos\/unstable/ || $lastrepo =~ /darcs-unstable/) { +- $state = "unstable branch"; +- } elsif ($lastrepo =~ /repos\/stable/ || $lastrepo =~ /darcs-stable/) { +- $state = "stable branch"; ++ ++ if (open(X,"darcs changes -t '^[0-9\.]+\$' --reverse |")) { ++ while () { ++ if (/tagged (\S+)$/) { ++ $lastrelease = $1; ++ } ++ } ++ } ++} elsif (open(FIN,"release/STATE")) { ++ my $statestring = ; ++ if ($statestring =~ /\((.+)\)/) { ++ $state = $1; + } ++ close(FIN); + } + + print "$official_version ($state)\n"; +@@ -42,6 +57,7 @@ + close(FOUT); + } + ++ + my $replace = 1; + if (open(FIN,"src/ThisVersion.lhs") && open(FTMP,"src/ThisVersion.lhs.tmp")) { + my ($old, $new); +@@ -58,3 +74,12 @@ + unlink "src/ThisVersion.lhs.tmp"; + } + ++if (open(FIN,"doc/index.html.in") && open(FOUT,">doc/index.html")) { ++ while () { ++ s/VERSION/$official_version/g; ++ s/RELEASE/$lastrelease/g; ++ print FOUT $_; ++ } ++ close(FIN); ++ close(FOUT); ++} +diff -ruN darcs-2.0.0/release/openssl_ok darcs-2.0.2/release/openssl_ok +--- darcs-2.0.0/release/openssl_ok 1970-01-01 00:00:00.000000000 +0000 ++++ darcs-2.0.2/release/openssl_ok 2008-06-24 01:23:12.000000000 +0000 +@@ -0,0 +1,176 @@ ++This is the list of all contributors as of ++ 2008-05-22 ++and whether they have explicitly granted permission to ++add this exception to our instance of the GPL ++ ++ As a special exception, you have permission to link this program with code ++ which is licensed under the Common Public Licence, the Eclipse Public Licence, ++ or the OpenSSL License, as long as you follow the requirements of the GNU GPL ++ in regard to all of the software in the executable aside from the software ++ which is licensed under the Common Public License or the Eclipse Public ++ License. ++ ++key ++--- ++zooko-please ++ From Zooko's message to darcs-devel 'May I please combine darcs with OpenSSH'? ++ on 2006-05-21 ++ ++zooko-private ++ Private reply to Zooko ++ ++kowey-private ++ Private reply to Eric ++ ++cannot find contact info ++------------------------ ++Christian Egli typo-manual ++Peter Maxwell minor ++ ++no-reply ++-------- ++Andrea Rossato trivial-imports ++Andrew J. Kroll boring_regex ++Andrew L Johnson bugfix-get-partial ++Benedikt Schmidt signficant ++Bill Trost ui_messages-tests ++Conrad Parker comments ++Daniel Freedman binary_regex ++Dave Love tests-configure-makefile-doc ++Era Eriksson doc ++Esa Ilari Vuokko significant ++Florian Weimer show-tags ++Frank Ruell configure ++Gabriel Ebner debian ++Ian Lynagh significant ++Jan-Benedict Glaw worth_asking ++Jan Scheffczyk population ++Jeremy Fincher ui_messages ++Jim Marshall minor ++Jim Radford minor-ui ++Jonathon Mah ui_messages ++Lele Gaifax worth_asking ++Lennart Kolmodin configure ++Lode Leroy doc-typo ++Magnus Jonsson minor-exec?-buried? ++Martin Schaffner ui_messages ++Nicolas Pouillard significant ++Nigel Rowe cgi-makefile-doc ++Pekka Pessi significant ++Peter Prohaska minor ++Richard Smith configure ++Samuel Bronson makefile ++Sean Robinson makefile ++Sean Russell changes-xml ++Spencer Janssen minor-cleanup ++Stephen Reindl configure ++Thies C. Arntzen minor-see-changes ++Thomas L. Bevan proxy-password ++Thomas Zander ui-boring_regex-docs ++Tobias Gruetzmacher libcurl-any-http-auth ++Tomasz Zielonka lots ++Vadim Zaliva curses, flags ++Vladimir Vysotsky minor-win32-fixes ++Yuval Kogman doc-suite ++Zack Brown doc ++ ++no ++-- ++Simon Michael kowey-private 2008-06-09 could-acquiese-if-droundy-felt-strongly ++ ++yes ++--- ++Aaron Denney kowey-private 2008-06-05 ++Adam Megacz kowey-private 2008-06-05 ++Aggelos Economopoulos kowey-private 2008-06-05 ++Anders Hockersten kowey-private 2008-06-05 ++Andres Loeh kowey-private 2008-06-05 ++Andrew Pimlott kowey-private 2008-06-05 ++Anthony Towns kowey-private 2008-06-06 ++Bertram Felgenhauer kowey-private 2008-06-06 ++Brian Alliet kowey-private 2008-06-05 ++Bryce Wilcox-O'Hearn well-duh 2006-05-21 ++Daan Leijen kowey-private 2008-06-05 ++Dan kowey-private 2008-06-09 ++Daniel Gorin kowey-private 2008-06-05 ++David Roundy kowey-private 2008-06-13 eclipse-ok-after-all ++Dmitry Kurochkin kowey-private 2008-06-05 ++Don Bindner kowey-private 2008-06-05 ++Edwin Thomson kowey-private 2008-06-05 ++Eric Kow zooko-private 2006-05-21 ++Erik Schnetter kowey-private 2008-06-05 ++Ferenc Wagner kowey-private 2008-06-05 ++Ganesh Sittampalam kowey-private 2008-06-05 ++Georg Neis kowey-private 2008-06-07 ++Henning Glawe kowey-private 2008-06-05 ++Jan Braun kowey-private 2008-06-05 ++Jason Dagit zooko-please 2006-05-21 ++Joeri van Ruth kowey-private 2008-06-06 ++John Goerzen kowey-private 2008-06-05 ok-if-droundy-ok ++John Meacham kowey-private 2008-06-12 worth_asking ++Jon Olsson kowey-private 2008-06-11 tests ++Josef Svenningsson kowey-private 2008-06-05 ++Juliusz Chroboczek zooko-please 2006-05-26 ++Kannan Goundan kowey-private 2008-06-05 ++Karel Gardas kowey-private 2008-06-05 ++Ketil Malde kowey-private 2008-06-06 ++Kevin Quick kowey-private 2008-06-05 ++Kirill Smelkov kowey-private 2008-06-08 ++Kirsten [Tim] Chevalier kowey-private 2008-06-05 ++Marco Tulio Gontijo e Silva kowey-private 2008-06-05 ++Mark Stosberg issue176 2008-01-26 ++Marnix Klooster kowey-private 2008-06-05 ++Matt Brubeck kowey-private 2008-06-05 ++Matt Kraai kowey-private 2008-06-05 ++Matt Lavin kowey-private 2008-06-05 ++Matyas Janos kowey-private 2008-06-05 ++Michael G Schwern kowey-private 2008-06-11 tests ++Michal Sojka kowey-private 2008-06-05 ++Nils Decker kowey-private 2008-06-06 ++Nimrod A. Abing kowey-private 2008-06-06 ++Peter Hercek kowey-private 2008-06-05 ++Peter Rockai kowey-private 2008-06-06 ++Peter Simons kowey-private 2008-06-10 makefile-configure-cosmetic ++Peter Strand kowey-private 2008-06-05 ++Ralph Corderoy kowey-private 2008-06-05 ++Randy Roesler kowey-private 2008-06-05 ++Reinier Lamers kowey-private 2008-06-05 ++Samuel Tardieu kowey-private 2008-06-05 ++Shae Erisson kowey-private 2008-06-05 ++Simon Marlow kowey-private 2008-06-05 ++Simon McVittie kowey-private 2008-06-05 ++Taral kowey-private 2008-06-05 ok-if-droundy-ok ++Thomas Schwinge kowey-private 2008-06-10 ++Tommy Pettersson zooko-please 2006-06-16 ++Trent W. Buck kowey-private 2008-06-05 ++Tristan Seligmann kowey-private 2008-06-05 ++Tuukka Hastrup kowey-private 2008-06-05 ++Vaclav Haisman kowey-private 2008-06-05 ++Will kowey-private 2008-06-05 ++Zachary P. Landau kowey-private 2008-06-05 ++ ++super-yes [let darcs team decide future changes] ++--------- ++Christopher Lane Hinson kowey-private 2008-06-07 relicense-as-you-like-forever ++Daniel Bünzli kowey-private 2008-06-06 transfer-copyright-to-droundy ++Guillaume Outters kowey-private 2008-06-06 public-domain ++Gwern Branwen kowey-private 2008-06-05 public-domain ++Isaac Jones kowey-private 2008-06-05 eric-and-david-do-what-see-fit ++Jani Monoses [via ] kowey-private 2008-06-11 fine-with-whatever-darcs-project-leaders-pick ++Joe Edmonds kowey-private 2008-06-05 ++Joshua J. Berry kowey-private 2008-06-05 ++Martin Bays kowey-private 2008-06-05 ++Mirian Crzig [Craig] Lennox kowey-private 2008-06-10 willing-to-assign-copyright refactor-minor ++Victor Hugo Borja Rodriguez [via ] kowey-private 2008-06-13 willing-to-assign-copyright minor-remote_apply ++Wim Lewis kowey-private 2008-06-05 ++ ++moot [changes only to: test suite, tools] ++---- ++Carlos Phillips zsh_completion ++Don Stewart fps_under_bsd ++Eric Gaudet rts-buried ++Jens Petersson tests ++Kim Hansen cgi ++Manuel M T Chakravarty cgi ++Misha Aizatulin rolledback ++Peter Stuifzand cgi_xslt +diff -ruN darcs-2.0.0/release/STATE darcs-2.0.2/release/STATE +--- darcs-2.0.0/release/STATE 1970-01-01 00:00:00.000000000 +0000 ++++ darcs-2.0.2/release/STATE 2008-06-24 01:23:36.000000000 +0000 +@@ -0,0 +1 @@ ++2.0.2 (release) +diff -ruN darcs-2.0.0/Setup.lhs darcs-2.0.2/Setup.lhs +--- darcs-2.0.0/Setup.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/Setup.lhs 1970-01-01 00:00:00.000000000 +0000 +@@ -1,4 +0,0 @@ +-#!/usr/bin/env runhaskell +- +-> import Distribution.Make +-> main = defaultMain +diff -ruN darcs-2.0.0/src/Autoconf.lhs.in darcs-2.0.2/src/Autoconf.lhs.in +--- darcs-2.0.0/src/Autoconf.lhs.in 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Autoconf.lhs.in 2008-06-24 01:23:12.000000000 +0000 +@@ -4,6 +4,7 @@ + % @configure_input@ + % + \begin{code} ++{-# OPTIONS -cpp #-} + module Autoconf ( darcsconfdir, datadir, libexecdir, have_libcurl, have_libwww, have_HTTP, + use_color, use_mmap, darcs_version, sendmail_path, have_sendmail, + have_mapi, diff_program, +@@ -26,11 +27,19 @@ + + {-# INLINE have_libcurl #-} + have_libcurl :: Bool +-have_libcurl = @HAVE_LIBCURL@ ++#ifdef HAVE_CURL ++have_libcurl = True ++#else ++have_libcurl = False ++#endif + + {-# INLINE have_libwww #-} + have_libwww :: Bool +-have_libwww = @HAVE_LIBWWW@ ++#ifdef HAVE_LIBWWW ++have_libwww = True ++#else ++have_libwww = False ++#endif + + {-# INLINE have_HTTP #-} + have_HTTP :: Bool +diff -ruN darcs-2.0.0/src/best_practices.tex darcs-2.0.2/src/best_practices.tex +--- darcs-2.0.0/src/best_practices.tex 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/best_practices.tex 2008-06-24 01:23:12.000000000 +0000 +@@ -313,14 +313,12 @@ + Same line does \emph{not} mean the same line number and file name, + but the same line added by a common depended-upon patch. + +-Contrary to many other merging tools, +-darcs considers two patches making the \emph{same} change to be a conflict. +-In fact, darcs doesn't even look at the contents of the conflicting lines. +-If you think this is wrong, think about two different patches +-each adding a new keyword and also changing the line +-``\verb|#define NUM_OF_KEYWORDS 17|'' +-to +-``\verb|#define NUM_OF_KEYWORDS 18|''. ++If you are using a darcs-2 repository (Section \ref{initialize}), ++darcs does \emph{not} consider two patches making the \emph{same} change to be a ++conflict, much in the same fashion as other version control systems. ++(The caveat here is two non-identical patches with some identical ++changes may conflict. For the most part, darcs should just do what you ++expect). + + A conflict \emph{happens} when two conflicting patches meet in the same repository. + This is no problem for darcs; it can happily pull together just any patches. +diff -ruN darcs-2.0.0/src/building_darcs.tex darcs-2.0.2/src/building_darcs.tex +--- darcs-2.0.0/src/building_darcs.tex 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/building_darcs.tex 2008-06-24 01:23:12.000000000 +0000 +@@ -16,7 +16,7 @@ + It is a good idea (but not required) to have software installed that provide darcs + network access. The {\tt libwww-dev}, {\tt libwww-ssl-dev} or {\tt libcurl} packages + newer than than 7.18.0 are recommended because they provide pipelining support speed +-up HTTP access. They have to explicitly chosen with {\tt --with-libwww} or ++up HTTP access. They have to be explicitly chosen with {\tt --with-libwww} or + {\tt --with-curl-pipelining}. Otherwise, darcs will automatically look for one of + libcurl, {\tt curl} or {\tt wget}. You also might want to have scp + available if you want to grab your repos over ssh\ldots +@@ -99,9 +99,9 @@ + + \section{Building darcs from the repository} + To build the latest darcs from its repository, you will first need a +-working copy of darcs. You can get darcs using: ++working copy of Darcs 2. You can get darcs using: + \begin{verbatim} +-% darcs get -v http://darcs.net/repos/stable ++% darcs get -v http://darcs.net/ + \end{verbatim} + and once you have the darcs repository you can bring it up to date with a + \begin{verbatim} +@@ -110,11 +110,11 @@ + + The repository doesn't hold automatically generated files, which include + the configure script and the HTML documentation, so you need to run +-\verb!autoconf! first. ++\verb!autoconf! first. + + You'll need \verb!autoconf! 2.50 or higher. Some systems have more than one + version of \verb!autoconf! installed. For example, \verb!autoconf! may point to +-version 2.13, while \verb!autoconf259! runs version 2.59. ++version 2.13, while \verb!autoconf259! runs version 2.59. + + Also note that \verb!make! is really "GNU make". On some systems, such as + the *BSDs, you may need to type \verb!gmake! instead of make for this to work. +@@ -130,17 +130,6 @@ + If you want to tweak the configure options, you'll need to run {\tt + ./configure} yourself after the make, and then run make again. + +-\section{Building darcs with git} +- +-To enable git support, you first need to grab a copy of the git +-source code; since darcs doesn't yet have the capability of accessing +-remote git repositories, you'll have to either download a tarball or use +-git itself to clone a git repository. Compile git (no need to +-install); this will create a file ``\verb|libgit.a|''. Then create a +-symlink to the git source directory named ``\verb!git!'' in your darcs +-source directory, configure darcs using the ``\verb!--enable-git!'' +-option, and build darcs as usual. +- + \section{Submitting patches to darcs} + I know, this doesn't really belong in this chapter, but if you're using the + repository version of darcs it's really easy to submit patches to me using +diff -ruN darcs-2.0.0/src/configuring_darcs.tex darcs-2.0.2/src/configuring_darcs.tex +--- darcs-2.0.0/src/configuring_darcs.tex 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/configuring_darcs.tex 2008-06-24 01:23:12.000000000 +0000 +@@ -59,6 +59,7 @@ + \hline + DARCS\_ALTERNATIVE\_COLOR & \ref{env:DARCS_ALWAYS_COLOR}\\ + DARCS\_ALWAYS\_COLOR & \ref{env:DARCS_ALWAYS_COLOR}\\ ++DARCS\_DO\_COLOR\_LINES & \ref{env:DARCS_DO_COLOR_LINES}\\ + DARCS\_DONT\_COLOR & \ref{env:DARCS_ALWAYS_COLOR} \\ + DARCS\_DONT\_ESCAPE\_TRAILING\_CR & \ref{env:DARCS_DONT_ESCAPE_white}\\ + DARCS\_DONT\_ESCAPE\_TRAILING\_SPACES & \ref{env:DARCS_DONT_ESCAPE_white} \\ +@@ -220,6 +221,7 @@ + + \section{Highlighted output} + \label{env:DARCS_ALWAYS_COLOR} ++\label{env:DARCS_DO_COLOR_LINES} + \label{env:DARCS_DONT_ESCAPE_white} + + If the terminal understands ANSI color escape sequences, +@@ -230,6 +232,8 @@ + by setting DARCS\_ALWAYS\_COLOR to 1. + If you can't see colors you can set DARCS\_ALTERNATIVE\_COLOR to 1, + and darcs will use ANSI codes for bold and reverse video instead of colors. ++In addition, there is an extra-colorful mode, which is not enabled by ++default, which can be activated with DARCS\_DO\_COLOR\_LINES. + + By default darcs will escape (by highlighting if possible) any kind of spaces at the end of lines + when showing patch contents. +diff -ruN darcs-2.0.0/src/Context.hs darcs-2.0.2/src/Context.hs +--- darcs-2.0.0/src/Context.hs 2008-04-07 15:08:45.000000000 +0000 ++++ darcs-2.0.2/src/Context.hs 2008-06-24 01:23:36.000000000 +0000 +@@ -1,3 +1,3 @@ + module Context (context) where + context :: String +-context = "unknown" ++context = "# configured Mon Jun 23 18:19:52 PDT 2008\n./configure /usr/local/share/config.site /usr/local/etc/config.site\n\nContext:\n\n[TAG 2.0.2\nDavid Roundy **20080624012041] \n" +diff -ruN darcs-2.0.0/src/Crypt/SHA256.hs darcs-2.0.2/src/Crypt/SHA256.hs +--- darcs-2.0.0/src/Crypt/SHA256.hs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Crypt/SHA256.hs 2008-06-24 01:23:12.000000000 +0000 +@@ -1,4 +1,4 @@ +-{-# OPTIONS -fffi -cpp #-} ++{-# OPTIONS_GHC -fffi -cpp #-} + -- | + -- Module: Data.Digest.SHA256 + -- Copyright: Zooko O'Whielacronx +diff -ruN darcs-2.0.0/src/Darcs/Arguments.lhs darcs-2.0.2/src/Darcs/Arguments.lhs +--- darcs-2.0.0/src/Darcs/Arguments.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Arguments.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -16,6 +16,7 @@ + % Boston, MA 02110-1301, USA. + + \begin{code} ++{-# OPTIONS_GHC -cpp #-} + #include "gadts.h" + module Darcs.Arguments ( DarcsFlag( .. ), isa, flagToString, + definePatches, defineChanges, fix_filepaths, +@@ -26,6 +27,7 @@ + help_on_match, + any_verbosity, disable, restrict_paths, + notest, test, working_repo_dir, ++ remote_repo, get_remote_repo, + leave_test_dir, + possibly_remote_repo_dir, get_repodir, get_repourl, + list_registered_files, list_unregistered_files, +@@ -40,7 +42,7 @@ + reponame, tagname, creatorhash, + apply_conflict_options, reply, + pull_conflict_options, use_external_merge, +- no_deps, nocompress, compress, uncompress, ++ no_deps, nocompress, + uncompress_nocompress, repo_combinator, + options_latex, reorder_patches, + noskip_boring, allow_caseonly, +@@ -54,13 +56,12 @@ + summary, unified, tokens, + checkpoint, partial, partial_check, + diff_cmd_flag, diffflags, unidiff, xmloutput, +- force_replace, dry_run, ++ force_replace, dry_run, dry_run_noxml, + print_dry_run_message_and_exit, showFriendly, + match_one, match_several, match_range, + match_several_or_range, happy_forwarding, + match_several_or_last, + set_default, +- ephemeral, verify_hash, + fancy_move_add, pristine_tree, + set_scripts_executable, + sibling, flagsToSiblings, relink, relink_pristine, nolinks, +@@ -77,21 +78,23 @@ + import System.Directory ( doesDirectoryExist ) + import Data.List ( (\\), nub ) + import Data.Maybe ( listToMaybe ) +-import System ( ExitCode(ExitFailure, ExitSuccess), exitWith ) ++import System.Exit ( ExitCode(ExitFailure, ExitSuccess), exitWith ) + import Data.Maybe ( catMaybes ) + import Control.Monad ( liftM, when, unless ) + import Data.Char ( isDigit ) + #ifndef WIN32 ++import Printer ( renderString ) + import System.Posix.Env ( setEnv ) ++import Darcs.Patch ( list_touched_files ) ++import Darcs.Progress ( beginTedious, endTedious, tediousSize, finishedOneIO ) + #endif + + import Darcs.Hopefully ( PatchInfoAnd, info ) +-import Darcs.Patch ( RepoPatch, Patchy, showNicely, description, list_touched_files ) ++import Darcs.Patch ( RepoPatch, Patchy, showNicely, description ) + import Darcs.Patch.Info ( to_xml ) + import Darcs.Patch.Ordered ( FL, mapFL ) + import qualified Darcs.Patch ( summary ) + import Darcs.Utils ( askUser, maybeGetEnv, firstNotBlank, firstJustIO ) +-import Darcs.Progress ( beginTedious, endTedious, tediousSize, finishedOneIO ) + import Darcs.Repository.Prefs ( boring_file_filter, get_preflist, get_global ) + import Darcs.URL ( is_url ) + import Darcs.FilePathUtils ( DarcsPath(RepoDP) +@@ -104,7 +107,8 @@ + import Darcs.Repository ( slurp_pending, withRepository, ($-) ) + import Darcs.Repository.HashedRepo ( slurp_all_but_darcs ) + import Darcs.SlurpDirectory ( list_slurpy ) +-import Printer ( renderString, Doc, putDocLn, text, vcat, vsep, ($$) ) ++import Darcs.Global ( darcsdir ) ++import Printer ( Doc, putDocLn, text, vsep, ($$), vcat ) + \end{code} + + \begin{code} +@@ -169,6 +173,7 @@ + + fix_flag :: AbsolutePath -> DarcsFlag -> DarcsFlag + fix_flag fix (Sibling s) = Sibling $ toFilePath $ make_absolute fix s ++fix_flag _ (Output "-") = Output $ "-" + fix_flag fix (Output s) = Output $ toFilePath $ make_absolute fix s + fix_flag fix (Verify s) = Verify $ toFilePath $ make_absolute fix s + fix_flag fix (LogFile s) = LogFile $ toFilePath $ make_absolute fix s +@@ -265,11 +270,11 @@ + pull_conflict_options, target, cc, apply_conflict_options, reply, xmloutput, + distname_option, patchname_option, edit_description, + output, output_auto_name, unidiff, repo_combinator, +- unified, summary, compress, uncompress, uncompress_nocompress, subject, ++ unified, summary, uncompress_nocompress, subject, + nocompress, match_several_or_range, match_several_or_last, + author, askdeps, lookforadds, ignoretimes, test, notest, help, force_replace, + help_on_match, +- match_one, match_range, match_several, dry_run, fancy_move_add, sendmail_cmd, ++ match_one, match_range, match_several, fancy_move_add, sendmail_cmd, + logfile, rmlogfile, leave_test_dir, from_opt, set_default, pristine_tree + + :: DarcsOption +@@ -373,6 +378,30 @@ + get_repourl (_:fs) = get_repourl fs + \end{code} + ++\begin{options} ++--remote-repo ++\end{options} ++ ++Some commands, such as \verb'pull' require a remote repository to be specified, ++either from the command line or as a default. The \verb!--remote-repo! ++provides an alternative way to supply this remote repository path. This flag ++can be seen as temporarily ``replacing'' the default repository. Setting it ++causes the command to ignore the default repository (it also does not affect, ++i.e. overwrite the default repository). On the other hand, if any other ++repositories are supplied as command line arguments, this flag will be ignored ++(and the default repository may be overwritten). ++ ++\begin{code} ++remote_repo :: DarcsOption ++remote_repo = DarcsArgOption [] ["remote-repo"] RemoteRepo "URL" ++ "specify the remote repository URL to work with" ++ ++get_remote_repo :: [DarcsFlag] -> Maybe String ++get_remote_repo (RemoteRepo r : _) = Just r ++get_remote_repo (_:fs) = get_remote_repo fs ++get_remote_repo [] = Nothing ++\end{code} ++ + \input{Darcs/Match.lhs} + \input{Darcs/Patch/Match.lhs} + +@@ -560,16 +589,16 @@ + case easy_author of + Just a -> return a + Nothing -> do +- aminrepo <- doesDirectoryExist "_darcs/prefs" ++ aminrepo <- doesDirectoryExist (darcsdir++"/prefs") + if aminrepo then do + putStr "Darcs needs to know what name (conventionally an email " + putStr "address) to use as the\npatch author, e.g. 'Fred Bloggs " + putStr "'. If you provide one\nnow " +- putStr "it will be stored in the file '_darcs/prefs/author' and " ++ putStr ("it will be stored in the file '"++darcsdir++"/prefs/author' and ") + putStr "used as a default\nin the future. To change your preferred " + putStr "author address, simply delete or edit\nthis file.\n\n" + add <- askUser "What is your email address? " +- writeFile "_darcs/prefs/author" add ++ writeFile (darcsdir++"/prefs/author") add + return add + else do askUser "What is your email address (e.g. John Doe )? " + +@@ -590,8 +619,6 @@ + + \begin{code} + nocompress = concat_options [__compress, __dont_compress] +-uncompress = concat_options [__compress, __uncompress] +-compress = concat_options [__dont_compress, __compress] + uncompress_nocompress = concat_options [__compress, __dont_compress, __uncompress] + + __compress, __dont_compress, __uncompress :: DarcsOption +@@ -687,10 +714,6 @@ + "Convert darcs-1 format to hashed format", + DarcsNoArgOption [] ["old-fashioned-inventory"] UseOldFashionedInventory + "Convert from hashed to darcs-1 format"] +- +-verify_hash :: DarcsOption +-verify_hash = DarcsNoArgOption [] ["verify-hashes"] VerifyHash +- "verify validity of patch files" + \end{code} + + \begin{code} +@@ -752,18 +775,13 @@ + partial = concat_options [__partial, __lazy, __ephemeral, __complete] + partial_check = concat_options [__complete, __partial] + +-ephemeral :: DarcsOption +-ephemeral = concat_options [__no_ephemeral, __ephemeral] +- +-__no_ephemeral, __partial, __lazy, __ephemeral, __complete :: DarcsOption ++__partial, __lazy, __ephemeral, __complete :: DarcsOption + __partial = DarcsNoArgOption [] ["partial"] Partial + "get partial repository using checkpoint (old-fashioned format only)" + __lazy = DarcsNoArgOption [] ["lazy"] Lazy + "get patch files only as needed" + __ephemeral = DarcsNoArgOption [] ["ephemeral"] Ephemeral + "don't save patch files in the repository" +-__no_ephemeral = DarcsNoArgOption [] ["no-ephemeral"] NoEphemeral +- "save patch files in the repository" + __complete = DarcsNoArgOption [] ["complete"] Complete + "get a complete copy of the repository" + \end{code} +@@ -844,8 +862,15 @@ + An exclamation mark appears next to any option that has a conflict. + + \begin{code} +-dry_run = DarcsNoArgOption [] ["dry-run"] DryRun +- "don't actually take the action" ++-- NOTE: I'd rather work to have no uses of dry_run_noxml, so that any time ++-- --dry-run is a possibility, automated users can examine the results more ++-- easily with --xml. ++dry_run_noxml :: DarcsOption ++dry_run_noxml = DarcsNoArgOption [] ["dry-run"] DryRun ++ "don't actually take the action" ++ ++dry_run :: [DarcsOption] ++dry_run = [dry_run_noxml, xmloutput] + + showFriendly :: Patchy p => [DarcsFlag] -> p C(x y) -> Doc + showFriendly opts p = if Verbose `elem` opts +@@ -857,14 +882,21 @@ + print_dry_run_message_and_exit :: RepoPatch p => String -> [DarcsFlag] -> FL (PatchInfoAnd p) -> IO () + print_dry_run_message_and_exit action opts patches = + do when (DryRun `elem` opts) $ do +- putDocLn $ text ("Would " ++ action ++ " the following changes:") +- $$ (vsep $ mapFL (showFriendly opts) patches) +- putStrLn "" +- putStrLn "Making no changes: this is a dry run." ++ putInfo $ text $ "Would " ++ action ++ " the following changes:" ++ putDocLn $ put_mode ++ putInfo $ text $ "" ++ putInfo $ text $ "Making no changes: this is a dry run." + exitWith ExitSuccess +- when (All `elem` opts && Summary `elem` opts) $ +- putDocLn $ text ("Will " ++ action ++ " the following changes:") +- $$ (vsep $ mapFL (showFriendly opts) patches) ++ when (All `elem` opts && Summary `elem` opts) $ do ++ putInfo $ text $ "Will " ++ action ++ " the following changes:" ++ putDocLn $ put_mode ++ where put_mode = if XMLOutput `elem` opts ++ then (text "" $$ ++ vcat (mapFL (to_xml . info) patches) $$ ++ text "") ++ else (vsep $ mapFL (showFriendly opts) patches) ++ putInfo = if XMLOutput `elem` opts then \_ -> return () else putDocLn ++ + \end{code} + + \input{Darcs/Resolution.lhs} +@@ -883,7 +915,8 @@ + [DarcsNoArgOption [] ["context"] + (Context "") "give output suitable for get --context", + xmloutput, +- human_readable ++ human_readable, ++ DarcsNoArgOption [] ["count"] Count "output count of changes" + ] + changes_reverse = DarcsNoArgOption [] ["reverse"] Reverse + "show changes in reverse order" +diff -ruN darcs-2.0.0/src/Darcs/ColorPrinter.lhs darcs-2.0.2/src/Darcs/ColorPrinter.lhs +--- darcs-2.0.0/src/Darcs/ColorPrinter.lhs 1970-01-01 00:00:00.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/ColorPrinter.lhs 2008-06-24 01:23:12.000000000 +0000 +@@ -0,0 +1,255 @@ ++\begin{code} ++{-# OPTIONS -fno-warn-orphans #-} ++module Darcs.ColorPrinter ( errorDoc, traceDoc, assertDoc, fancyPrinters ) where ++ ++import Debug.Trace ( trace ) ++import System.IO ( stderr ) ++import Darcs.External (getTermNColors) ++import Printer (Printer, Printers, Printers'(..), Printable(..), Color(..), ++ invisiblePrinter, (<>), (), Doc(Doc,unDoc), unsafeBothText, simplePrinter, hcat, ++ unsafeText, unsafeChar, space, unsafePackedString, ++ renderStringWith, prefix ) ++import Data.Char ( isAscii, isPrint, isSpace, isControl, ord, chr, intToDigit ) ++import Data.Bits ( bit, xor ) ++import System.Environment ( getEnv ) ++import FastPackedString ( unpackPS, anyPS, lastPS, initPS, ++ nullPS, spanEndPS ) ++import System.IO.Unsafe ( unsafePerformIO ) ++import System.IO ( hIsTerminalDevice, Handle ) ++ ++dollar, cr :: Doc ++dollar = unsafeBothText "$" ++cr = unsafeBothText "\r" ++ ++errorDoc :: Doc -> a ++errorDoc = error . show ++ ++traceDoc :: Doc -> a -> a ++traceDoc d = trace (show d) ++ ++assertDoc :: Maybe Doc -> a -> a ++assertDoc Nothing x = x ++assertDoc (Just e) _ = errorDoc e ++ ++instance Show Doc where ++ show = renderStringWith (fancyPrinters stderr) ++ ++-- policy ++ ++data Policy = Policy { poColor, -- overall use of color ++ poEscape, -- overall use of escaping ++ poLineColor,-- overall use of colored lines (only hunks for now) ++ poAltColor, -- alternative to color (bold, inverse) ++ poIsprint, -- don't escape isprints ++ po8bit -- don't escape 8-bit chars ++ :: Bool, ++ poNoEscX, -- extra chars to never escape ++ poEscX -- extra chars to always escape ++ :: String, ++ poTrailing, -- escape trailing spaces ++ poCR, -- ignore \r at end of lines ++ ++ poSpace -- escape spaces (used with poTrailing) ++ :: Bool ++ } ++ ++{-# NOINLINE getPolicy #-} ++getPolicy :: Handle -> Policy ++getPolicy handle = unsafePerformIO $ ++ do isTerminal <- hIsTerminalDevice handle ++ nColors <- if isTerminal then getTermNColors else return 0 ++ ++ envDontEscapeAnything <- getEnvBool "DARCS_DONT_ESCAPE_ANYTHING" ++ envDontEscapeIsprint <- getEnvBool "DARCS_DONT_ESCAPE_ISPRINT" ++ envUseIsprint <- getEnvBool "DARCS_USE_ISPRINT" -- for backwards-compatibility ++ envDontEscape8bit <- getEnvBool "DARCS_DONT_ESCAPE_8BIT" ++ ++ envDontEscapeExtra <- getEnvString "DARCS_DONT_ESCAPE_EXTRA" ++ envEscapeExtra <- getEnvString "DARCS_ESCAPE_EXTRA" ++ ++ envDontEscapeTrailingSpace <- getEnvBool "DARCS_DONT_ESCAPE_TRAILING_SPACES" ++ envDontEscapeTrailingCR <- getEnvBool "DARCS_DONT_ESCAPE_TRAILING_CR" ++ ++ envDontColor <- getEnvBool "DARCS_DONT_COLOR" ++ envAlwaysColor <- getEnvBool "DARCS_ALWAYS_COLOR" ++ envAlternativeColor <- getEnvBool "DARCS_ALTERNATIVE_COLOR" ++ envDoColorLines <- getEnvBool "DARCS_DO_COLOR_LINES" ++ ++ let haveColor = envAlwaysColor || (isTerminal && (nColors > 4)) ++ doColor = not envDontColor && haveColor ++ ++ return Policy { poColor = doColor, ++ poEscape = not envDontEscapeAnything, ++ poLineColor= doColor && envDoColorLines, ++ poIsprint = envDontEscapeIsprint || envUseIsprint, ++ po8bit = envDontEscape8bit, ++ poNoEscX = envDontEscapeExtra, ++ poEscX = envEscapeExtra, ++ poTrailing = not envDontEscapeTrailingSpace, ++ poCR = envDontEscapeTrailingCR, ++ poAltColor = haveColor && envAlternativeColor, ++ ++ poSpace = False ++ } ++ where ++ getEnvBool s = safeGetEnv s >>= return.(/= "0") ++ safeGetEnv s = getEnv s `catch` \_ -> return "0" ++ getEnvString s = getEnv s `catch` \_ -> return "" ++ ++ ++-- printers ++ ++fancyPrinters :: Printers ++fancyPrinters h = Printers { colorP = colorPrinter (getPolicy h), ++ invisibleP = invisiblePrinter, ++ hiddenP = colorPrinter (getPolicy h) Green, ++ userchunkP = userchunkPrinter (getPolicy h), ++ defP = escapePrinter (getPolicy h), ++ lineColorT = lineColorTrans (getPolicy h), ++ lineColorS = lineColorSuffix (getPolicy h) ++ } ++ ++lineColorTrans :: Policy -> Color -> Doc -> Doc ++lineColorTrans po | poLineColor po = \c d -> prefix (set_color c) d unsafeBothText reset_color ++ | otherwise = const id ++ ++lineColorSuffix :: Policy -> [Printable] -> [Printable] ++lineColorSuffix po | poLineColor po = \d -> S reset_color : d ++ | otherwise = id ++ ++colorPrinter :: Policy -> Color -> Printer ++colorPrinter po | poColor po = \c -> unDoc . color po c . Doc . escapePrinter po{poColor=False} ++ | otherwise = const $ escapePrinter po ++ ++userchunkPrinter :: Policy -> Printer ++userchunkPrinter po p ++ | not (poEscape po) = simplePrinter p ++ | not (poTrailing po) = escapePrinter po p ++ | otherwise = unDoc $ pr p ++ where ++ pr (S s) = prString s ++ pr (Both _ ps) = prPS ps ++ pr (PS ps) = prPS ps ++ ++ prPS ps = let (leadPS, trailPS) = spanEndPS isSpace ps ++ in if nullPS trailPS ++ then Doc $ escapePrinter po p ++ else Doc (escapePrinter po (PS leadPS)) ++ <> Doc (escapePrinter po{poSpace=True} (PS trailPS)) ++ <> mark_escape po dollar ++ ++ prString s = let (trail',lead') = span isSpace (reverse s) ++ lead = reverse lead' ++ trail = reverse trail' ++ in if (not.null) trail ++ then Doc (escapePrinter po (S lead)) ++ <> Doc (escapePrinter po{poSpace=True} (S trail)) ++ <> mark_escape po dollar ++ else Doc (escapePrinter po p) ++ ++escapePrinter :: Policy -> Printer ++escapePrinter po ++ | (not.poEscape) po = simplePrinter ++ | otherwise = unDoc . crepr ++ where ++ crepr p | poCR po && isEndCR p = epr (initPR p) <> cr ++ | otherwise = epr p ++ ++ epr (S s) = escape po s ++ epr (PS ps) = if anyPS (not.no_escape po) ps ++ then escape po (unpackPS ps) ++ else unsafePackedString ps ++ epr (Both s _) = escape po s ++ ++ isEndCR (S s) = not (null s) && last s == '\r' ++ isEndCR (PS ps) = not (nullPS ps) && lastPS ps == '\r' ++ isEndCR (Both _ ps) = not (nullPS ps) && lastPS ps == '\r' ++ ++ initPR (S s) = S $ init s ++ initPR (PS ps) = PS $ initPS ps ++ initPR (Both s ps) = Both (init s) (initPS ps) ++ ++ ++-- escape assumes the input is in ['\0'..'\255'] ++ ++escape :: Policy -> String -> Doc ++escape _ "" = unsafeText "" ++escape po s = hcat (map escapeChar s) ++ where ++ escapeChar c | no_escape po c = unsafeChar c ++ escapeChar ' ' = space ++ escapeChar c = (emph.unsafeText.quoteChar) c ++ emph = mark_escape po ++ ++no_escape :: Policy -> Char -> Bool ++no_escape po c | poSpace po && isSpace c = False ++no_escape po c | c `elem` poEscX po = False ++no_escape po c | c `elem` poNoEscX po = True ++no_escape _ '\t' = True -- tabs will likely be converted to spaces ++no_escape _ '\n' = True ++no_escape po c = if (poIsprint po) then isPrint c ++ else isPrintableAscii c ++ || c >= '\x80' && po8bit po ++ ++isPrintableAscii :: Char -> Bool ++isPrintableAscii c = isAscii c && isPrint c ++ ++ ++-- quote ++ ++quoteChar :: Char -> String ++quoteChar c ++ | isControl c && isPrintableAscii cHat = ['^', cHat] ++ | otherwise = sHex ++ where ++ cHat = chr $ (bit 6 `xor`) $ ord c ++ sHex = let (q, r) = quotRem (ord c) 16 ++ in ['\\', intToDigit q, intToDigit r] ++ ++ ++-- make colors and highlightings ++ ++mark_escape :: Policy -> Doc -> Doc ++mark_escape po | poAltColor po = make_invert ++ | poColor po = make_color Red ++ | otherwise = make_asciiart ++ ++color :: Policy -> Color -> Doc -> Doc ++color po | poAltColor po = \_ -> make_bold ++ | otherwise = make_color ++ ++make_color, make_color' :: Color -> Doc -> Doc ++ ++make_color' = with_color . set_color ++ ++-- memoized version of make_color' ++make_color Blue = make_color' Blue ++make_color Red = make_color' Red ++make_color Green = make_color' Green ++make_color Cyan = make_color' Cyan ++make_color Magenta = make_color' Magenta ++ ++set_color :: Color -> String ++set_color Blue = "\x1B[01;34m" -- bold blue ++set_color Red = "\x1B[01;31m" -- bold red ++set_color Green = "\x1B[01;32m" -- bold green ++set_color Cyan = "\x1B[36m" -- light cyan ++set_color Magenta = "\x1B[35m" -- light magenta ++ ++make_asciiart :: Doc -> Doc ++make_asciiart x = unsafeBothText "[_" <> x <> unsafeBothText "_]" ++ ++reset_color :: String ++reset_color = "\x1B[00m" ++ ++with_color :: String -> Doc -> Doc ++with_color c = ++ let c' = unsafeBothText c ++ r' = unsafeBothText reset_color ++ in \x -> c' <> x <> r' ++ ++make_bold, make_invert :: Doc -> Doc ++make_bold = with_color "\x1B[01m" ++make_invert = with_color "\x1B[07m" ++ ++\end{code} +diff -ruN darcs-2.0.0/src/Darcs/ColourPrinter.lhs darcs-2.0.2/src/Darcs/ColourPrinter.lhs +--- darcs-2.0.0/src/Darcs/ColourPrinter.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/ColourPrinter.lhs 1970-01-01 00:00:00.000000000 +0000 +@@ -1,246 +0,0 @@ +-\begin{code} +-{-# OPTIONS -fno-warn-orphans #-} +-module Darcs.ColourPrinter ( errorDoc, traceDoc, assertDoc, fancyPrinters ) where +- +-import Debug.Trace ( trace ) +-import System.IO ( stderr ) +-import Darcs.External (getTermNColors) +-import Printer (Printer, Printers, Printers'(..), Printable(..), Color(..), +- invisiblePrinter, (<>), Doc(..), unDoc, unsafeBoth, simplePrinter, hcat, +- unsafeText, unsafeChar, space, unsafePackedString, +- renderStringWith ) +-import Data.Char ( isAscii, isPrint, isSpace, isControl, ord, chr, intToDigit ) +-import Data.Bits ( bit, xor ) +-import System ( getEnv ) +-import FastPackedString ( packString, unpackPS, anyPS, lastPS, initPS, +- nullPS, spanEndPS ) +-import System.IO.Unsafe ( unsafePerformIO ) +-import System.IO ( hIsTerminalDevice, Handle ) +- +-dollar, cr :: Doc +-dollar = unsafeBoth "$" (packString "$") +-cr = unsafeBoth "\r" (packString "\r") +- +-errorDoc :: Doc -> a +-errorDoc = error . show +- +-traceDoc :: Doc -> a -> a +-traceDoc d = trace (show d) +- +-assertDoc :: Maybe Doc -> a -> a +-assertDoc Nothing x = x +-assertDoc (Just e) _ = errorDoc e +- +-instance Show Doc where +- show = renderStringWith (fancyPrinters stderr) +- +--- policy +- +-data Policy = Policy { poColor, -- overall use of color +- poEscape, -- overall use of escaping +- poAltColor, -- alternative to color (bold, inverse) +- poIsprint, -- don't escape isprints +- po8bit -- don't escape 8-bit chars +- :: Bool, +- poNoEscX, -- extra chars to never escape +- poEscX -- extra chars to always escape +- :: String, +- poTrailing, -- escape trailing spaces +- poCR, -- ignore \r at end of lines +- +- poSpace -- escape spaces (used with poTrailing) +- :: Bool +- } +- +-{-# NOINLINE getPolicy #-} +-getPolicy :: Handle -> Policy +-getPolicy handle = unsafePerformIO $ +- do isTerminal <- hIsTerminalDevice handle +- nColors <- if isTerminal then getTermNColors else return 0 +- +- envDontEscapeAnything <- getEnvBool "DARCS_DONT_ESCAPE_ANYTHING" +- envDontEscapeIsprint <- getEnvBool "DARCS_DONT_ESCAPE_ISPRINT" +- envUseIsprint <- getEnvBool "DARCS_USE_ISPRINT" -- for backwards-compatibility +- envDontEscape8bit <- getEnvBool "DARCS_DONT_ESCAPE_8BIT" +- +- envDontEscapeExtra <- getEnvString "DARCS_DONT_ESCAPE_EXTRA" +- envEscapeExtra <- getEnvString "DARCS_ESCAPE_EXTRA" +- +- envDontEscapeTrailingSpace <- getEnvBool "DARCS_DONT_ESCAPE_TRAILING_SPACES" +- envDontEscapeTrailingCR <- getEnvBool "DARCS_DONT_ESCAPE_TRAILING_CR" +- +- envDontColor <- getEnvBool "DARCS_DONT_COLOR" +- envAlwaysColor <- getEnvBool "DARCS_ALWAYS_COLOR" +- envAlternativeColor <- getEnvBool "DARCS_ALTERNATIVE_COLOR" +- +- let haveColor = envAlwaysColor || (isTerminal && (nColors > 4)) +- +- return Policy { poColor = not envDontColor && haveColor, +- poEscape = not envDontEscapeAnything, +- poIsprint = envDontEscapeIsprint || envUseIsprint, +- po8bit = envDontEscape8bit, +- poNoEscX = envDontEscapeExtra, +- poEscX = envEscapeExtra, +- poTrailing = not envDontEscapeTrailingSpace, +- poCR = envDontEscapeTrailingCR, +- poAltColor = haveColor && envAlternativeColor, +- +- poSpace = False +- } +- where +- getEnvBool s = safeGetEnv s >>= return.(/= "0") +- safeGetEnv s = getEnv s `catch` \_ -> return "0" +- getEnvString s = getEnv s `catch` \_ -> return "" +- +- +--- printers +- +-fancyPrinters :: Printers +-fancyPrinters h = Printers { colorP = colorPrinter (getPolicy h), +- invisibleP = invisiblePrinter, +- hiddenP = colorPrinter (getPolicy h) Green, +- userchunkP = userchunkPrinter (getPolicy h), +- defP = escapePrinter (getPolicy h) +- } +- +-colorPrinter :: Policy -> Color -> Printer +-colorPrinter po = if poColor po +- then \c -> unDoc . color po c . Doc . escapePrinter po{poColor=False} +- else \_ -> escapePrinter po +- +-userchunkPrinter :: Policy -> Printer +-userchunkPrinter po p +- | not (poEscape po) = simplePrinter p +- | not (poTrailing po) = escapePrinter po p +- | otherwise = unDoc $ pr p +- where +- pr (S s) = prString s +- pr (Both _ ps) = prPS ps +- pr (PS ps) = prPS ps +- +- prPS ps = let (leadPS, trailPS) = spanEndPS isSpace ps +- in if nullPS trailPS +- then Doc $ escapePrinter po p +- else Doc (escapePrinter po (PS leadPS)) +- <> Doc (escapePrinter po{poSpace=True} (PS trailPS)) +- <> mark_escape po dollar +- +- prString s = let (trail',lead') = span isSpace (reverse s) +- lead = reverse lead' +- trail = reverse trail' +- in if (not.null) trail +- then Doc (escapePrinter po (S lead)) +- <> Doc (escapePrinter po{poSpace=True} (S trail)) +- <> mark_escape po dollar +- else Doc (escapePrinter po p) +- +-escapePrinter :: Policy -> Printer +-escapePrinter po +- | (not.poEscape) po = simplePrinter +- | otherwise = unDoc . crepr +- where +- crepr p | poCR po && isEndCR p = epr (initPR p) <> cr +- | otherwise = epr p +- +- epr (S s) = escape po s +- epr (PS ps) = if anyPS (not.no_escape po) ps +- then escape po (unpackPS ps) +- else unsafePackedString ps +- epr (Both s _) = escape po s +- +- isEndCR (S s) = not (null s) && last s == '\r' +- isEndCR (PS ps) = not (nullPS ps) && lastPS ps == '\r' +- isEndCR (Both _ ps) = not (nullPS ps) && lastPS ps == '\r' +- +- initPR (S s) = S $ init s +- initPR (PS ps) = PS $ initPS ps +- initPR (Both s ps) = Both (init s) (initPS ps) +- +- +--- escape assumes the input is in ['\0'..'\255'] +- +-escape :: Policy -> String -> Doc +-escape _ "" = unsafeText "" +-escape po s = hcat (map escapeChar s) +- where +- escapeChar c | no_escape po c = unsafeChar c +- escapeChar ' ' = space +- escapeChar c = (emph.unsafeText.quoteChar) c +- emph = mark_escape po +- +-no_escape :: Policy -> Char -> Bool +-no_escape po c | poSpace po && isSpace c = False +-no_escape po c | c `elem` poEscX po = False +-no_escape po c | c `elem` poNoEscX po = True +-no_escape _ '\t' = True -- tabs will likely be converted to spaces +-no_escape _ '\n' = True +-no_escape po c = if (poIsprint po) then isPrint c +- else isPrintableAscii c +- || c >= '\x80' && po8bit po +- +-isPrintableAscii :: Char -> Bool +-isPrintableAscii c = isAscii c && isPrint c +- +- +--- quote +- +-quoteChar :: Char -> String +-quoteChar c +- | isControl c && isPrintableAscii cHat = ['^', cHat] +- | otherwise = sHex +- where +- cHat = chr $ (bit 6 `xor`) $ ord c +- sHex = let (q, r) = quotRem (ord c) 16 +- in ['\\', intToDigit q, intToDigit r] +- +- +--- make colours and highlightings +- +-mark_escape :: Policy -> Doc -> Doc +-mark_escape po | poAltColor po = make_invert +- | poColor po = make_red +- | otherwise = make_asciiart +- +-color :: Policy -> Color -> Doc -> Doc +-color po | poAltColor po = \_ -> make_bold +- | otherwise = make_color +- +-make_color :: Color -> Doc -> Doc +-make_color Blue = make_blue +-make_color Red = make_red +-make_color Green = make_green +- +-make_asciiart :: Doc -> Doc +-make_asciiart x = unsafeBoth "[_" (packString "[_") +- <> x +- <> unsafeBoth "_]" (packString "_]") +- +-make_bold :: Doc -> Doc +-make_bold x = unsafeBoth "\x1B[01m" (packString "\x1B[01m") +- <> x +- <> reset_colour +- +-make_invert :: Doc -> Doc +-make_invert x = unsafeBoth "\x1B[07m" (packString "\x1B[07m") +- <> x +- <> reset_colour +- +-make_blue :: Doc -> Doc +-make_blue x = unsafeBoth "\x1B[01;34m" (packString "\x1B[01;34m") +- <> x +- <> reset_colour +- +-make_red :: Doc -> Doc +-make_red x = unsafeBoth "\x1B[01;31m" (packString "\x1B[01;31m") +- <> x +- <> reset_colour +- +-make_green :: Doc -> Doc +-make_green x = unsafeBoth "\x1B[01;32m" (packString "\x1B[01;32m") +- <> x +- <> reset_colour +- +-reset_colour :: Doc +-reset_colour = unsafeBoth "\x1B[00m" (packString "\x1B[00m") +- +-\end{code} +diff -ruN darcs-2.0.0/src/Darcs/Commands/Add.lhs darcs-2.0.2/src/Darcs/Commands/Add.lhs +--- darcs-2.0.0/src/Darcs/Commands/Add.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Commands/Add.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -24,7 +24,7 @@ + import Darcs.Commands + import Darcs.Arguments (noskip_boring, allow_caseonly, + fancy_move_add, +- recursive, working_repo_dir, dry_run, umask_option, ++ recursive, working_repo_dir, dry_run_noxml, umask_option, + list_files, list_unregistered_files, + DarcsFlag (AllowCaseOnly, Boring, Recursive, + Verbose, Quiet, FancyMoveAdd, DryRun), +@@ -83,7 +83,7 @@ + [noskip_boring, allow_caseonly, + recursive "add contents of subdirectories", + fancy_move_add, +- working_repo_dir, dry_run]} ++ working_repo_dir, dry_run_noxml]} + \end{code} + + Darcs will refuse to add a file or directory that differs from an existing +diff -ruN darcs-2.0.0/src/Darcs/Commands/AmendRecord.lhs darcs-2.0.2/src/Darcs/Commands/AmendRecord.lhs +--- darcs-2.0.0/src/Darcs/Commands/AmendRecord.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Commands/AmendRecord.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -54,7 +54,7 @@ + working_repo_dir, + match_one_nontag, umask_option, + notest, list_registered_files, +- get_easy_author, ++ get_easy_author, set_scripts_executable + ) + import Darcs.Utils ( askUser ) + import Printer ( putDocLn ) +@@ -98,7 +98,8 @@ + command_prereq = amInRepository, + command_get_arg_possibilities = list_registered_files, + command_argdefaults = nodefaults, +- command_advanced_options = [nocompress, ignoretimes, umask_option], ++ command_advanced_options = [nocompress, ignoretimes, umask_option, ++ set_scripts_executable], + command_basic_options = [match_one_nontag, + notest, + leave_test_dir, +@@ -178,7 +179,9 @@ + If you configure darcs to run a test suite, darcs will run this test on the + amended repository to make sure it is valid. Darcs first creates a pristine + copy of the source tree (in a temporary directory), then it runs the test, +-using its return value to decide if the amended change is valid. ++using its return value to decide if the amended change is valid. If the ++\verb!--set-scripts-executable! flag is passed to amend-record, darcs will set ++scripts executable in the temporary test directory before running the test. + + \begin{code} + fixp :: RepoPatch p => PatchInfoAnd p -> FL Prim -> PatchInfo -> PatchInfoAnd p +diff -ruN darcs-2.0.0/src/Darcs/Commands/Annotate.lhs darcs-2.0.2/src/Darcs/Commands/Annotate.lhs +--- darcs-2.0.0/src/Darcs/Commands/Annotate.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Commands/Annotate.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -18,6 +18,7 @@ + \subsection{darcs annotate} + \label{annotate} + \begin{code} ++{-# OPTIONS_GHC -cpp #-} + module Darcs.Commands.Annotate ( annotate, created_as_xml ) where + + import Control.Monad ( when ) +diff -ruN darcs-2.0.0/src/Darcs/Commands/Apply.lhs darcs-2.0.2/src/Darcs/Commands/Apply.lhs +--- darcs-2.0.0/src/Darcs/Commands/Apply.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Commands/Apply.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -17,8 +17,9 @@ + + \subsection{darcs apply} + \begin{code} ++{-# OPTIONS_GHC -cpp #-} + module Darcs.Commands.Apply ( apply ) where +-import System ( ExitCode(..), exitWith ) ++import System.Exit ( ExitCode(..), exitWith ) + import Prelude hiding ( catch ) + import System.IO ( hClose, stdin, stdout, stderr ) + import Control.Exception ( catch, throw, Exception( ExitException ) ) +@@ -100,15 +101,15 @@ + command_command = apply_cmd, + command_prereq = amInRepository, + command_get_arg_possibilities = list_files, +- command_argdefaults = stdindefault, ++ command_argdefaults = const stdindefault, + command_advanced_options = [reply, DarcsArguments.cc, + happy_forwarding, + sendmail_cmd, + ignoretimes, nocompress, + set_scripts_executable, umask_option], + command_basic_options = [verify, +- all_interactive, dry_run, +- apply_conflict_options, ++ all_interactive]++dry_run++ ++ [apply_conflict_options, + use_external_merge, + notest, + leave_test_dir, +@@ -336,7 +337,7 @@ + msmtp looks like this: + + \begin{verbatim} +-msmtp %t %< ++msmtp -t %< + \end{verbatim} + + +diff -ruN darcs-2.0.0/src/Darcs/Commands/Changes.lhs darcs-2.0.2/src/Darcs/Commands/Changes.lhs +--- darcs-2.0.0/src/Darcs/Commands/Changes.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Commands/Changes.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -17,7 +17,7 @@ + + \subsection{darcs changes} + \begin{code} +-{-# OPTIONS -fglasgow-exts #-} ++{-# OPTIONS_GHC -cpp -fglasgow-exts #-} + -- The pragma above is only for pattern guards. + module Darcs.Commands.Changes ( changes ) where + +@@ -29,7 +29,7 @@ + import Darcs.Patch.Depends ( slightly_optimize_patchset ) + import Darcs.Commands ( DarcsCommand(..), nodefaults ) + import Darcs.Arguments ( DarcsFlag(Context, MachineReadable, Interactive, +- OnlyChangesToFiles, ++ OnlyChangesToFiles, Count, + XMLOutput, Summary, Reverse, Verbose, Debug), + getRepoPaths, changes_format, + possibly_remote_repo_dir, get_repourl, +@@ -48,7 +48,7 @@ + import Darcs.Patch.Depends ( get_common_and_uncommon ) + import Darcs.Patch.TouchesFiles ( look_touch ) + import Darcs.Patch ( RepoPatch, invert, xml_summary, description, apply_to_filepaths, +- list_touched_files, effect ) ++ list_touched_files, effect, identity ) + import Darcs.Patch.Ordered ( (:\/:)(..), RL(..), unsafeFL, unsafeUnRL, concatRL, + EqCheck(..), filterFL ) + import Darcs.Match ( first_match, second_match, +@@ -60,7 +60,7 @@ + import Printer ( Doc, putDocLnWith, simplePrinters, renderPS, + renderString, prefix, + packedString, text, vcat, vsep, ($$), empty, errorDoc ) +-import Darcs.ColourPrinter ( fancyPrinters ) ++import Darcs.ColorPrinter ( fancyPrinters ) + import Darcs.Progress ( setProgressMode, debugMessage ) + import Darcs.SelectChanges ( view_changes ) + import Darcs.Sealed ( Sealed(..) ) +@@ -115,6 +115,7 @@ + unless (Debug `elem` opts) $ setProgressMode False + files <- sort `fmap` getRepoPaths opts args + unrec <- get_unrecorded_unsorted repository ++ `catch` \_ -> return identity -- this is triggered when repository is remote + let filez = map (fn2fp . norm_path . fp2fn) $ apply_to_filepaths (invert unrec) $ map toFilePath files + filtered_changes p = maybe_reverse $ get_changes_info opts filez p + debugMessage "About to read the repository..." +@@ -127,8 +128,8 @@ + else do when (not (null files) && not (XMLOutput `elem` opts)) $ + putStrLn $ "Changes to "++unwords filez++":\n" + debugMessage "About to print the changes..." +- putDocLnWith fancyPrinters $ changelog opts $ +- filtered_changes patches ++ let printers = if XMLOutput `elem` opts then simplePrinters else fancyPrinters ++ putDocLnWith printers $ changelog opts $ filtered_changes patches + where maybe_reverse (xs,b,c) = if Reverse `elem` opts + then (reverse xs, b, c) + else (xs, b, c) +@@ -186,6 +187,7 @@ + changelog :: RepoPatch p => [DarcsFlag] -> ([PatchInfoAnd p], [FilePath], Doc) + -> Doc + changelog opts (pis, fs, errstring) ++ | Count `elem` opts = text $ show $ length pis + | MachineReadable `elem` opts = + if renderString errstring == "" + then vsep $ map (showPatchInfo.info) pis +diff -ruN darcs-2.0.0/src/Darcs/Commands/Check.lhs darcs-2.0.2/src/Darcs/Commands/Check.lhs +--- darcs-2.0.0/src/Darcs/Commands/Check.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Commands/Check.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -21,13 +21,12 @@ + import Control.Monad ( when ) + import System.Directory ( setCurrentDirectory ) + import Workaround ( getCurrentDirectory ) +-import System ( ExitCode(..), exitWith ) ++import System.Exit ( ExitCode(..), exitWith ) + import Data.List ( sort ) + + import Darcs.Commands ( DarcsCommand(..), nodefaults ) + import Darcs.Arguments ( DarcsFlag( Quiet, Verbose, NoTest, LeaveTestDir ), + partial_check, notest, +- verify_hash, + leave_test_dir, working_repo_dir, + ) + import Darcs.Hopefully ( info, piap ) +@@ -89,7 +88,6 @@ + command_argdefaults = nodefaults, + command_advanced_options = [], + command_basic_options = [partial_check, +- verify_hash, + notest, + leave_test_dir, + working_repo_dir +diff -ruN darcs-2.0.0/src/Darcs/Commands/Convert.lhs darcs-2.0.2/src/Darcs/Commands/Convert.lhs +--- darcs-2.0.0/src/Darcs/Commands/Convert.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Commands/Convert.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -17,7 +17,7 @@ + + \subsection{darcs convert} + \begin{code} +-{-# OPTIONS -fglasgow-exts #-} ++{-# OPTIONS_GHC -cpp -fglasgow-exts #-} + #include "gadts.h" + module Darcs.Commands.Convert ( convert ) where + +@@ -42,6 +42,7 @@ + tentativelyMergePatches, patchSetToPatches, + createPristineDirectoryTree, + revertRepositoryChanges, finalizeRepositoryChanges, sync_repo ) ++import Darcs.Global ( darcsdir ) + import Darcs.FilePathUtils ( absolute_dir ) + import Darcs.Patch ( RealPatch, Patch, Named, showPatch, patch2patchinfo, fromPrims, infopatch, + modernize_patch, +@@ -57,7 +58,7 @@ + import Darcs.Progress ( progressFL ) + import Darcs.Sealed ( Sealed(..), FlippedSeal(..) ) + import Printer ( text, putDocLn, ($$), redText, (<+>) ) +-import Darcs.ColourPrinter ( traceDoc ) ++import Darcs.ColorPrinter ( traceDoc ) + import Darcs.SlurpDirectory ( list_slurpy_files ) + import Darcs.Lock ( writeBinFile ) + import Workaround ( setExecutable ) +@@ -115,7 +116,7 @@ + createDirectory mysimplename + setCurrentDirectory mysimplename + (command_command initialize) opts [] +- writeBinFile "_darcs/hashed_inventory" "" ++ writeBinFile (darcsdir++"/hashed_inventory") "" + withRepoLock (NoUpdateWorking:opts) $- \repositoryfoo -> + withRepositoryDirectory opts repodir $- \themrepobar -> do + -- We really ought to have special versions of withRepoLock and +diff -ruN darcs-2.0.0/src/Darcs/Commands/Diff.lhs darcs-2.0.2/src/Darcs/Commands/Diff.lhs +--- darcs-2.0.0/src/Darcs/Commands/Diff.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Commands/Diff.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -17,6 +17,7 @@ + + \subsection{darcs diff} + \begin{code} ++{-# OPTIONS_GHC -cpp #-} + module Darcs.Commands.Diff ( diff_command ) where + + import System.Directory ( setCurrentDirectory ) +diff -ruN darcs-2.0.0/src/Darcs/Commands/Dist.lhs darcs-2.0.2/src/Darcs/Commands/Dist.lhs +--- darcs-2.0.0/src/Darcs/Commands/Dist.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Commands/Dist.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -20,7 +20,8 @@ + module Darcs.Commands.Dist ( dist ) where + import System.Directory ( setCurrentDirectory ) + import Workaround ( getCurrentDirectory ) +-import System ( ExitCode(..), system ) ++import System.Exit ( ExitCode(..) ) ++import System.Cmd ( system ) + import Data.Char ( isAlphaNum ) + import Control.Monad ( when ) + +diff -ruN darcs-2.0.0/src/Darcs/Commands/Get.lhs darcs-2.0.2/src/Darcs/Commands/Get.lhs +--- darcs-2.0.0/src/Darcs/Commands/Get.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Commands/Get.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -17,32 +17,32 @@ + + \subsection{darcs get} + \begin{code} ++{-# OPTIONS_GHC -cpp #-} + module Darcs.Commands.Get ( get ) where + + import System.Directory ( setCurrentDirectory, doesDirectoryExist, doesFileExist, + createDirectory ) + import Workaround ( getCurrentDirectory ) + import Data.Maybe ( isJust ) +-import Control.Monad ( liftM, when ) ++import Control.Monad ( when ) + + import Darcs.Commands ( DarcsCommand(..), nodefaults ) +-import Darcs.Arguments ( DarcsFlag( WorkDir, Partial, ++import Darcs.Arguments ( DarcsFlag( WorkDir, Partial, Lazy, + UseFormat2, UseOldFashionedInventory, UseHashedInventory, +- SetScriptsExecutable, Quiet, Context ), ++ SetScriptsExecutable, Quiet, Context, OnePattern ), + get_context, pristine_tree, get_inventory_choices, working_repo_dir, + partial, reponame, + match_one_context, set_default, set_scripts_executable, nolinks, + ssh_cm ) + import Darcs.Repository ( Repository, withRepository, ($-), withRepoLock, identifyRepositoryFor, read_repo, + createPristineDirectoryTree, +- tentativelyRemovePatches, patchSetToPatches, +- copyRepository, tentativelyAddToPending, +- finalizeRepositoryChanges, sync_repo ) +-import Darcs.Repository.Format ( identifyRepoFormat, ++ tentativelyRemovePatches, patchSetToPatches, patchSetToRepository, ++ copyRepository, tentativelyAddToPending, ++ finalizeRepositoryChanges, sync_repo, setScriptsExecutable ) ++import Darcs.Repository.Format ( identifyRepoFormat, RepoFormat, + RepoProperty ( Darcs2, HashedInventory ), format_has ) + import Darcs.Repository.DarcsRepo ( write_inventory ) + import qualified Darcs.Repository.DarcsRepo as DR ( read_repo ) +-import Darcs.Repository.HashedRepo ( slurp_all_but_darcs ) + import Darcs.Repository ( PatchSet, SealedPatchSet, copy_oldrepo_patches ) + import Darcs.Repository.ApplyPatches ( apply_patches ) + import Darcs.Repository.Checkpoint ( write_checkpoint_patch, get_checkpoint ) +@@ -60,12 +60,10 @@ + import Darcs.Progress ( debugMessage ) + import Darcs.FilePathUtils ( absolute_dir ) + import Printer ( text, vcat, errorDoc, ($$), Doc, putDocLn, ) +-import Darcs.SlurpDirectory ( list_slurpy_files ) + import Darcs.Lock ( writeBinFile ) + import Darcs.Sealed ( Sealed(..), unsafeUnflippedseal ) + import Darcs.URL ( is_absolute ) +-import Workaround ( setExecutable ) +-import FastPackedString ( packString, readFilePS, takePS ) ++import Darcs.Global ( darcsdir ) + #include "impossible.h" + \end{code} + \begin{code} +@@ -133,6 +131,8 @@ + rfsource <- case rfsource_or_e of Left e -> fail e + Right x -> return x + debugMessage $ "Found the format of "++repodir++"..." ++ when (format_has Darcs2 rfsource && UseOldFashionedInventory `elem` opts) $ ++ putInfo $ text "Warning: 'old-fashioned-inventory' is ignored with a darcs-2 repository\n" + let opts' = if format_has Darcs2 rfsource + then UseFormat2:filter (/= UseOldFashionedInventory) opts + else if format_has HashedInventory rfsource && +@@ -147,30 +147,37 @@ + rf <- case rf_or_e of Left e -> fail e + Right x -> return x + if format_has HashedInventory rf -- refactor this into repository +- then writeBinFile "_darcs/hashed_inventory" "" ++ then writeBinFile (darcsdir++"/hashed_inventory") "" + else write_inventory "." (NilRL:<:NilRL :: PatchSet Patch) + ++ if not (null [p | OnePattern p <- opts]) -- --to-match given ++ && not (Partial `elem` opts) && not (Lazy `elem` opts) ++ then withRepository opts $- \repository -> do ++ debugMessage "Using economical get --to-match handling" ++ fromrepo <- identifyRepositoryFor repository repodir ++ patches_to_get <- get_one_patchset fromrepo opts ++ patchSetToRepository patches_to_get opts ++ debugMessage "Finished converting selected patch set to new repository" ++ else copy_repo_and_go_to_chosen_version opts repodir rfsource rf putInfo ++ where am_informative = not $ Quiet `elem` orig_opts ++ putInfo s = when am_informative $ putDocLn s ++ ++get_cmd _ _ = fail "You must provide 'get' with either one or two arguments." ++ ++-- called by get_cmd ++-- assumes that the target repo of the get is the current directory, and that an inventory in the ++-- right format has already been created. ++copy_repo_and_go_to_chosen_version :: [DarcsFlag] -> String -> RepoFormat -> RepoFormat -> (Doc -> IO ()) -> IO () ++copy_repo_and_go_to_chosen_version opts repodir rfsource rf putInfo = do + withRepository opts $- \repository -> do + if format_has HashedInventory rf || format_has HashedInventory rfsource + then do debugMessage "Identifying and copying repository..." + identifyRepositoryFor repository repodir >>= copyRepository +- when (SetScriptsExecutable `elem` opts) $ +- do debugMessage "Making scripts executable" +- myname <- getCurrentDirectory +- c <- list_slurpy_files `fmap` (slurp_all_but_darcs myname) +- let setExecutableIfScript f = +- do contents <- readFilePS f +- when (takePS 2 contents == packString "#!") $ do +- debugMessage ("Making executable: " ++ f) +- setExecutable f True +- mapM_ setExecutableIfScript c ++ when (SetScriptsExecutable `elem` opts) setScriptsExecutable + else copy_repo_old_fashioned repository opts repodir + withRepository opts $- \repository -> go_to_chosen_version repository putInfo opts + putInfo $ text "Finished getting." +- where am_informative = not $ Quiet `elem` orig_opts +- putInfo s = when am_informative $ putDocLn s + +-get_cmd _ _ = fail "You must provide 'get' with either one or two arguments." + \end{code} + + \begin{code} +@@ -305,7 +312,7 @@ + then do + debugMessage "Copying prefs" + copyFileOrUrl opts +- (repodir++"/_darcs/prefs/prefs") "_darcs/prefs/prefs" (MaxAge 600) ++ (repodir++"/"++darcsdir++"/prefs/prefs") (darcsdir++"/prefs/prefs") (MaxAge 600) + `catchall` return () + debugMessage "Writing working directory" + createPristineDirectoryTree fromrepo myname +@@ -313,15 +320,7 @@ + -- note: SetScriptsExecutable is normally checked in PatchApply + -- but darcs get on local repositories does not apply patches + if SetScriptsExecutable `elem` opts +- then do debugMessage "Making scripts executable" +- c <- (liftM list_slurpy_files) (slurp_all_but_darcs myname) +- let setExecutableIfScript f = +- do contents <- readFilePS f +- when (takePS 2 contents == packString "#!") $ do +- debugMessage ("Making executable: " ++ f) +- setExecutable f True +- mapM setExecutableIfScript c +- return () ++ then setScriptsExecutable + else return () + else do + setCurrentDirectory myname +diff -ruN darcs-2.0.0/src/Darcs/Commands/Help.lhs darcs-2.0.2/src/Darcs/Commands/Help.lhs +--- darcs-2.0.0/src/Darcs/Commands/Help.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Commands/Help.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -20,20 +20,17 @@ + + You could also call \verb|help| as a command. This is equivalent to calling + darcs --help. +-The \verb|--verbose| argument is equivalent to the darcs option +-\verb|--extended-help|. +-If you pass it another command as an argument, it will be equivalent to passing + the \verb|--help| to that command. For example, \verb|darcs help query manifest| + is equivalent to \verb|darcs query manifest --help|. + + \begin{code} + module Darcs.Commands.Help ( help, command_control_list, print_version ) where +-import System ( ExitCode(..), exitWith ) ++import System.Exit ( ExitCode(..), exitWith ) + + import Autoconf( darcs_version ) + import Darcs.Commands ( CommandControl(Command_data), DarcsCommand(..), + disambiguate_commands, CommandArgs(..), +- extended_usage, get_command_help, ++ get_command_help, + nodefaults, + usage ) + import Darcs.Arguments ( DarcsFlag(..), help_on_match ) +@@ -56,9 +53,7 @@ + help_help :: String + help_help = + "help displays usage information for darcs in general or for a single\n" ++ +- "command (for example, darcs help query manifest).\n\n" ++ +- "Note that --verbose prints extra help for darcs as a whole,\n" ++ +- "but it makes no difference when getting help for a single command.\n" ++ "command (for example, darcs help query manifest).\n\n" + \end{code} + + \begin{code} +@@ -79,16 +74,13 @@ + \begin{code} + help_cmd :: [DarcsFlag] -> [String] -> IO () + help_cmd opts [] = +- do print_version +- viewDoc $ text $ +- case () of _ | Verbose `elem` opts -> extended_usage +- | HelpOnMatch `elem` opts -> helpOnMatchers ++ do viewDoc $ text $ ++ case () of _ | HelpOnMatch `elem` opts -> helpOnMatchers + | otherwise -> usage command_control_list + exitWith $ ExitSuccess + + help_cmd _ (cmd:args) = +- do print_version +- let disambiguated = disambiguate_commands command_control_list cmd args ++ do let disambiguated = disambiguate_commands command_control_list cmd args + case disambiguated of + Left err -> fail err + Right (cmds,_) -> +diff -ruN darcs-2.0.0/src/Darcs/Commands/Init.lhs darcs-2.0.2/src/Darcs/Commands/Init.lhs +--- darcs-2.0.0/src/Darcs/Commands/Init.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Commands/Init.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -15,7 +15,7 @@ + % the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + % Boston, MA 02110-1301, USA. + +-\subsection{darcs initialize} ++\subsection{darcs initialize}\label{initialize} + \begin{code} + module Darcs.Commands.Init ( initialize, initialize_cmd ) where + import System.Directory ( createDirectory ) +@@ -36,6 +36,7 @@ + import Darcs.Lock ( writeBinFile ) + import Darcs.Repository.DarcsRepo ( write_inventory ) + import Darcs.Repository ( amNotInRepository ) ++import Darcs.Global ( darcsdir ) + \end{code} + + \options{initialize} +@@ -94,7 +95,7 @@ + \verb'old-fashioned-inventory' is the default. While it has minimal features, it is the best tested and the limitations + it does have are well known. + +-\verb'hashed' Overs several features while still be compatible with old-fashioned repos. The specific features are: ++\verb'hashed' Offers several features while still being compatible with old-fashioned repositories. The specific features are: + + \begin{itemize} + +@@ -105,7 +106,7 @@ + reduces the danger of third-party programs (e.g. DreamWeaver) recursing + into the pristine cache and corrupting darcs repositories. + +-\item Darcs get is now much faster, and always operates in a "lazy" ++\item Darcs get can optionally operate in a much faster ``lazy'' + fashion, meaning that patches are downloaded only when they are + needed. This gives us much of the benefits of --partial repositories, + without most of their disadvantages. This approach, however, does have +@@ -118,7 +119,7 @@ + + \end{itemize} + +-\verb'darcs-2' Enables all available features, at the expense of still being experimental, and requiring that all repos for a project use the same format. In addition to the features of the \verb'hashed' format described above, the \verb'darcs-2' format also enables the following: ++\verb'darcs-2' Enables all available features, and requiring that all repos for a project use the same format. In addition to the features of the \verb'hashed' format described above, the \verb'darcs-2' format also enables the following: + + \begin{itemize} + +@@ -138,18 +139,18 @@ + \begin{code} + initialize_cmd :: [DarcsFlag] -> [String] -> IO () + initialize_cmd opts _ = do +- createDirectory "_darcs" `catch` ++ createDirectory darcsdir `catch` + (\e-> if isAlreadyExistsError e + then fail "Tree has already been initialized!" +- else fail "Error creating directory `_darcs'.") ++ else fail $ "Error creating directory `"++darcsdir++"'.") + createPristine $ flagsToPristine opts +- createDirectory "_darcs/patches" +- createDirectory "_darcs/prefs" ++ createDirectory $ darcsdir ++ "/patches" ++ createDirectory $ darcsdir ++ "/prefs" + write_default_prefs + let rf = create_repo_format opts +- writeRepoFormat rf "_darcs/format" ++ writeRepoFormat rf (darcsdir++"/format") + if format_has HashedInventory rf +- then writeBinFile "_darcs/hashed_inventory" "" ++ then writeBinFile (darcsdir++"/hashed_inventory") "" + else write_inventory "." (NilRL:<:NilRL :: PatchSet Patch) -- YUCK! + \end{code} + +diff -ruN darcs-2.0.0/src/Darcs/Commands/MarkConflicts.lhs darcs-2.0.2/src/Darcs/Commands/MarkConflicts.lhs +--- darcs-2.0.0/src/Darcs/Commands/MarkConflicts.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Commands/MarkConflicts.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -17,8 +17,9 @@ + + \subsection{darcs mark-conflicts} + \begin{code} ++{-# OPTIONS_GHC -cpp #-} + module Darcs.Commands.MarkConflicts ( markconflicts, resolve ) where +-import System ( ExitCode(..), exitWith ) ++import System.Exit ( ExitCode(..), exitWith ) + import Darcs.SignalHandler ( withSignalsBlocked ) + import Control.Monad ( when ) + +diff -ruN darcs-2.0.0/src/Darcs/Commands/Mv.lhs darcs-2.0.2/src/Darcs/Commands/Mv.lhs +--- darcs-2.0.0/src/Darcs/Commands/Mv.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Commands/Mv.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -17,8 +17,10 @@ + + \subsection{darcs mv} + \begin{code} ++{-# OPTIONS_GHC -cpp #-} + module Darcs.Commands.Mv ( mv, move ) where + import Control.Monad ( when, unless ) ++import Data.Maybe ( catMaybes ) + import Darcs.SignalHandler ( withSignalsBlocked ) + + import Darcs.Commands ( DarcsCommand(..), nodefaults ) +@@ -35,7 +37,7 @@ + ) + import Darcs.Patch.Ordered ( FL(..), unsafeFL ) + import qualified Darcs.Patch +-import Darcs.Patch ( RepoPatch ) ++import Darcs.Patch ( RepoPatch, Prim ) + import Darcs.SlurpDirectory ( Slurpy, slurp, slurp_has, slurp_has_anycase, + slurp_remove, slurp_hasdir, slurp_hasfile ) + import FileName ( fp2fn, fn2fp, super_name ) +@@ -103,9 +105,11 @@ + then move_to_dir repository opts [old_fp] new_fp + else do + cur <- slurp_pending repository +- check_new_and_old_filenames opts cur work (old_fp,new_fp) ++ addpatch <- check_new_and_old_filenames opts cur work (old_fp,new_fp) + withSignalsBlocked $ do +- add_to_pending repository (Darcs.Patch.move old_fp new_fp :>: NilFL) ++ case addpatch of ++ Nothing -> add_to_pending repository (Darcs.Patch.move old_fp new_fp :>: NilFL) ++ Just p -> add_to_pending repository (p :>: Darcs.Patch.move old_fp new_fp :>: NilFL) + move_file_or_dir work old_fp new_fp + \end{code} + +@@ -125,21 +129,24 @@ + in do + cur <- slurp_pending repository + work <- slurp "." +- mapM_ (check_new_and_old_filenames opts cur work) $ zip moved movetargets ++ addpatches <- mapM (check_new_and_old_filenames opts cur work) $ zip moved movetargets + withSignalsBlocked $ do +- add_to_pending repository $ unsafeFL movepatches ++ add_to_pending repository $ unsafeFL $ catMaybes addpatches ++ movepatches + sequence_ $ map2 (move_file_or_dir work) moved movetargets + + check_new_and_old_filenames +- :: [DarcsFlag] -> Slurpy -> Slurpy -> (FilePath, FilePath) -> IO () ++ :: [DarcsFlag] -> Slurpy -> Slurpy -> (FilePath, FilePath) -> IO (Maybe Prim) + check_new_and_old_filenames opts cur work (old,new) = do +- if slurp_has old work -- We need to move the object ++ maybe_add_file_thats_been_moved <- ++ if slurp_has old work -- We need to move the object + then do unless (slurp_hasdir (super_name $ fp2fn new) work) $ + fail $ "The target directory " ++ + (fn2fp $ super_name $ fp2fn new)++ + " isn't known in working directory, did you forget to add it?" + when (it_has new work) $ fail $ already_exists "working directory" +- else unless (slurp_has new work) $ fail $ doesnt_exist "working directory" ++ return Nothing ++ else do unless (slurp_has new work) $ fail $ doesnt_exist "working directory" ++ return $ Just $ Darcs.Patch.addfile old + if slurp_has old cur + then do unless (slurp_hasdir (super_name $ fp2fn new) cur) $ + fail $ "The target directory " ++ +@@ -147,6 +154,7 @@ + " isn't known in working directory, did you forget to add it?" + when (it_has new cur) $ fail $ already_exists "repository" + else fail $ doesnt_exist "repository" ++ return maybe_add_file_thats_been_moved + where it_has f s = + let ms2 = slurp_remove (fp2fn old) s + in case ms2 of +diff -ruN darcs-2.0.0/src/Darcs/Commands/Optimize.lhs darcs-2.0.2/src/Darcs/Commands/Optimize.lhs +--- darcs-2.0.0/src/Darcs/Commands/Optimize.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Commands/Optimize.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -17,6 +17,7 @@ + + \subsection{darcs optimize} + \begin{code} ++{-# OPTIONS_GHC -cpp #-} + module Darcs.Commands.Optimize ( optimize ) where + import Control.Monad ( when, unless, liftM ) + import Data.Maybe ( isJust ) +@@ -38,7 +39,7 @@ + import Darcs.Repository.Prefs ( defaultrepo ) + import Darcs.Repository ( Repository, PatchSet, withRepoLock, ($-), withGutsOf, + read_repo, optimizeInventory, slurp_recorded, +- tentativelyReplacePatches, ++ tentativelyReplacePatches, cleanRepository, + amInRepository, finalizeRepositoryChanges ) + import Darcs.Repository.Checkpoint ( write_checkpoint ) + import Darcs.Patch.Ordered ( RL(..), unsafeUnRL, (+<+), mapFL_FL, reverseRL, mapRL, concatRL ) +@@ -55,6 +56,7 @@ + import Darcs.SlurpDirectory ( slurp, list_slurpy_files ) + import Darcs.Repository.Pristine ( identifyPristine, pristineDirectory ) + import Darcs.Sealed ( Sealed(..), FlippedSeal(..), unsafeUnseal, liftSM ) ++import Darcs.Global ( darcsdir ) + #include "impossible.h" + \end{code} + \begin{code} +@@ -94,6 +96,7 @@ + \begin{code} + optimize_cmd :: [DarcsFlag] -> [String] -> IO () + optimize_cmd origopts _ = withRepoLock opts $- \repository -> do ++ cleanRepository repository + do_reorder opts repository + do_optimize_inventory repository + when (CheckPoint `elem` opts) $ do_checkpoint opts repository +@@ -217,9 +220,9 @@ + optimize_compression :: [DarcsFlag] -> IO () + optimize_compression opts = do + putStrLn "Optimizing (un)compression of patches..." +- do_compress "_darcs/patches" ++ do_compress (darcsdir++"/patches") + putStrLn "Optimizing (un)compression of inventories..." +- do_compress "_darcs/inventories" ++ do_compress (darcsdir++"/inventories") + where do_compress f = + do isd <- doesDirectoryExist f + if isd then withCurrentDirectory f $ +@@ -245,15 +248,15 @@ + do_relink :: RepoPatch p => [DarcsFlag] -> Repository p -> IO () + do_relink opts repository = + do some_siblings <- return (flagsToSiblings opts) +- defrepo <- defaultrepo "" [] ++ defrepo <- defaultrepo [] "" [] + siblings <- return (some_siblings ++ defrepo) + if (siblings == []) + then putStrLn "No siblings -- no relinking done." + else do when (Relink `elem` opts) $ + do debugMessage "Relinking patches..." + patches <- +- (liftM list_slurpy_files) (slurp "_darcs/patches") +- maybeRelinkFiles siblings patches "_darcs/patches" ++ (liftM list_slurpy_files) (slurp $ darcsdir++"/patches") ++ maybeRelinkFiles siblings patches (darcsdir++"/patches") + when (RelinkPristine `elem` opts) $ + do pristine <- identifyPristine + case (pristineDirectory pristine) of +diff -ruN darcs-2.0.0/src/Darcs/Commands/Pull.lhs darcs-2.0.2/src/Darcs/Commands/Pull.lhs +--- darcs-2.0.0/src/Darcs/Commands/Pull.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Commands/Pull.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -17,13 +17,14 @@ + + \subsection{darcs pull} + \begin{code} ++{-# OPTIONS_GHC -cpp #-} + module Darcs.Commands.Pull ( pull ) where +-import System ( ExitCode(..), exitWith ) ++import System.Exit ( ExitCode(..), exitWith ) + import Control.Monad ( when ) + + import Darcs.Commands ( DarcsCommand(..), loggers ) + import Darcs.CommandsAux ( check_paths ) +-import Darcs.Arguments ( DarcsFlag( Verbose, Quiet, DryRun, MarkConflicts, ++import Darcs.Arguments ( DarcsFlag( Verbose, Quiet, DryRun, MarkConflicts, XMLOutput, + Intersection, Complement, AllowConflicts, NoAllowConflicts ), + nocompress, ignoretimes, definePatches, + no_deps, pull_conflict_options, use_external_merge, +@@ -31,7 +32,7 @@ + all_interactive, repo_combinator, + print_dry_run_message_and_exit, + test, dry_run, +- set_default, summary, working_repo_dir, ++ set_default, summary, working_repo_dir, remote_repo, + set_scripts_executable, nolinks, + ssh_cm, umask_option, + ) +@@ -90,6 +91,7 @@ + command_advanced_options = [repo_combinator, + nocompress, nolinks, + ignoretimes, ++ remote_repo, + ssh_cm, + set_scripts_executable, + umask_option], +@@ -97,7 +99,7 @@ + all_interactive, + pull_conflict_options, + use_external_merge, +- test, dry_run, summary, ++ test]++dry_run++[summary, + no_deps, + set_default, + working_repo_dir]} +@@ -107,7 +109,7 @@ + + pull_cmd opts unfixedrepodirs@(_:_) = + let (logMessage, _, logDocLn) = loggers opts +- putInfo = if Quiet `elem` opts then \_ -> return () else logDocLn ++ putInfo = if (Quiet `elem` opts || XMLOutput `elem` opts) then \_ -> return () else logDocLn + putVerbose = if Verbose `elem` opts then putDocLn else \_ -> return () + in withRepoLock opts $- \repository -> do + let repodirs = filter (not.null) $ map toPath $ fix_filepaths opts unfixedrepodirs in do +@@ -115,7 +117,7 @@ + when (null repodirs) $ + fail "Can't pull from current repository!" + (Sealed them, Sealed compl) <- read_repos repository opts repodirs +- old_default <- defaultrepo "" [] ++ old_default <- defaultrepo opts "" [] + set_defaultrepo (head repodirs) opts + mapM_ (add_to_preflist "repos") repodirs + when (old_default == repodirs) $ +diff -ruN darcs-2.0.0/src/Darcs/Commands/Push.lhs darcs-2.0.2/src/Darcs/Commands/Push.lhs +--- darcs-2.0.0/src/Darcs/Commands/Push.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Commands/Push.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -17,8 +17,9 @@ + + \subsection{darcs push} + \begin{code} ++{-# OPTIONS_GHC -cpp #-} + module Darcs.Commands.Push ( push ) where +-import System ( exitWith, ExitCode( ExitSuccess, ExitFailure ) ) ++import System.Exit ( exitWith, ExitCode( ExitSuccess, ExitFailure ) ) + import Control.Monad ( when ) + import Data.Char ( toUpper ) + import Darcs.Commands ( DarcsCommand(..) ) +@@ -28,7 +29,7 @@ + print_dry_run_message_and_exit, + applyas, match_several, fix_filepath, no_deps, + all_interactive, dry_run, nolinks, +- ssh_cm, ++ remote_repo, ssh_cm, + set_default, sign + ) + import Darcs.Hopefully ( hopefully ) +@@ -37,7 +38,7 @@ + read_repo, amInRepository ) + import Darcs.Patch ( description ) + import Darcs.Patch.Ordered ( RL(..), (:>)(..), (:\/:)(..), +- nullFL, reverseRL, mapFL_FL, unsafeUnRL, mapRL ) ++ nullFL, reverseRL, mapFL_FL, unsafeUnRL, mapRL, lengthRL ) + import Darcs.Repository.Prefs ( defaultrepo, set_defaultrepo, get_preflist ) + import Darcs.External ( maybeURLCmd, signString ) + import Darcs.URL ( is_url, is_file ) +@@ -45,10 +46,11 @@ + import Darcs.Utils ( formatPath ) + import Darcs.Patch.Depends ( get_common_and_uncommon ) + import Darcs.Patch.Bundle ( make_bundle ) +-import Printer ( vcat, text, ($$), (<+>), putDocLn, errorDoc ) ++import Printer ( vcat, empty, text, ($$), (<+>), putDocLn, errorDoc ) + import Darcs.RemoteApply ( remote_apply, apply_as ) + import Darcs.Email ( make_email ) + import Darcs.Sealed ( Sealed(..) ) ++import English (englishNum, Noun(..)) + #include "impossible.h" + \end{code} + \begin{code} +@@ -76,10 +78,10 @@ + command_prereq = amInRepository, + command_get_arg_possibilities = get_preflist "repos", + command_argdefaults = defaultrepo, +- command_advanced_options = [applyas, nolinks, ssh_cm], ++ command_advanced_options = [applyas, nolinks, remote_repo, ssh_cm], + command_basic_options = [match_several, no_deps, + all_interactive, +- sign, dry_run, summary, ++ sign]++dry_run++[summary, + working_repo_dir, + set_default]} + \end{code} +@@ -98,7 +100,7 @@ + when (repodir == "") $ + fail "Can't push to current repository!" + -- absolute '.' also taken into account by fix_filepath +- bundle <- withRepoReadLock opts $- \repository -> do ++ (bundle,num_to_pull) <- withRepoReadLock opts $- \repository -> do + if is_url repodir then do + when (apply_as opts /= Nothing) $ + let msg = text "Cannot --apply-as when pushing to URLs" in +@@ -124,14 +126,14 @@ + then putInfo $ text "NOTE:" <+> msg + else errorDoc msg + Sealed them <- identifyRepositoryFor repository repodir >>= read_repo +- old_default <- defaultrepo "" [] ++ old_default <- defaultrepo opts "" [] + set_defaultrepo repodir opts + when (old_default == [repodir]) $ + let pushing = if DryRun `elem` opts then "Would push" else "Pushing" + in putInfo $ text $ pushing++" to "++formatPath repodir++"..." + Sealed us <- read_repo repository + case get_common_and_uncommon (us, them) of +- (common, us' :\/: _) -> do ++ (common, us' :\/: them') -> do + putVerbose $ text "We have the following patches to push:" + $$ (vcat $ mapRL description $ head $ unsafeUnRL us') + firstUs <- case us' of +@@ -148,17 +150,25 @@ + putInfo $ + text "You don't want to push any patches, and that's fine with me!" + exitWith ExitSuccess +- return $ make_bundle [] +- (bug "using slurpy in make_bundle called from Push") +- common (mapFL_FL hopefully to_be_pushed) ++ let num_to_pull = lengthRL $ head $ unsafeUnRL them' ++ bundle = make_bundle [] ++ (bug "using slurpy in make_bundle called from Push") ++ common (mapFL_FL hopefully to_be_pushed) ++ return (bundle, num_to_pull) + sbundle <- signString opts bundle + let body = if is_file repodir + then sbundle + else make_email repodir Nothing sbundle Nothing + rval <- remote_apply opts repodir body ++ let pull_reminder = ++ if num_to_pull > 0 ++ then text $ "(By the way, the remote repository has " ++ show num_to_pull ++ " " ++ ++ englishNum num_to_pull (Noun "patch") " to pull.)" ++ else empty + case rval of ExitFailure ec -> do putStrLn $ "Apply failed!" + exitWith (ExitFailure ec) +- ExitSuccess -> putInfo $ text "Push successful." ++ ExitSuccess -> putInfo $ text "Push successful." $$ pull_reminder ++ + push_cmd _ _ = impossible + \end{code} + \begin{code} +diff -ruN darcs-2.0.0/src/Darcs/Commands/Put.lhs darcs-2.0.2/src/Darcs/Commands/Put.lhs +--- darcs-2.0.0/src/Darcs/Commands/Put.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Commands/Put.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -1,21 +1,22 @@ + \subsection{darcs put} + \begin{code} ++{-# OPTIONS_GHC -cpp #-} + module Darcs.Commands.Put ( put ) where +-import System ( ExitCode( ExitSuccess, ExitFailure ), exitWith ) ++import System.Exit ( ExitCode( ExitSuccess, ExitFailure ), exitWith ) + import Control.Monad ( when ) + import Data.Maybe ( catMaybes ) + import System.Directory ( createDirectory ) + import Darcs.Commands ( DarcsCommand(..), nodefaults ) +-import Darcs.Arguments ( DarcsFlag( Quiet, ++import Darcs.Arguments ( DarcsFlag( Quiet, Verbose, + UseFormat2, UseHashedInventory, UseOldFashionedInventory ), + applyas, match_one_context, fix_filepath, + ssh_cm, flagToString, get_inventory_choices, +- set_scripts_executable, working_repo_dir ++ set_scripts_executable, working_repo_dir, set_default, + ) + import Darcs.Repository ( withRepoReadLock, ($-), patchSetToPatches, read_repo, amInRepository ) + import Darcs.Repository.Format ( identifyRepoFormat, + RepoProperty ( Darcs2, HashedInventory ), format_has ) +-import Darcs.Patch.Bundle ( make_bundle ) ++import Darcs.Patch.Bundle ( make_bundle2 ) + import Darcs.Patch.Ordered ( FL(..) ) + import Darcs.Match ( have_patchset_match, get_one_patchset ) + import Darcs.RepoPath ( toPath ) +@@ -58,7 +59,8 @@ + command_argdefaults = nodefaults, + command_advanced_options = [applyas, ssh_cm], + command_basic_options = [match_one_context, set_scripts_executable, +- get_inventory_choices, working_repo_dir]} ++ get_inventory_choices, ++ set_default, working_repo_dir]} + \end{code} + \begin{code} + put_cmd :: [DarcsFlag] -> [String] -> IO () +@@ -66,6 +68,7 @@ + put_cmd opts [unfixedrepodir] = + let am_quiet = Quiet `elem` opts + putInfo s = when (not am_quiet) $ putStrLn s ++ putVerbose = when (Verbose `elem` opts) . putStrLn + repodir = if is_relative unfixedrepodir + then toPath $ fix_filepath opts unfixedrepodir + else unfixedrepodir +@@ -79,6 +82,7 @@ + when (is_url req_absolute_repo_dir) $ error "Can't put to a URL!" + + debugMessage "Creating repository" ++ putVerbose "Creating repository" + rf_or_e <- identifyRepoFormat "." + rf <- case rf_or_e of Left e -> fail e + Right x -> return x +@@ -101,16 +105,22 @@ + then do ps <- get_one_patchset repository opts -- todo: make sure get_one_patchset has the right type + return . seal $ ps + else read_repo repository ++ Sealed patchset2 <- if have_patchset_match opts ++ then do ps <- get_one_patchset repository opts -- todo: make sure get_one_patchset has the right type ++ return . seal $ ps ++ else read_repo repository + let patches = patchSetToPatches patchset ++ patches2 = patchSetToPatches patchset2 + nullFL NilFL = True + nullFL _ = False + when (nullFL patches) $ do + putInfo "No patches were selected to put. Nothing to be done." + exitWith ExitSuccess +- let bundle = (make_bundle opts empty_slurpy [] patches) ++ let bundle = (make_bundle2 opts empty_slurpy [] patches patches2) + message = if is_file req_absolute_repo_dir + then bundle + else make_email req_absolute_repo_dir Nothing bundle Nothing ++ putVerbose "Applying patches in new repository..." + rval <- remote_apply opts req_absolute_repo_dir message + case rval of ExitFailure ec -> do putStrLn $ "Apply failed!" + exitWith (ExitFailure ec) +diff -ruN darcs-2.0.0/src/Darcs/Commands/Record.lhs darcs-2.0.2/src/Darcs/Commands/Record.lhs +--- darcs-2.0.0/src/Darcs/Commands/Record.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Commands/Record.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -18,13 +18,13 @@ + \subsection{darcs record} + \label{record} + \begin{code} +-{-# OPTIONS -fglasgow-exts #-} ++{-# OPTIONS_GHC -cpp -fglasgow-exts #-} + module Darcs.Commands.Record ( record, commit, get_date, get_log, file_exists ) where + import Control.Exception ( handleJust, Exception( ExitException ) ) + import Control.Monad ( filterM, when ) + import System.IO ( hGetContents, stdin ) + import Data.List ( sort, isPrefixOf ) +-import System ++import System.Exit ( ExitCode(..) ) + import System.IO ( openBinaryFile, IOMode(AppendMode), hClose, hPutStrLn ) + import System.Directory ( doesFileExist, doesDirectoryExist, removeFile ) + import Data.Maybe ( isJust ) +@@ -47,7 +47,7 @@ + import Darcs.Patch.Choices ( patch_choices_tps, tp_patch, + force_first, get_middle_choice, tag ) + import Darcs.SelectChanges ( with_selected_changes_to_files', +- with_selected_last_changes_reversed ) ++ with_selected_changes_reversed ) + import Darcs.RepoPath ( SubPath, sp2fn, toFilePath ) + import Darcs.SlurpDirectory ( Slurpy, empty_slurpy ) + import Darcs.Commands ( DarcsCommand(..), nodefaults, loggers, command_stub ) +@@ -59,7 +59,8 @@ + ask_long_comment, askdeps, patch_select_flag, + all_pipe_interactive, leave_test_dir, notest, + author, patchname_option, umask_option, ignoretimes, +- nocompress, rmlogfile, logfile, list_registered_files ) ++ nocompress, rmlogfile, logfile, list_registered_files, ++ set_scripts_executable ) + import Darcs.Utils ( askUser, promptYorn, edit_file, clarify_errors ) + import Darcs.Progress ( debugMessage, progressFL ) + import Darcs.Sealed ( Sealed(..) ) +@@ -97,7 +98,8 @@ + command_argdefaults = nodefaults, + command_advanced_options = [logfile, rmlogfile, + nocompress, ignoretimes, +- umask_option], ++ umask_option, ++ set_scripts_executable], + command_basic_options = [patchname_option, author, + notest, + leave_test_dir, +@@ -394,8 +396,8 @@ + [] -> error "ask_about_depends: []" + _ -> error "ask_about_depends: many" + ps' = mapFL_FL tp_patch $ get_middle_choice $ force_first ta pc +- with_selected_last_changes_reversed "depend on" (filter askdep_allowed opts) empty_slurpy ps' +- $ \(_:>deps) -> return $ mapFL info deps ++ with_selected_changes_reversed "depend on" (filter askdep_allowed opts) empty_slurpy ps' ++ $ \(deps:>_) -> return $ mapFL info deps + where headRL (x:<:_) = x + headRL NilRL = impossible + askdep_allowed = not . patch_select_flag +@@ -419,6 +421,13 @@ + tediously slow, so there is an option (\verb!--no-test!) to skip the test. + + \begin{options} ++--set-scripts-executable ++\end{options} ++ ++If you pass \verb!--set-scripts-executable! to \verb!darcs record!, darcs will set scripts ++executable in the test directory before running the test. ++ ++\begin{options} + --pipe + \end{options} + +diff -ruN darcs-2.0.0/src/Darcs/Commands/Remove.lhs darcs-2.0.2/src/Darcs/Commands/Remove.lhs +--- darcs-2.0.0/src/Darcs/Commands/Remove.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Commands/Remove.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -17,6 +17,7 @@ + + \subsection{darcs remove} + \begin{code} ++{-# OPTIONS_GHC -cpp #-} + module Darcs.Commands.Remove ( remove, rm, unadd ) where + + import Darcs.Commands ( DarcsCommand(..), nodefaults, +diff -ruN darcs-2.0.0/src/Darcs/Commands/Repair.lhs darcs-2.0.2/src/Darcs/Commands/Repair.lhs +--- darcs-2.0.0/src/Darcs/Commands/Repair.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Commands/Repair.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -20,25 +20,29 @@ + module Darcs.Commands.Repair ( repair ) where + import Workaround ( getCurrentDirectory ) + import System.IO +-import System ( exitWith, ExitCode(..) ) ++import System.Exit ( exitWith, ExitCode(..) ) + import Control.Monad ( when, ) + + import Darcs.Commands + import Darcs.Arguments ( DarcsFlag( Verbose, Quiet ), + working_repo_dir, umask_option, + ) +-import Darcs.Patch ( patch2patchinfo ) +-import Darcs.Patch.Ordered ( FL(..), reverseRL, concatRL ) +-import Darcs.Hopefully ( piap ) +-import Darcs.Repository ( withRepoLock, ($-), amInRepository, read_repo, ++import Darcs.Patch ( RepoPatch, patch2patchinfo ) ++import Darcs.Patch.Patchy ( applyAndTryToFix ) ++import Darcs.Patch.Info ( human_friendly ) ++import Darcs.Patch.Ordered ( FL(..), RL(..), lengthFL, reverseFL, reverseRL, concatRL ) ++import Darcs.Hopefully ( PatchInfoAnd, info ) ++import Darcs.Repository ( Repository, withRepoLock, ($-), amInRepository, read_repo, ++ writePatchSet, makePatchLazy, + checkPristineAgainstCwd, replacePristine ) + import Darcs.Repository.Checkpoint ( get_checkpoint_by_default ) +-import Darcs.Repository.ApplyPatches ( apply_patches ) ++import Darcs.Global ( darcsdir ) ++import Darcs.Progress ( debugMessage, beginTedious, endTedious, tediousSize, finishedOneIO ) + import Darcs.Patch.Depends ( get_patches_beyond_tag ) + import Darcs.Lock( withTempDir ) + import Darcs.Commands.Check ( check_uniqueness ) + import Darcs.Sealed ( Sealed(..), unsafeUnflippedseal ) +-import Darcs.Utils ( catchall ) ++import Darcs.Utils ( catchall, withCurrentDirectory ) + import Printer ( putDocLn, text ) + \end{code} + +@@ -81,18 +85,26 @@ + let putVerbose s = when (Verbose `elem` opts) $ putDocLn s + putInfo s = when (not $ Quiet `elem` opts) $ putDocLn s + check_uniqueness putVerbose putInfo repository +- Sealed patches <- read_repo repository + maybe_chk <- get_checkpoint_by_default repository + formerdir <- getCurrentDirectory +- withTempDir (formerdir++"/_darcs/newpristine") $ \newcur -> do ++ withTempDir (formerdir++"/"++darcsdir++"/newpristine") $ \newcur -> do + putVerbose $ text "Applying patches..." + case maybe_chk of + Just chk -> + do let chtg = patch2patchinfo chk + putVerbose $ text "I am repairing from a checkpoint." +- apply_patches [] $ (chtg `piap` chk) +- :>: reverseRL (concatRL $ unsafeUnflippedseal $ get_patches_beyond_tag chtg patches) +- Nothing -> apply_patches [] $ reverseRL $ concatRL patches ++ Sealed patches <- read_repo repository ++ applyAndTryToFix chk ++ applyAndFix repository ++ (reverseRL $ concatRL $ unsafeUnflippedseal $ get_patches_beyond_tag chtg patches) ++ return () ++ Nothing -> do debugMessage "Fixing any broken patches..." ++ Sealed rawpatches <- read_repo repository ++ let psin = reverseRL $ concatRL rawpatches ++ ps <- applyAndFix repository psin ++ withCurrentDirectory formerdir $ ++ writePatchSet (reverseFL ps :<: NilRL) opts ++ debugMessage "Done fixing broken patches..." + is_same <- checkPristineAgainstCwd repository `catchall` return False + if is_same + then do putStrLn "The repository is already consistent, no changes made." +@@ -100,4 +112,24 @@ + else do putStrLn "Fixing pristine tree..." + replacePristine repository newcur + exitWith ExitSuccess ++ ++applyAndFix :: RepoPatch p => Repository p -> FL (PatchInfoAnd p) -> IO (FL (PatchInfoAnd p)) ++applyAndFix _ NilFL = return NilFL ++applyAndFix r psin = do beginTedious k ++ tediousSize k $ lengthFL psin ++ ps <- aaf psin ++ endTedious k ++ return ps ++ where k = "Repairing patch" ++ aaf NilFL = return NilFL ++ aaf (p:>:ps) = do mp' <- applyAndTryToFix p ++ finishedOneIO k $ show $ human_friendly $ info p ++ p' <- case mp' of ++ Nothing -> return p ++ Just (e,pp) -> do putStrLn e ++ return pp ++ p'' <- makePatchLazy r p' ++ ps' <- aaf ps ++ return (p'':>:ps') ++ + \end{code} +diff -ruN darcs-2.0.0/src/Darcs/Commands/Replace.lhs darcs-2.0.2/src/Darcs/Commands/Replace.lhs +--- darcs-2.0.0/src/Darcs/Commands/Replace.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Commands/Replace.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -17,6 +17,7 @@ + + \subsection{darcs replace} + \begin{code} ++{-# OPTIONS_GHC -cpp #-} + module Darcs.Commands.Replace ( replace ) where + + import Data.Maybe ( isJust ) +@@ -178,12 +179,18 @@ + + choose_toks :: [DarcsFlag] -> String -> String -> IO String + choose_toks (Toks t:_) a b +- | any isSpace t = fail $ "Space not allowed in tokens: "++t +- | length t > 2 = if is_tok tok a && is_tok tok b +- then return tok +- else fail $ "Bad token spec: "++t +- | otherwise = fail $ "Bad token spec: "++t ++ | any isSpace t = fail $ bad_token_spec $ "Space is not allowed in the spec" ++ | length t <= 2 = fail $ bad_token_spec $ ++ "It must contain more than 2 characters, because " ++ ++ "it should be enclosed in square brackets" ++ | head t /= '[' || last t /= ']' = fail $ bad_token_spec $ ++ "It should be enclosed in square brackets" ++ | not (is_tok tok a) = fail $ bad_token_spec $ not_a_token a ++ | not (is_tok tok b) = fail $ bad_token_spec $ not_a_token b ++ | otherwise = return tok + where tok = init $ tail t :: String ++ bad_token_spec msg = "Bad token spec: '"++ t ++"' ("++ msg ++")" ++ not_a_token x = x ++ " is not a token, according to your spec" + choose_toks (_:fs) a b = choose_toks fs a b + choose_toks [] a b = if is_tok default_toks a && is_tok default_toks b + then return default_toks +diff -ruN darcs-2.0.0/src/Darcs/Commands/Revert.lhs darcs-2.0.2/src/Darcs/Commands/Revert.lhs +--- darcs-2.0.0/src/Darcs/Commands/Revert.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Commands/Revert.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -18,7 +18,7 @@ + \subsection{darcs revert} + \begin{code} + module Darcs.Commands.Revert ( revert ) where +-import System ( ExitCode(..), exitWith ) ++import System.Exit ( ExitCode(..), exitWith ) + import Control.Monad ( when ) + import Data.List ( sort ) + +diff -ruN darcs-2.0.0/src/Darcs/Commands/Rollback.lhs darcs-2.0.2/src/Darcs/Commands/Rollback.lhs +--- darcs-2.0.0/src/Darcs/Commands/Rollback.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Commands/Rollback.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -17,10 +17,11 @@ + + \subsection{darcs rollback} + \begin{code} ++{-# OPTIONS_GHC -cpp #-} + module Darcs.Commands.Rollback ( rollback ) where + + import Control.Monad ( when, filterM ) +-import System ( exitWith, ExitCode(..) ) ++import System.Exit ( exitWith, ExitCode(..) ) + import Data.List ( sort ) + import Data.Maybe ( isJust ) + import System.Directory ( removeFile ) +@@ -125,8 +126,8 @@ + definePatches ps + with_selected_last_changes_to_files' "rollback" opts working_dir + existing_files (effect ps) $ \ (_:>ps'') -> +- do when (nullFL ps) $ do logMessage "No changes selected!" +- exitWith ExitSuccess ++ do when (nullFL ps'') $ do logMessage "No changes selected!" ++ exitWith ExitSuccess + let make_log = world_readable_temp "darcs-rollback" + newlog = Just ("", "":"rolling back:":"":lines (show $ summary ps )) + --tentativelyRemovePatches repository opts (mapFL_FL hopefully ps) +diff -ruN darcs-2.0.0/src/Darcs/Commands/Send.lhs darcs-2.0.2/src/Darcs/Commands/Send.lhs +--- darcs-2.0.0/src/Darcs/Commands/Send.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Commands/Send.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -17,11 +17,12 @@ + + \subsection{darcs send} + \begin{code} ++{-# OPTIONS_GHC -cpp #-} + module Darcs.Commands.Send ( send ) where +-import System ( exitWith, ExitCode( ExitSuccess ) ) ++import System.Exit ( exitWith, ExitCode( ExitSuccess ) ) + import System.IO.Error ( ioeGetErrorString ) + import System.IO ( hClose ) +-import Control.Monad ( when, unless, liftM, guard, mplus, forM_ ) ++import Control.Monad ( when, unless, liftM, guard, mplus ) + import Data.Maybe (isJust, isNothing ) + + import Darcs.Commands ( DarcsCommand(..) ) +@@ -35,10 +36,10 @@ + sign, get_subject, no_deps, + match_several, set_default, output_auto_name, + output, cc, subject, target, author, sendmail_cmd, +- ssh_cm, ++ remote_repo, ssh_cm, + all_interactive, get_sendmail_cmd, + print_dry_run_message_and_exit, +- unified, summary, ++ summary, + from_opt, dry_run, send_to_context, + ) + import Darcs.Hopefully ( PatchInfoAnd, hopefully, info ) +@@ -121,13 +122,14 @@ + command_get_arg_possibilities = get_preflist "repos", + command_argdefaults = defaultrepo, + command_advanced_options = [logfile, rmlogfile, ++ remote_repo, + send_to_context, ssh_cm], + command_basic_options = [match_several, no_deps, + all_interactive, + from_opt, author, + target,cc,subject, +- output,output_auto_name,sign, +- unified, dry_run, summary, ++ output,output_auto_name,sign] ++ ++dry_run++[summary, + edit_description, + set_default, working_repo_dir, + sendmail_cmd]} +@@ -146,7 +148,7 @@ + fail ("Can't send to current repository! Did you mean send -"++"-context?") + repo <- identifyRepositoryFor repository repodir + Sealed them <- read_repo repo +- old_default <- defaultrepo "" [] ++ old_default <- defaultrepo input_opts "" [] + set_defaultrepo repodir input_opts + when (old_default == [repodir] && not (Quiet `elem` input_opts)) $ + putStrLn $ "Creating patch to "++formatPath repodir++"..." +@@ -244,15 +246,6 @@ + \end{code} + + \begin{options} +---unified +-\end{options} +- +-If you want to create patches having context, you can use the +-\verb!--unified! option, which creates output vaguely reminiscent of +-\verb!diff -u!. This format is still darcs-specific and should not +-be expected to apply cleanly by \verb!patch!. +- +-\begin{options} + --output, --to, --cc + \end{options} + +@@ -284,13 +277,16 @@ + + \begin{code} + ++forM_ :: (Monad m) => [a] -> (a -> m b) -> m () ++forM_ = (flip mapM_) ++ + data WhatToDo + = Post String -- ^ POST the patch via HTTP + | SendMail String -- ^ send patch via email + + + decide_on_behavior :: RepoPatch p => [DarcsFlag] -> Repository p -> IO [WhatToDo] +-decide_on_behavior opts remote_repo = ++decide_on_behavior opts the_remote_repo = + case the_targets of + [] -> + if (isJust $ get_output opts) || (OutputAutoName `elem` opts) +@@ -303,13 +299,13 @@ + return ts + where the_targets = collect_targets opts + check_post | HTTP.exists = ((readPost . unpackPS) `liftM` +- fetchFilePS (prefsUrl remote_repo++"/post") ++ fetchFilePS (prefsUrl the_remote_repo++"/post") + (MaxAge 600)) + `catchall` who_to_email + | otherwise = who_to_email + who_to_email = + do email <- (unpackPS `liftM` +- fetchFilePS (prefsUrl remote_repo++"/email") ++ fetchFilePS (prefsUrl the_remote_repo++"/email") + (MaxAge 600)) + `catchall` return "" + if '@' `elem` email then return . map SendMail $ lines email +@@ -380,7 +376,7 @@ + + \begin{verbatim} + evolution "mailto:%T?subject=%S&attach=%A&cc=%C&body=%B" +-msmtp %t %< ++msmtp -t %< + \end{verbatim} + + \begin{code} +diff -ruN darcs-2.0.0/src/Darcs/Commands/SetPref.lhs darcs-2.0.2/src/Darcs/Commands/SetPref.lhs +--- darcs-2.0.0/src/Darcs/Commands/SetPref.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Commands/SetPref.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -17,9 +17,10 @@ + + \subsection{darcs setpref} + \begin{code} ++{-# OPTIONS_GHC -cpp #-} + module Darcs.Commands.SetPref ( setpref ) where + +-import System ( exitWith, ExitCode(..) ) ++import System.Exit ( exitWith, ExitCode(..) ) + import Control.Monad (when) + + import Darcs.Commands ( DarcsCommand(..), nodefaults ) +diff -ruN darcs-2.0.0/src/Darcs/Commands/ShowAuthors.lhs darcs-2.0.2/src/Darcs/Commands/ShowAuthors.lhs +--- darcs-2.0.0/src/Darcs/Commands/ShowAuthors.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Commands/ShowAuthors.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -66,12 +66,12 @@ + authors_cmd :: [DarcsFlag] -> [String] -> IO () + authors_cmd opts _ = withRepository opts $- \repository -> do + patches <- read_repo repository +- let as = mapRL process $ concatRL $ unsafeUnseal patches ++ let authors = mapRL process $ concatRL $ unsafeUnseal patches + viewDoc $ text $ unlines $ + if Verbose `elem` opts +- then as ++ then authors + else reverse $ map shownames $ sort $ +- map (\s -> (length s,head s)) $ group $ sort as ++ map (\s -> (length s,head s)) $ group $ sort authors + where + process = pi_author . info + shownames (n, a) = show n ++ "\t" ++ a +diff -ruN darcs-2.0.0/src/Darcs/Commands/ShowBug.lhs darcs-2.0.2/src/Darcs/Commands/ShowBug.lhs +--- darcs-2.0.0/src/Darcs/Commands/ShowBug.lhs 1970-01-01 00:00:00.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Commands/ShowBug.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -0,0 +1,58 @@ ++% Copyright (C) 2007 Eric Kow ++% ++% This program is free software; you can redistribute it and/or modify ++% it under the terms of the GNU General Public License as published by ++% the Free Software Foundation; either version 2, or (at your option) ++% any later version. ++% ++% This program is distributed in the hope that it will be useful, ++% but WITHOUT ANY WARRANTY; without even the implied warranty of ++% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++% GNU General Public License for more details. ++% ++% You should have received a copy of the GNU General Public License ++% along with this program; see the file COPYING. If not, write to ++% the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ++% Boston, MA 02110-1301, USA. ++ ++\subsection{darcs show bug} ++\begin{code} ++{-# OPTIONS_GHC -cpp #-} ++module Darcs.Commands.ShowBug ( show_bug ) where ++ ++import Darcs.Commands ( DarcsCommand(..), nodefaults ) ++import Darcs.Arguments ( DarcsFlag, working_repo_dir ) ++import Darcs.Repository ( findRepository ) ++#include "impossible.h" ++\end{code} ++ ++\options{show bug} ++\begin{code} ++show_bug_description :: String ++show_bug_description = "Pretends to be a bug in darcs." ++\end{code} ++\haskell{show_bug_help} ++\begin{code} ++show_bug_help :: String ++show_bug_help = ++ "Show bug can be used to see what darcs would show you if you encountered.\n" ++ ++"a bug in darcs.\n" ++ ++show_bug :: DarcsCommand ++show_bug = DarcsCommand {command_name = "bug", ++ command_help = show_bug_help, ++ command_description = show_bug_description, ++ command_extra_args = 0, ++ command_extra_arg_help = [], ++ command_command = show_bug_cmd, ++ command_prereq = findRepository, ++ command_get_arg_possibilities = return [], ++ command_argdefaults = nodefaults, ++ command_advanced_options = [], ++ command_basic_options = [working_repo_dir]} ++\end{code} ++ ++\begin{code} ++show_bug_cmd :: [DarcsFlag] -> [String] -> IO () ++show_bug_cmd _ _ = bug "This is actually a fake bug in darcs." ++\end{code} +diff -ruN darcs-2.0.0/src/Darcs/Commands/ShowContents.lhs darcs-2.0.2/src/Darcs/Commands/ShowContents.lhs +--- darcs-2.0.0/src/Darcs/Commands/ShowContents.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Commands/ShowContents.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -15,7 +15,7 @@ + % the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + % Boston, MA 02110-1301, USA. + +-\subsection{darcs show contents} ++\subsubsection{darcs show contents} + \begin{code} + module Darcs.Commands.ShowContents ( show_contents ) where + +diff -ruN darcs-2.0.0/src/Darcs/Commands/Show.lhs darcs-2.0.2/src/Darcs/Commands/Show.lhs +--- darcs-2.0.0/src/Darcs/Commands/Show.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Commands/Show.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -23,6 +23,7 @@ + command_alias, + ) + import Darcs.Commands.ShowAuthors ( show_authors ) ++import Darcs.Commands.ShowBug ( show_bug ) + import Darcs.Commands.ShowContents ( show_contents ) + import Darcs.Commands.ShowFiles ( show_files, show_manifest ) + import Darcs.Commands.ShowTags ( show_tags ) +@@ -42,7 +43,8 @@ + command_help = show_help, + command_description = show_description, + command_prereq = amInRepository, +- command_sub_commands = [Command_data show_contents, ++ command_sub_commands = [Hidden_command show_bug, ++ Command_data show_contents, + Command_data show_files, Hidden_command show_manifest, + Command_data show_repo, + Command_data show_authors, +diff -ruN darcs-2.0.0/src/Darcs/Commands/ShowRepo.lhs darcs-2.0.2/src/Darcs/Commands/ShowRepo.lhs +--- darcs-2.0.0/src/Darcs/Commands/ShowRepo.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Commands/ShowRepo.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -47,6 +47,7 @@ + import Darcs.Repository.Pristine ( Pristine ) + import Darcs.Repository.Prefs ( Cache, get_preflist ) + import Darcs.Repository.Motd ( get_motd ) ++import Darcs.Global ( darcsdir ) + import Darcs.Patch ( RepoPatch ) + import Darcs.Patch.Ordered ( lengthRL, mapRL_RL, unsafeUnRL ) + import Darcs.Sealed ( unsealM ) +@@ -57,7 +58,7 @@ + show_repo_help = + "The repo command displays information about the current repository\n" ++ + "(location, type, etc.). Some of this information is already available\n" ++ +- "by inspecting files within the _darcs directory and some is internal\n" ++ ++ "by inspecting files within the "++darcsdir++" directory and some is internal\n" ++ + "information that is informational only (i.e. for developers). This\n" ++ + "command collects all of the repository information into a readily\n" ++ + "available source.\n" +@@ -141,6 +142,7 @@ + + showRepo :: RepoPatch p => PutInfo -> Repository p -> IO () + showRepo out r@(Repo loc opts rf rt) = do ++ when (XMLOutput `elem` opts) (putStr "\n") + showRepoType out rt + when (Verbose `elem` opts) (out "Show" $ show r) + showRepoFormat out rf +@@ -149,6 +151,7 @@ + showRepoPrefs out + unless (NoFiles `elem` opts) (numPatches r >>= (out "Num Patches" . show )) + showRepoMOTD out r ++ when (XMLOutput `elem` opts) (putStr "\n") + + -- Most of the actual elements being displayed are part of the Show + -- class; that's fine for a Haskeller, but not for the common user, so +diff -ruN darcs-2.0.0/src/Darcs/Commands/TrackDown.lhs darcs-2.0.2/src/Darcs/Commands/TrackDown.lhs +--- darcs-2.0.0/src/Darcs/Commands/TrackDown.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Commands/TrackDown.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -19,13 +19,17 @@ + \begin{code} + module Darcs.Commands.TrackDown ( trackdown ) where + import Prelude hiding ( init ) +-import System ( system, ExitCode(..) ) ++import System.Exit ( ExitCode(..) ) ++import System.Cmd ( system ) + import System.IO ( hFlush, stdout ) ++import Control.Monad( when ) + + import Darcs.Commands ( DarcsCommand(..), nodefaults ) +-import Darcs.Arguments ( DarcsFlag, working_repo_dir ) ++import Darcs.Arguments ( DarcsFlag(SetScriptsExecutable), working_repo_dir, ++ set_scripts_executable ) + import Darcs.Hopefully ( hopefully ) +-import Darcs.Repository ( amInRepository, read_repo, withRepoReadLock, ($-), withRecorded ) ++import Darcs.Repository ( amInRepository, read_repo, withRepoReadLock, ($-), withRecorded, ++ setScriptsExecutable ) + import Darcs.Patch.Ordered ( unsafeUnRL, concatRL ) + import Darcs.Patch ( RepoPatch, Named, description, apply, invert ) + import Darcs.Sealed ( Sealed(..) ) +@@ -65,7 +69,7 @@ + command_prereq = amInRepository, + command_get_arg_possibilities = return [], + command_argdefaults = nodefaults, +- command_advanced_options = [], ++ command_advanced_options = [set_scripts_executable], + command_basic_options = [working_repo_dir]} + \end{code} + +@@ -86,6 +90,7 @@ + return $ (system init, system cmd) + _ -> fail "Trackdown expects zero to two arguments." + withRecorded repository (withTempDir "trackingdown") $ \_ -> do ++ when (SetScriptsExecutable `elem` opts) setScriptsExecutable + init + track_next opts test $ map (invert . hopefully) $ unsafeUnRL $ concatRL patches + \end{code} +diff -ruN darcs-2.0.0/src/Darcs/Commands/TransferMode.lhs darcs-2.0.2/src/Darcs/Commands/TransferMode.lhs +--- darcs-2.0.0/src/Darcs/Commands/TransferMode.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Commands/TransferMode.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -17,7 +17,7 @@ + + \subsection{darcs changes} + \begin{code} +-{-# OPTIONS -fglasgow-exts #-} ++{-# OPTIONS_GHC -cpp -fglasgow-exts #-} + -- The pragma above is only for pattern guards. + module Darcs.Commands.TransferMode ( transfer_mode ) where + +@@ -30,6 +30,7 @@ + import Darcs.Arguments ( DarcsFlag, working_repo_dir ) + import Darcs.Repository ( amInRepository ) + import Darcs.Progress ( setProgressMode ) ++import Darcs.Global ( darcsdir ) + + import FastPackedString ( PackedString, readFilePS, lengthPS, hPutPS ) + \end{code} +@@ -65,7 +66,7 @@ + transfer_mode_cmd _ _ = do setProgressMode False + putStrLn "Hello user, I am darcs transfer mode" + hFlush stdout +- withCurrentDirectory "_darcs" $ transfer ++ withCurrentDirectory darcsdir $ transfer + + transfer :: IO () + transfer = do 'g':'e':'t':' ':fn <- getLine +diff -ruN darcs-2.0.0/src/Darcs/Commands/Unrecord.lhs darcs-2.0.2/src/Darcs/Commands/Unrecord.lhs +--- darcs-2.0.0/src/Darcs/Commands/Unrecord.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Commands/Unrecord.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -18,9 +18,10 @@ + \subsection{darcs unrecord} + \label{unrecord} + \begin{code} ++{-# OPTIONS_GHC -cpp #-} + module Darcs.Commands.Unrecord ( unrecord, unpull, obliterate, rempatch, get_last_patches ) where + import Control.Monad ( when ) +-import System ( exitWith, ExitCode( ExitSuccess ) ) ++import System.Exit ( exitWith, ExitCode( ExitSuccess ) ) + + import Darcs.SlurpDirectory ( wait_a_moment ) + import Darcs.Hopefully ( hopefully, info ) +diff -ruN darcs-2.0.0/src/Darcs/Commands/Unrevert.lhs darcs-2.0.2/src/Darcs/Commands/Unrevert.lhs +--- darcs-2.0.0/src/Darcs/Commands/Unrevert.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Commands/Unrevert.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -17,8 +17,9 @@ + + \subsection{darcs unrevert}\label{unrevert} + \begin{code} ++{-# OPTIONS_GHC -cpp #-} + module Darcs.Commands.Unrevert ( unrevert, write_unrevert ) where +-import System ( ExitCode(..), exitWith ) ++import System.Exit ( ExitCode(..), exitWith ) + + import Darcs.Commands ( DarcsCommand(..), nodefaults ) + import Darcs.Arguments ( DarcsFlag( Unified, MarkConflicts ), +diff -ruN darcs-2.0.0/src/Darcs/Commands/WhatsNew.lhs darcs-2.0.2/src/Darcs/Commands/WhatsNew.lhs +--- darcs-2.0.0/src/Darcs/Commands/WhatsNew.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Commands/WhatsNew.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -18,8 +18,9 @@ + \subsection{darcs whatsnew} + \label{whatsnew} + \begin{code} ++{-# OPTIONS_GHC -cpp #-} + module Darcs.Commands.WhatsNew ( whatsnew ) where +-import System ( ExitCode(..), exitWith ) ++import System.Exit ( ExitCode(..), exitWith ) + import Data.List ( sort ) + import Control.Monad ( when ) + +diff -ruN darcs-2.0.0/src/Darcs/CommandsAux.lhs darcs-2.0.2/src/Darcs/CommandsAux.lhs +--- darcs-2.0.0/src/Darcs/CommandsAux.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/CommandsAux.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -22,6 +22,7 @@ + import FileName ( breakup, is_explicitly_relative ) + import Darcs.Patch ( Patchy, list_touched_files ) + import Darcs.Patch.Ordered ( FL, mapFL ) ++import Darcs.Global ( darcsdir ) + import Data.List ( intersect ) + \end{code} + +@@ -93,7 +94,7 @@ + is_malicious_path :: String -> Bool + is_malicious_path fp = + not (is_explicitly_relative fp) || +- breakup fp `contains_any` [ "..", "_darcs" ] ++ breakup fp `contains_any` [ "..", darcsdir ] + where + contains_any a b = not . null $ intersect a b + \end{code} +diff -ruN darcs-2.0.0/src/Darcs/Commands.lhs darcs-2.0.2/src/Darcs/Commands.lhs +--- darcs-2.0.0/src/Darcs/Commands.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Commands.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -146,7 +146,7 @@ + command_command :: [DarcsFlag] -> [String] -> IO (), + command_prereq :: [DarcsFlag] -> IO (Either String FilePath), + command_get_arg_possibilities :: IO [String], +- command_argdefaults :: FilePath -> [String] -> IO [String], ++ command_argdefaults :: [DarcsFlag] -> FilePath -> [String] -> IO [String], + command_basic_options :: [DarcsOption], + command_advanced_options :: [DarcsOption]} + | SuperCommand {command_name, command_help, command_description :: String, +@@ -172,8 +172,8 @@ + where (basic, advanced) = command_alloptions c + convert = concatMap option_from_darcsoption + +-nodefaults :: FilePath -> [String] -> IO [String] +-nodefaults _ xs = return xs ++nodefaults :: [DarcsFlag] -> FilePath -> [String] -> IO [String] ++nodefaults _ _ xs = return xs + + get_subcommands :: DarcsCommand -> [CommandControl] + get_subcommands c@(SuperCommand {}) = command_sub_commands c +@@ -241,7 +241,7 @@ + usage :: [CommandControl] -> String + usage cs = "Usage: darcs COMMAND ...\n\nCommands:\n" ++ + usage_helper cs ++ "\n" ++ +- "Use 'darcs --extended-help' for more detailed help.\n" ++ ++ "Use 'darcs --overview' for more detailed help on basic commands.\n" ++ + "Use 'darcs COMMAND --help' for help on a single command.\n" ++ + "Use 'darcs --version' to see the darcs version number.\n" ++ + "Use 'darcs --exact-version' to get the exact version of this darcs instance.\n\n" ++ +@@ -314,8 +314,8 @@ + formatPath ("darcs " ++ super_name msuper ++ command_name cmd) ++ + " here.\n\n" ++ complaint + Right fix_path -> do +- extra <- (command_argdefaults cmd) fix_path old_extra + specops <- add_command_defaults cmd $ map (fix_flag pwd) opts ++ extra <- (command_argdefaults cmd) specops fix_path old_extra + when (Disable `elem` specops) $ + fail $ "Command "++command_name cmd++" disabled with --disable option!" + if command_extra_args cmd < 0 +diff -ruN darcs-2.0.0/src/Darcs/Compat.hs darcs-2.0.2/src/Darcs/Compat.hs +--- darcs-2.0.0/src/Darcs/Compat.hs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Compat.hs 2008-06-24 01:23:13.000000000 +0000 +@@ -1,7 +1,6 @@ ++{-# OPTIONS_GHC -cpp -fffi #-} + +-{-# OPTIONS -fffi #-} +- +-module Darcs.Compat (stdout_is_a_pipe, mkstemp, mk_stdout_temp, canonFilename, ++module Darcs.Compat (stdout_is_a_pipe, mk_stdout_temp, canonFilename, + maybeRelink, atomic_create, sloppy_atomic_create) where + + import Prelude hiding ( catch ) +@@ -20,16 +19,14 @@ + import Foreign.C.String ( CString, withCString ) + import Foreign.C.Error ( throwErrno, eEXIST, getErrno ) + import System.Directory ( getCurrentDirectory ) +-import System.IO ( Handle, hFlush, stdout, stderr, hSetBuffering, +- BufferMode(NoBuffering), hSetBinaryMode ) ++import System.IO ( hFlush, stdout, stderr, hSetBuffering, ++ BufferMode(NoBuffering) ) + import System.IO.Error ( mkIOError, alreadyExistsErrorType ) + import System.Posix.Files ( stdFileMode ) + import System.Posix.IO ( openFd, closeFd, stdOutput, stdError, + dupTo, defaultFileFlags, exclusive, + OpenMode(WriteOnly) ) + import System.Posix.Types ( Fd(..) ) +-import qualified Workaround ( openFd ) +-import System.IO ( IOMode(ReadWriteMode) ) + + import Darcs.SignalHandler ( stdout_is_a_pipe ) + +@@ -68,12 +65,6 @@ + c_mkstemp :: CString -> IO CInt + #endif + +-mkstemp :: String -> IO (Handle, String) +-mkstemp str = do (Fd fd, fn) <- mkstemp_core str +- h <- Workaround.openFd (fromIntegral fd) Nothing fn ReadWriteMode True False +- hSetBinaryMode h True +- return (h, fn) +- + mk_stdout_temp :: String -> IO String + mk_stdout_temp str = do (fd, fn) <- mkstemp_core str + hFlush stdout +diff -ruN darcs-2.0.0/src/Darcs/Diff.lhs darcs-2.0.2/src/Darcs/Diff.lhs +--- darcs-2.0.0/src/Darcs/Diff.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Diff.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -18,7 +18,7 @@ + \chapter{Diff} + + \begin{code} +-{-# OPTIONS -fglasgow-exts #-} ++{-# OPTIONS_GHC -cpp -fglasgow-exts #-} + #include "gadts.h" + module Darcs.Diff ( smart_diff, sync, cmp + #ifndef GADT_WITNESSES +@@ -42,7 +42,7 @@ + import FastPackedString ( hGetPS, lengthPS + #ifndef GADT_WITNESSES + , PackedString, is_funky, nilPS +- , linesPS, nullPS, lastPS, ++ , linesPS, nullPS, lastPS, takePS, + #endif + ) + +@@ -200,8 +200,15 @@ + else hunk f 1 [nilPS] $ linesPS b + in (inv p:>:) + ++{- | We take a PackedString which represents a file's contents, and we check to see ++whether it is a 'binary' file or a 'textual' file. We define a textual file as any file ++which does not contain two magic characters, '\0' (the NULL character on Unix) and '^Z' ++(Control-Z, a DOS convention). ++ ++Note that to improve performance, we won't examine *all* of the string, because that ++falls down on large files, but just the first 4096 characters. -} + has_bin :: FileContents -> Bool +-has_bin b = is_funky b ++has_bin = is_funky . takePS 4096 + #endif + \end{code} + +diff -ruN darcs-2.0.0/src/Darcs/External.hs darcs-2.0.2/src/Darcs/External.hs +--- darcs-2.0.0/src/Darcs/External.hs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/External.hs 2008-06-24 01:23:13.000000000 +0000 +@@ -1,4 +1,4 @@ +-{-# OPTIONS -fffi #-} ++{-# OPTIONS_GHC -cpp -fffi #-} + + module Darcs.External ( + backupByRenaming, backupByCopying, +@@ -12,15 +12,18 @@ + pipeDoc, pipeDocSSH, execSSH, + maybeURLCmd, + Cachable(Cachable, Uncachable, MaxAge), +- viewDoc, ++ viewDoc, viewDocWith, + ) where + + import Data.List ( intersperse ) + import Control.Monad ( liftM, when, zipWithM_ ) +-import System ( ExitCode(..), system, getEnv ) ++import System.Exit ( ExitCode(..) ) ++import System.Environment ( getEnv ) ++import System.Cmd ( system ) + import System.IO ( hPutStr, hPutStrLn, hGetContents, hClose, +- hIsTerminalDevice, stdout, stderr, +- openBinaryFile, IOMode(ReadMode), Handle ) ++ openBinaryFile, IOMode( ReadMode ), ++ openBinaryTempFile, ++ hIsTerminalDevice, stdout, stderr, Handle ) + import System.IO.Error ( isDoesNotExistError ) + import System.IO.Unsafe ( unsafePerformIO ) + import System.Posix.Files ( getSymbolicLinkStatus, isRegularFile, isDirectory ) +@@ -28,7 +31,8 @@ + doesFileExist, doesDirectoryExist, + renameFile, renameDirectory, copyFile ) + import System.Process ( runProcess, runInteractiveProcess, waitForProcess ) +-import Control.Concurrent ( forkIO ) ++import Control.Concurrent ( forkIO, newEmptyMVar, putMVar, takeMVar ) ++import Control.Exception ( bracket, try, finally ) + import Data.Char ( toUpper ) + import Foreign.C ( CString, withCString, CInt ) + import Foreign.Ptr ( nullPtr ) +@@ -49,19 +53,20 @@ + lengthPS, takePS, dropPS, packString, + nullPS, nilPS, concatPS, hGetContentsPS + ) +-import Darcs.Lock ( withTemp, withOpenTemp, readDocBinFile, +- canonFilename, writeDocBinFile ) ++import Darcs.Lock ( withTemp, withOpenTemp, tempdir_loc, canonFilename, writeDocBinFile, ++ removeFileMayNotExist, ) + import CommandLine ( parseCmd, addUrlencoded ) + import Autoconf ( have_libcurl, have_libwww, have_HTTP, have_sendmail, have_mapi, sendmail_path, darcs_version ) + import qualified URL ( copyUrl, copyUrlFirst, waitUrl ) + import qualified HTTP ( copyUrl, exists ) + import Ssh ( getSSH, copySSH, copySSHs, SSHCmd(..) ) + import URL ( Cachable(..) ) +-import Exec ( exec, Redirect(..), ) ++import Exec ( exec, Redirect(..), withoutNonBlock ) + import FileName ( fn2fp, fp2fn, norm_path ) + import Darcs.URL ( is_file, is_url, is_ssh ) + import Darcs.Utils ( catchall ) +-import Printer ( Doc, putDocLn, hPutDoc, hPutDocLn, ($$), (<+>), renderPS, ++import Printer ( Doc, Printers, putDocLnWith, hPutDoc, hPutDocLn, hPutDocWith, ($$), (<+>), renderPS, ++ simplePrinters, + text, empty, packedString, vcat, renderString ) + #include "impossible.h" + +@@ -338,17 +343,25 @@ + waitForProcess hid + + pipeDoc :: String -> [String] -> Doc -> IO ExitCode +-pipeDoc c args inp = ++pipeDoc c args inp = withoutNonBlock $ withoutProgress $ + do debugMessage $ unwords (c:args) +- withOpenTemp $ \(fh,fn) -> +- do hPutDoc fh inp +- hClose fh +- h <- openBinaryFile fn ReadMode +- x <- withoutProgress $ do pid <- runProcess c args Nothing Nothing (Just h) Nothing Nothing +- waitForProcess pid +- when (x == ExitFailure 127) $ +- putStrLn $ "Command not found:\n "++ show (c:args) +- return x ++ (i,o,e,pid) <- runInteractiveProcess c args Nothing Nothing ++ mvare <- newEmptyMVar ++ forkIO ((hGetContents e >>= -- ratify hGetContents: it's immediately consumed ++ hPutStr stderr) ++ `finally` putMVar mvare ()) ++ mvaro <- newEmptyMVar ++ forkIO ((hGetContents o >>= -- ratify hGetContents: it's immediately consumed ++ hPutStr stdout) ++ `finally` putMVar mvaro ()) ++ hPutDoc i inp ++ hClose i ++ rval <- waitForProcess pid ++ takeMVar mvare ++ takeMVar mvaro ++ when (rval == ExitFailure 127) $ ++ putStrLn $ "Command not found:\n "++ show (c:args) ++ return rval + + pipeDocSSH :: String -> [String] -> Doc -> IO ExitCode + pipeDocSSH remoteAddr args input = +@@ -495,9 +508,13 @@ + execDocPipe c args instr = withoutProgress $ + do (i,o,e,pid) <- runInteractiveProcess c args Nothing Nothing + forkIO $ hPutDoc i instr >> hClose i +- forkIO $ hGetContents e >>= hPutStr stderr -- ratify hGetContents: this is okay, it's not a file ++ mvare <- newEmptyMVar ++ forkIO ((hGetContents e >>= -- ratify hGetContents: it's immediately consumed ++ hPutStr stderr) ++ `finally` putMVar mvare ()) + out <- hGetContentsPS o + rval <- waitForProcess pid ++ takeMVar mvare + case rval of + ExitFailure ec ->fail $ "External program '"++c++ + "' failed with exit code "++ show ec +@@ -506,12 +523,17 @@ + -- The following is needed for diff, which returns non-zero whenever + -- the files differ. + execPipeIgnoreError :: String -> [String] -> Doc -> IO Doc +-execPipeIgnoreError c args instr = +- withOpenTemp $ \(th,tn) -> do +- hPutDoc th instr +- hClose th +- withTemp $ \on -> do exec c args (File tn, File on, Stdout) +- readDocBinFile on ++execPipeIgnoreError c args instr = withoutProgress $ ++ do (i,o,e,pid) <- runInteractiveProcess c args Nothing Nothing ++ forkIO $ hPutDoc i instr >> hClose i ++ mvare <- newEmptyMVar ++ forkIO ((hGetContents e >>= -- ratify hGetContents: it's immediately consumed ++ hPutStr stderr) ++ `finally` putMVar mvare ()) ++ out <- hGetContentsPS o ++ waitForProcess pid ++ takeMVar mvare ++ return $ packedString out + + signString :: [DarcsFlag] -> Doc -> IO Doc + signString [] d = return d +@@ -609,8 +631,8 @@ + + + {- +- - This function returns number of colours supported by current terminal +- - or -1 if colour output not supported or error occured. ++ - This function returns number of colors supported by current terminal ++ - or -1 if color output not supported or error occured. + - Terminal type determined by TERM env. variable. + -} + getTermNColors :: IO CInt +@@ -641,13 +663,40 @@ + #endif + + viewDoc :: Doc -> IO () +-viewDoc msg = do ++viewDoc = viewDocWith simplePrinters ++ ++viewDocWith :: Printers -> Doc -> IO () ++viewDocWith pr msg = do + isTerminal <- hIsTerminalDevice stdout +- if isTerminal ++ if isTerminal && lengthGreaterThan (20 :: Int) (lines $ renderString msg) + then do viewer <- get_viewer +- pipeDoc viewer [] msg +- `ortryrunning` pipeDoc "less" [] msg +- `ortryrunning` pipeDoc "more" [] msg +- `ortryrunning` (putDocLn msg >> return ExitSuccess) +- return () +- else putDocLn msg ++ pipeDocToPager viewer [] pr msg ++ `ortryrunning` pipeDocToPager "less" [] pr msg ++ `ortryrunning` pipeDocToPager "more" [] pr msg ++ `ortryrunning` pipeDocToPager "" [] pr msg ++ else pipeDocToPager "" [] pr msg ++ return () ++ where lengthGreaterThan n _ | n <= 0 = True ++ lengthGreaterThan _ [] = False ++ lengthGreaterThan n (_:xs) = lengthGreaterThan (n-1) xs ++ ++pipeDocToPager :: String -> [String] -> Printers -> Doc -> IO ExitCode ++ ++pipeDocToPager "" _ pr inp = do ++ putDocLnWith pr inp ++ return ExitSuccess ++ ++pipeDocToPager c args pr inp = withoutNonBlock $ withoutProgress $ do ++ tmp <- tempdir_loc ++ bracket (openBinaryTempFile tmp "darcs-pager") cleanup $ \(fn,fh) -> ++ do hPutDocWith pr fh inp ++ hClose fh ++ h <- openBinaryFile fn ReadMode ++ x <- do pid <- runProcess c args Nothing Nothing (Just h) Nothing Nothing ++ waitForProcess pid ++ when (x == ExitFailure 127) $ ++ putStrLn $ "Command not found:\n "++ show (c:args) ++ return x ++ where ++ cleanup (f,h) = do try $ hClose h ++ removeFileMayNotExist f +diff -ruN darcs-2.0.0/src/Darcs/FilePathMonad.lhs darcs-2.0.2/src/Darcs/FilePathMonad.lhs +--- darcs-2.0.0/src/Darcs/FilePathMonad.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/FilePathMonad.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -17,6 +17,7 @@ + + + \begin{code} ++{-# OPTIONS_GHC -cpp #-} + module Darcs.FilePathMonad ( FilePathMonad, withFilePaths ) where + + import Control.Monad ( MonadPlus, mplus, mzero ) +@@ -51,7 +52,6 @@ + -- We can't check it actually is a file here + mDoesFileExist f = + FPM $ \fs -> (fs, norm_path f `elem` map norm_path fs) +- mIsFileExecutable _ = return False + mInCurrentDirectory d (FPM j) = + FPM $ \fs -> (fs, snd $ j $ catMaybes $ map indir fs) + where indir f = do (d',f') <- break_on_dir f +diff -ruN darcs-2.0.0/src/Darcs/FilePathUtils.hs darcs-2.0.2/src/Darcs/FilePathUtils.hs +--- darcs-2.0.0/src/Darcs/FilePathUtils.hs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/FilePathUtils.hs 2008-06-24 01:23:13.000000000 +0000 +@@ -1,3 +1,4 @@ ++{-# OPTIONS_GHC -cpp #-} + -- Copyright (C) 2005 David Roundy + -- + -- This program is free software; you can redistribute it and/or modify +diff -ruN darcs-2.0.0/src/Darcs/Flags.lhs darcs-2.0.2/src/Darcs/Flags.lhs +--- darcs-2.0.0/src/Darcs/Flags.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Flags.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -33,7 +33,7 @@ + | AfterPatch String | UpToPatch String + | TagName String | LastN Int + | OneTag String | AfterTag String | UpToTag String +- | Context String ++ | Context String | Count + | LogFile String | RmLogFile + | DistName String | All + | Recursive | NoRecursive | Reorder +@@ -51,14 +51,14 @@ + | AllowConflicts | MarkConflicts | NoAllowConflicts + | Boring | AllowCaseOnly + | DontGrabDeps | Compress | NoCompress | UnCompress +- | WorkDir String | RepoDir String ++ | WorkDir String | RepoDir String | RemoteRepo String + | Reply String | ApplyAs String + | MachineReadable | HumanReadable + | Pipe | Interactive + | DiffCmd String + | ExternalMerge String | Summary | NoSummary + | Unified | Reverse +- | CheckPoint | Partial | Complete | Lazy | Ephemeral | NoEphemeral ++ | CheckPoint | Partial | Complete | Lazy | Ephemeral + | FixFilePath AbsolutePath String | DiffFlags String + | XMLOutput + | ForceReplace +@@ -70,7 +70,6 @@ + | Disable | SetScriptsExecutable | DontSetScriptsExecutable + | UseHashedInventory | UseOldFashionedInventory + | UseFormat2 +- | VerifyHash + | PristinePlain | PristineNone | NoUpdateWorking + | Sibling String | Relink | RelinkPristine | NoLinks + | Files | NoFiles | Directories | NoDirectories +diff -ruN darcs-2.0.0/src/Darcs/Global.lhs darcs-2.0.2/src/Darcs/Global.lhs +--- darcs-2.0.0/src/Darcs/Global.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Global.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -27,7 +27,8 @@ + verboseMode, setVerboseMode, + timingsMode, setTimingsMode, + whenDebugMode, withDebugMode, setDebugMode, +- debugMessage, debugFail, putTiming ++ debugMessage, debugFail, putTiming, ++ darcsdir + ) where + + import Control.Monad ( when ) +@@ -133,4 +134,7 @@ + {-# NOINLINE sshControlMasterDisabled #-} + sshControlMasterDisabled :: Bool + sshControlMasterDisabled = unsafePerformIO $ readIORef _sshControlMasterDisabled ++ ++darcsdir :: String ++darcsdir = "_darcs" + \end{code} +diff -ruN darcs-2.0.0/src/Darcs/HopefullyPrivate.lhs darcs-2.0.2/src/Darcs/HopefullyPrivate.lhs +--- darcs-2.0.0/src/Darcs/HopefullyPrivate.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/HopefullyPrivate.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -17,6 +17,7 @@ + + + \begin{code} ++{-# OPTIONS_GHC -cpp #-} + #include "gadts.h" + module Darcs.HopefullyPrivate ( -- ratify HopefullyPrivate: obvously we need it here... + Hopefully(..), returnH, (>>>=), (>>>), fmapH, failH, +@@ -159,6 +160,10 @@ + + instance Apply p => Apply (PatchInfoAnd p) where + apply opts p = apply opts $ hopefully p ++ applyAndTryToFix p = do mp' <- applyAndTryToFix $ hopefully p ++ case mp' of ++ Nothing -> return Nothing ++ Just (e,p') -> return $ Just (e, n2pia p') + + instance ReadPatch p => ReadPatch (PatchInfoAnd p) where + readPatch' wanteof = do x <- readPatch' wanteof +diff -ruN darcs-2.0.0/src/Darcs/IO.lhs darcs-2.0.2/src/Darcs/IO.lhs +--- darcs-2.0.0/src/Darcs/IO.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/IO.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -34,12 +34,13 @@ + + \begin{comment} + \begin{code} +-{-# OPTIONS -fglasgow-exts #-} ++{-# OPTIONS_GHC -fglasgow-exts #-} + module Darcs.IO ( ReadableDirectory(..), WriteableDirectory(..), + TolerantIO, runTolerantly, runSilently, + ) where + + import Prelude hiding ( catch ) ++import Data.Char ( toLower ) + import Data.List ( isSuffixOf ) + import System.IO.Error ( isDoesNotExistError, isPermissionError ) + import Control.Exception ( catch, catchJust, ioErrors ) +@@ -50,15 +51,15 @@ + doesDirectoryExist, doesFileExist, + ) + +-import FastPackedString ( PackedString, readFilePS, linesPS, ++import FastPackedString ( PackedString, readFilePS, linesPS, nullPS, + unlinesPS, nilPS, packString, unpackPS, + ) + import Darcs.Utils ( withCurrentDirectory, prettyException ) +-import Darcs.External ( backupByRenaming ) ++import Darcs.External ( backupByCopying, backupByRenaming ) + import Printer ( Doc, renderPS ) + import FileName ( FileName, fn2fp, fp2fn ) + import Darcs.Lock ( writeBinFile, readBinFile, writeAtomicFilePS ) +-import Workaround ( isExecutable, setExecutable ) ++import Workaround ( setExecutable ) + \end{code} + \end{comment} + +@@ -68,7 +69,6 @@ + class MonadPlus m => ReadableDirectory m where + mDoesDirectoryExist :: FileName -> m Bool + mDoesFileExist :: FileName -> m Bool +- mIsFileExecutable :: FileName -> m Bool + mInCurrentDirectory :: FileName -> m a -> m a + mGetDirectoryContents :: m [FileName] + mReadBinFile :: FileName -> m String +@@ -105,7 +105,6 @@ + instance ReadableDirectory IO where + mDoesDirectoryExist = doesDirectoryExist . fn2fp + mDoesFileExist = doesFileExist . fn2fp +- mIsFileExecutable = isExecutable . fn2fp + mInCurrentDirectory = withCurrentDirectory . fn2fp + mGetDirectoryContents = map fp2fn `liftM` getDirectoryContents "." + mReadBinFile = readBinFile . fn2fp +@@ -122,7 +121,11 @@ + else do exd <- mDoesDirectoryExist f + if exd then fail $ "File '"++fn2fp f++"' already exists!" + else mWriteFilePS f nilPS +- mRemoveFile = removeFile . fn2fp ++ mRemoveFile f = do let fp = fn2fp f ++ x <- readFilePS fp ++ when (not $ nullPS x) $ ++ fail $ "Cannot remove non-empty file "++fp ++ removeFile fp + mRemoveDirectory = removeDirectory . fn2fp + mRename a b = catchJust ioErrors + (renameDirectory x y `mplus` renameFile x y) +@@ -182,7 +185,6 @@ + instance ReadableDirectory TolerantIO where + mDoesDirectoryExist d = runTM $ mDoesDirectoryExist d + mDoesFileExist f = runTM $ mDoesFileExist f +- mIsFileExecutable f = runTM $ mIsFileExecutable f + mInCurrentDirectory i j = runTM $ mInCurrentDirectory i (runIO j) + mGetDirectoryContents = runTM mGetDirectoryContents + mReadBinFile f = runTM $ mReadBinFile f +@@ -190,7 +192,6 @@ + instance ReadableDirectory SilentIO where + mDoesDirectoryExist d = runTM $ mDoesDirectoryExist d + mDoesFileExist f = runTM $ mDoesFileExist f +- mIsFileExecutable f = runTM $ mIsFileExecutable f + mInCurrentDirectory i j = runTM $ mInCurrentDirectory i (runIO j) + mGetDirectoryContents = runTM mGetDirectoryContents + mReadBinFile f = runTM $ mReadBinFile f +@@ -213,7 +214,10 @@ + else ioError $ userError $ + "Not deleting " ++ fn2fp d ++ " because:\n" ++ show e) + mRename a b = warning $ catchJust ioErrors +- (backup b >> mRename a b) ++ (let do_backup = if (map toLower x == map toLower y) ++ then backupByCopying y -- avoid making the original vanish ++ else backupByRenaming y ++ in do_backup >> mRename a b) + (\e -> case () of + _ | isPermissionError e -> ioError $ userError $ + couldNotRename ++ "." +@@ -242,7 +246,10 @@ + else ioError $ userError $ + "Not deleting " ++ fn2fp d ++ " because:\n" ++ show e) + mRename a b = warning $ catchJust ioErrors +- (backup b >> mRename a b) ++ (let do_backup = if (map toLower x == map toLower y) ++ then backupByCopying y -- avoid making the original vanish ++ else backupByRenaming y ++ in do_backup >> mRename a b) + (\e -> case () of + _ | isPermissionError e -> ioError $ userError $ + couldNotRename ++ "." +diff -ruN darcs-2.0.0/src/Darcs/Lock.lhs darcs-2.0.2/src/Darcs/Lock.lhs +--- darcs-2.0.0/src/Darcs/Lock.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Lock.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -17,7 +17,7 @@ + + + \begin{code} +-{-# OPTIONS -fffi #-} ++{-# OPTIONS_GHC -cpp -fffi #-} + module Darcs.Lock ( withLock, withLockCanFail, + withTemp, withOpenTemp, withStdoutTemp, + withTempDir, withPermDir, withDelayedDir, withNamedTemp, +@@ -35,8 +35,9 @@ + import Control.Monad ( liftM ) + import Data.List ( inits ) + import Data.Maybe ( listToMaybe ) +-import System ( exitWith, ExitCode(..) ) +-import System.IO ( openBinaryFile, hClose, hPutStr, Handle, ++import System.Exit ( exitWith, ExitCode(..) ) ++import System.IO ( openBinaryFile, openBinaryTempFile, ++ hClose, hPutStr, Handle, + IOMode(WriteMode, AppendMode), hFlush, stdout ) + import System.IO.Error ( isDoesNotExistError, isAlreadyExistsError ) + import Control.Exception ( bracket, catchJust, ioErrors, finally, throwIO, +@@ -44,6 +45,7 @@ + import System.Directory ( setCurrentDirectory, removeFile, removeDirectory, + doesFileExist, doesDirectoryExist, + getDirectoryContents, createDirectory, ++ getTemporaryDirectory, + ) + import Workaround ( renameFile, getCurrentDirectory ) + import Darcs.Utils ( withCurrentDirectory, maybeGetEnv, firstJustIO ) +@@ -58,8 +60,8 @@ + import Darcs.SignalHandler ( withSignalsBlocked ) + import Printer ( Doc, hPutDoc, packedString, empty, renderPSs ) + import FileName ( breakup ) +-import Darcs.Global ( atexit ) +-import Darcs.Compat ( mkstemp, mk_stdout_temp, canonFilename, maybeRelink, ++import Darcs.Global ( atexit, darcsdir ) ++import Darcs.Compat ( mk_stdout_temp, canonFilename, maybeRelink, + atomic_create, sloppy_atomic_create ) + import System.Posix.Files ( getSymbolicLinkStatus, isDirectory ) + import System.Posix ( sleep ) +@@ -141,14 +143,16 @@ + \begin{code} + withTemp :: (String -> IO a) -> IO a + withTemp = bracket get_empty_file removeFileMayNotExist +- where get_empty_file = do (h,f) <- mkstemp "darcs" ++ where get_empty_file = do (f,h) <- openBinaryTempFile "." "darcs" + hClose h + return f + + withOpenTemp :: ((Handle, String) -> IO a) -> IO a +-withOpenTemp = bracket (mkstemp "darcs") cleanup ++withOpenTemp = bracket get_empty_file cleanup + where cleanup (h,f) = do try $ hClose h + removeFileMayNotExist f ++ get_empty_file = invert `fmap` openBinaryTempFile "." "darcs" ++ invert (a,b) = (b,a) + + withStdoutTemp :: (String -> IO a) -> IO a + withStdoutTemp = bracket (mk_stdout_temp "stdout_") removeFileMayNotExist +@@ -158,21 +162,24 @@ + is no longer needed. withTempDir creates a temporary directory. The + location of that directory is determined by the contents of + _darcs/prefs/tmpdir, if it exists, otherwise by \verb!$DARCS_TMPDIR!, and if +-that doesn't exist then \verb!$TMPDIR!, and if that doesn't exist, then +-\verb!\tmp!. Finally, if none of those exist (as may be the case under +-windows) it creates the temporary directory in the current directory. So +-you'd better not call it while in \verb!_darcs/current! or +-\verb!_darcs/pristine!\ldots ++that doesn't exist then whatever your operating system considers to be a ++a temporary directory (e.g. \verb!$TMPDIR! under Unix, \verb!$TEMP! under ++Windows). ++If none of those exist it creates the temporary directory ++in the current directory, unless the current directory is under a \verb!_darcs! ++directory, in which case the temporary directory in the parent of the highest ++\verb!_darcs! directory to avoid accidentally corrupting darcs's internals. ++This should not fail, but if it does indeed fail, we go ahead and use the ++current directory anyway. + + \verb!withPermDir! is like \verb!withTempDir!, except that it doesn't + delete the directory afterwards. + + \begin{code} + tempdir_loc :: IO FilePath +-tempdir_loc = firstJustIO [ readBinFile "_darcs/prefs/tmpdir" >>= return . Just . head.words >>= chkdir, ++tempdir_loc = firstJustIO [ readBinFile (darcsdir++"/prefs/tmpdir") >>= return . Just . head.words >>= chkdir, + maybeGetEnv "DARCS_TMPDIR" >>= chkdir, +- maybeGetEnv "TMPDIR" >>= chkdir, +- chkdir (Just "/tmp"), ++ getTemporaryDirectory >>= chkdir . Just, + getCurrentDirectorySansDarcs, + return $ Just "." -- always returns a Just + ] +@@ -184,7 +191,7 @@ + getCurrentDirectorySansDarcs = do + c <- getCurrentDirectory + return $ listToMaybe $ drop 5 $ reverse $ takeWhile no_darcs $ inits c +- where no_darcs x = not $ "_darcs" `elem` breakup x ++ where no_darcs x = not $ darcsdir `elem` breakup x + + data WithDirKind = Perm | Temp | Delayed + +diff -ruN darcs-2.0.0/src/Darcs/Match.lhs darcs-2.0.2/src/Darcs/Match.lhs +--- darcs-2.0.0/src/Darcs/Match.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Match.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -16,6 +16,7 @@ + % Boston, MA 02110-1301, USA. + + \begin{code} ++{-# OPTIONS_GHC -cpp #-} + module Darcs.Match ( match_first_patchset, match_second_patchset, + match_patch, + match_a_patch, doesnt_not_match, match_a_patchread, +diff -ruN darcs-2.0.0/src/Darcs/Patch/Apply.lhs darcs-2.0.2/src/Darcs/Patch/Apply.lhs +--- darcs-2.0.0/src/Darcs/Patch/Apply.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Patch/Apply.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -17,7 +17,7 @@ + + + \begin{code} +-{-# OPTIONS -fglasgow-exts -fno-warn-orphans #-} ++{-# OPTIONS_GHC -cpp -fglasgow-exts -fno-warn-orphans #-} + #include "gadts.h" + module Darcs.Patch.Apply ( apply_to_filepaths, apply_to_slurpy, + forceTokReplace, +@@ -42,17 +42,19 @@ + import Darcs.PopulationData ( Population(..), PopTree(..), Info(..), DirMark(..) ) + import Data.List ( intersperse ) + import Data.Maybe ( catMaybes ) +-import Darcs.Patch.Patchy ( Apply, apply ) ++import Darcs.Patch.Patchy ( Apply, apply, applyAndTryToFixFL, applyAndTryToFix, ++ mapMaybeSnd ) + import Darcs.Patch.Commute () + import Darcs.Patch.Core ( Patch(..), Named(..) ) + import Darcs.Patch.Prim ( Prim(..), Effect(effect), + DirPatchType(..), FilePatchType(..), + applyBinary, try_tok_internal ) + import Darcs.Patch.Info ( PatchInfo ) +-import Control.Monad ( when ) ++import Control.Monad ( when, liftM ) + import Darcs.SlurpDirectory ( FileContents, Slurpy, withSlurpy, slurp_modfile ) + import RegChars ( regChars ) + import Darcs.Repository.Prefs ( change_prefval ) ++import Darcs.Global ( darcsdir ) + import Darcs.IO ( WriteableDirectory(..), ReadableDirectory(..) ) + import Darcs.FilePathMonad ( withFilePaths ) + #include "impossible.h" +@@ -115,9 +117,15 @@ + \begin{code} + instance Apply p => Apply (Named p) where + apply opts (NamedP _ _ p) = apply opts p ++ applyAndTryToFix (NamedP n d p) = mapMaybeSnd (NamedP n d) `liftM` applyAndTryToFix p + + instance Apply Patch where + apply opts p = applyFL opts $ effect p ++ applyAndTryToFixFL (PP x) = mapMaybeSnd (mapFL_FL PP) `liftM` applyAndTryToFixFL x ++ applyAndTryToFixFL (ComP xs) = mapMaybeSnd (\xs' -> ComP xs' :>: NilFL) `liftM` applyAndTryToFix xs ++ applyAndTryToFixFL x = do apply [] x; return Nothing ++ applyAndTryToFix (ComP xs) = mapMaybeSnd ComP `liftM` applyAndTryToFix xs ++ applyAndTryToFix x = do mapMaybeSnd ComP `liftM` applyAndTryToFixFL x + \end{code} + + \begin{code} +@@ -149,8 +157,17 @@ + apply _ (DP d RmDir) = mRemoveDirectory d + apply _ (Move f f') = mRename f f' + apply _ (ChangePref p f t) = +- do b <- mDoesDirectoryExist (fp2fn "_darcs/prefs") ++ do b <- mDoesDirectoryExist (fp2fn $ darcsdir++"/prefs") + when b $ change_prefval p f t ++ applyAndTryToFixFL (FP f RmFile) = ++ do x <- mReadFilePS f ++ if nullPS x then do mRemoveFile f ++ return Nothing ++ else do mWriteFilePS f nilPS ++ mRemoveFile f ++ return $ Just ("WARNING: Fixing removal of non-empty file "++fn2fp f, ++ FP f (Binary x nilPS) :>: FP f RmFile :>: NilFL ) ++ applyAndTryToFixFL p = do apply [] p; return Nothing + + applyFL :: WriteableDirectory m => [DarcsFlag] -> FL Prim C(x y) -> m () + applyFL _ NilFL = return () +diff -ruN darcs-2.0.0/src/Darcs/Patch/Bundle.lhs darcs-2.0.2/src/Darcs/Patch/Bundle.lhs +--- darcs-2.0.0/src/Darcs/Patch/Bundle.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Patch/Bundle.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -16,8 +16,9 @@ + % Boston, MA 02110-1301, USA. + + \begin{code} ++{-# OPTIONS_GHC -cpp #-} + #include "gadts.h" +-module Darcs.Patch.Bundle ( hash_bundle, make_bundle, scan_bundle, ++module Darcs.Patch.Bundle ( hash_bundle, make_bundle, make_bundle2, scan_bundle, + make_context, scan_context, + ) where + +@@ -46,7 +47,16 @@ + $ vcat (mapFL showPatch to_be_sent) <> newline + + make_bundle :: RepoPatch p => [DarcsFlag] -> Slurpy -> [PatchInfo] -> FL (Named p) C(x y) -> Doc +-make_bundle opts the_s common to_be_sent = ++make_bundle opts the_s common to_be_sent = make_bundle2 opts the_s common to_be_sent to_be_sent ++ ++-- | In make_bundle2, it is presumed that the two patch sequences are ++-- identical, but that they may be lazily generated. If two different ++-- patch sequences are passed, a bundle with a mismatched hash will be ++-- generated, which is not the end of the world, but isn't very useful ++-- either. ++make_bundle2 :: RepoPatch p => [DarcsFlag] -> Slurpy -> [PatchInfo] ++ -> FL (Named p) C(x y) -> FL (Named p) C(x y) -> Doc ++make_bundle2 opts the_s common to_be_sent to_be_sent2 = + text "" + $$ text "New patches:" + $$ text "" +@@ -56,7 +66,7 @@ + $$ text "" + $$ (vcat $ map showPatchInfo common) + $$ text "Patch bundle hash:" +- $$ text (hash_bundle common to_be_sent) ++ $$ text (hash_bundle common to_be_sent2) + $$ text "" + where the_new = if Unified `elem` opts + then showContextPatch the_s to_be_sent +diff -ruN darcs-2.0.0/src/Darcs/Patch/Choices.lhs darcs-2.0.2/src/Darcs/Patch/Choices.lhs +--- darcs-2.0.0/src/Darcs/Patch/Choices.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Patch/Choices.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -17,7 +17,7 @@ + + \section{darcs record} + \begin{code} +-{-# OPTIONS -fglasgow-exts #-} ++{-# OPTIONS_GHC -cpp -fglasgow-exts #-} + #include "gadts.h" + module Darcs.Patch.Choices ( PatchChoices, patch_choices, patch_choices_tps, + is_patch_first, +diff -ruN darcs-2.0.0/src/Darcs/Patch/Commute.lhs darcs-2.0.2/src/Darcs/Patch/Commute.lhs +--- darcs-2.0.0/src/Darcs/Patch/Commute.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Patch/Commute.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -17,7 +17,7 @@ + + + \begin{code} +-{-# OPTIONS -fglasgow-exts -fno-warn-orphans #-} ++{-# OPTIONS_GHC -cpp -fglasgow-exts -fno-warn-orphans #-} + #include "gadts.h" + module Darcs.Patch.Commute ( fromPrims, + modernize_patch, +@@ -78,7 +78,7 @@ + MyEq, unsafeCompare + ) + +---import Darcs.ColourPrinter ( traceDoc ) ++--import Darcs.ColorPrinter ( traceDoc ) + --import Printer ( greenText ) + \end{code} + +diff -ruN darcs-2.0.0/src/Darcs/Patch/Core.lhs darcs-2.0.2/src/Darcs/Patch/Core.lhs +--- darcs-2.0.0/src/Darcs/Patch/Core.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Patch/Core.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -19,7 +19,7 @@ + \section{Patch relationships} + + \begin{code} +-{-# OPTIONS -fglasgow-exts #-} ++{-# OPTIONS_GHC -cpp -fglasgow-exts #-} + #include "gadts.h" + module Darcs.Patch.Core + ( Patch(..), Named(..), +diff -ruN darcs-2.0.0/src/Darcs/Patch/Depends.lhs darcs-2.0.2/src/Darcs/Patch/Depends.lhs +--- darcs-2.0.0/src/Darcs/Patch/Depends.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Patch/Depends.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -17,7 +17,7 @@ + + \section{Dependencies} + \begin{code} +-{-# OPTIONS -fglasgow-exts #-} ++{-# OPTIONS_GHC -cpp -fglasgow-exts #-} + #include "gadts.h" + module Darcs.Patch.Depends ( get_common_and_uncommon, get_tags_right, + get_common_and_uncommon_or_missing, +diff -ruN darcs-2.0.0/src/Darcs/Patch/Info.lhs darcs-2.0.2/src/Darcs/Patch/Info.lhs +--- darcs-2.0.0/src/Darcs/Patch/Info.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Patch/Info.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -33,7 +33,6 @@ + toCalendarTime ) + import System.IO.Unsafe ( unsafePerformIO ) + import SHA1 ( sha1PS ) +-import Darcs.Patch.ReadMonads + import Prelude hiding (pi, log) + + data RepoPatchInfo = RPI String PatchInfo +@@ -256,46 +255,45 @@ + where mul [] = text "\n" + mul (s:ss) = text "\n " <> packedString s <> mul ss + +-readPatchInfo :: Stringalike s => s -> Maybe (PatchInfo, s) +-readPatchInfo s | sal_null (sal_dropWhite s) = Nothing ++readPatchInfo :: PackedString -> Maybe (PatchInfo, PackedString) ++readPatchInfo s | nullPS (dropWhitePS s) = Nothing + readPatchInfo s = +- if sal_head (sal_dropWhite s) /= '[' -- ] ++ if headPS (dropWhitePS s) /= '[' -- ] + then Nothing +- else case sal_breakOn '\n' $ sal_tail $ sal_dropWhite s of ++ else case breakOnPS '\n' $ tailPS $ dropWhitePS s of + (name,s') -> +- case sal_breakOn '*' $ sal_tail s' of ++ case breakOnPS '*' $ tailPS s' of + (author,s2) -> +- case sal_break (\c->c==']'||c=='\n') $ sal_drop 2 s2 of ++ case breakPS (\c->c==']'||c=='\n') $ dropPS 2 s2 of + (ct,s''') -> + do (log, s4) <- lines_starting_with_ending_with ' ' ']' $ dn s''' +- let not_star = sal_index s2 1 /= '*' +- return $ (PatchInfo { _pi_date = sal_to_PS ct +- , _pi_name = sal_to_PS name +- , _pi_author = sal_to_PS author +- , _pi_log = map sal_to_PS log +- , is_inverted = not_star ++ return $ (PatchInfo { _pi_date = ct ++ , _pi_name = name ++ , _pi_author = author ++ , _pi_log = log ++ , is_inverted = indexPS s2 1 /= '*' + }, s4) +- where dn x = if sal_null x || sal_head x /= '\n' then x else sal_tail x ++ where dn x = if nullPS x || headPS x /= '\n' then x else tailPS x + \end{code} + + \begin{code} +-lines_starting_with_ending_with :: Stringalike s +- => Char -> Char -> s -> Maybe ([s],s) ++lines_starting_with_ending_with :: Char -> Char -> PackedString ++ -> Maybe ([PackedString],PackedString) + lines_starting_with_ending_with st en s = lswew s + where +- lswew x | sal_null x = Nothing ++ lswew x | nullPS x = Nothing + lswew x = +- if sal_head x == en +- then Just ([], sal_tail x) +- else if sal_head x /= st ++ if headPS x == en ++ then Just ([], tailPS x) ++ else if headPS x /= st + then Nothing +- else case sal_breakOn '\n' $ sal_tail x of +- (l,r) -> case lswew $ sal_tail r of ++ else case breakOnPS '\n' $ tailPS x of ++ (l,r) -> case lswew $ tailPS r of + Just (ls,r') -> Just (l:ls,r') + Nothing -> +- case sal_breakLast en l of ++ case breakLastPS en l of + Just (l2,_) -> +- Just ([l2], sal_drop (sal_length l2+2) x) ++ Just ([l2], dropPS (lengthPS l2+2) x) + Nothing -> Nothing + \end{code} + +diff -ruN darcs-2.0.0/src/Darcs/Patch/Match.lhs darcs-2.0.2/src/Darcs/Patch/Match.lhs +--- darcs-2.0.0/src/Darcs/Patch/Match.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Patch/Match.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -16,6 +16,7 @@ + % Boston, MA 02110-1301, USA. + + \begin{code} ++{-# OPTIONS_GHC -cpp #-} + #include "gadts.h" + module Darcs.Patch.Match ( PatchMatch, Matcher, + patch_match, match_pattern, +diff -ruN darcs-2.0.0/src/Darcs/Patch/Non.lhs darcs-2.0.2/src/Darcs/Patch/Non.lhs +--- darcs-2.0.0/src/Darcs/Patch/Non.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Patch/Non.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -19,7 +19,7 @@ + \section{``NonPatch'' patches} + + \begin{code} +-{-# OPTIONS -fglasgow-exts -fno-warn-orphans #-} ++{-# OPTIONS_GHC -cpp -fglasgow-exts -fno-warn-orphans #-} + #include "gadts.h" + module Darcs.Patch.Non + ( NonPatch, Non(..), Nonable(..), unNon, +@@ -41,10 +41,9 @@ + import Darcs.Patch.Permutations ( removeFL, commuteWhatWeCanFL ) + import Darcs.Show + import Darcs.Sealed ( Sealed(Sealed) ) +-import FastPackedString ( PackedString ) + import Printer ( Doc, empty, vcat, hiddenPrefix, blueText, redText, ($$) ) + +---import Darcs.ColourPrinter ( traceDoc ) ++--import Darcs.ColorPrinter ( traceDoc ) + --import Printer ( greenText ) + + showNons :: ShowPatch (FL p) => [Non p C(x)] -> Doc +@@ -56,8 +55,7 @@ + $$ hiddenPrefix "|" (blueText ":") + $$ showPrim NewFormat p + +-readNons :: (ReadPatch p, ParserM m, Monad (m PackedString)) +- => m PackedString [Non p C(x)] ++readNons :: (ReadPatch p, ParserM m) => m [Non p C(x)] + readNons = peekfor "{{" rns (return []) + where rns = peekfor "}}" (return []) $ + do Just (Sealed ps) <- readPatch' False +@@ -65,7 +63,7 @@ + Just (Sealed p) <- readPrim NewFormat False + (Non ps p :) `liftM` rns + +-readNon :: (ReadPatch p, ParserM m, Monad (m PackedString)) => m PackedString (Maybe (Non p C(x))) ++readNon :: (ReadPatch p, ParserM m) => m (Maybe (Non p C(x))) + readNon = do Just (Sealed ps) <- readPatch' False + peekfor ":" (do Just (Sealed p) <- readPatch' False + return $ Just $ Non ps p) +diff -ruN darcs-2.0.0/src/Darcs/Patch/Ordered.lhs darcs-2.0.2/src/Darcs/Patch/Ordered.lhs +--- darcs-2.0.0/src/Darcs/Patch/Ordered.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Patch/Ordered.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -16,7 +16,7 @@ + % Boston, MA 02110-1301, USA. + + \begin{code} +-{-# OPTIONS -fglasgow-exts #-} ++{-# OPTIONS_GHC -cpp -fglasgow-exts #-} + #include "gadts.h" + module Darcs.Patch.Ordered ( EqCheck(..), isEq, (:>)(..), (:<)(..), (:\/:)(..), (:/\:)(..), + FL(..), RL(..),Proof(..), +@@ -95,6 +95,7 @@ + + infixr 5 :>:, :<:, +>+, +<+ + ++-- forward list + data FL a C(x z) where + (:>:) :: a C(x y) -> FL a C(y z) -> FL a C(x z) + NilFL :: FL a C(x x) +@@ -108,6 +109,7 @@ + instance Show2 a => Show2 (FL a) where + showsPrec2 = showsPrec + ++-- reverse list + data RL a C(x z) where + (:<:) :: a C(y z) -> RL a C(x y) -> RL a C(x z) + NilRL :: RL a C(x x) +@@ -166,7 +168,7 @@ + splitAtFL n (x:>:xs) = case splitAtFL (n-1) xs of + (xs':>xs'') -> (x:>:xs' :> xs'') + +--- bunchFL n groups patches into batches of n, except that it always puts ++-- 'bunchFL n' groups patches into batches of n, except that it always puts + -- the first patch in its own group, this being a recognition that the + -- first patch is often *very* large. + +diff -ruN darcs-2.0.0/src/Darcs/Patch/Patchy.lhs darcs-2.0.2/src/Darcs/Patch/Patchy.lhs +--- darcs-2.0.0/src/Darcs/Patch/Patchy.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Patch/Patchy.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -17,10 +17,11 @@ + + + \begin{code} +-{-# OPTIONS -fglasgow-exts #-} ++{-# OPTIONS_GHC -cpp -fglasgow-exts #-} + #include "gadts.h" + module Darcs.Patch.Patchy ( Patchy, +- Apply, apply, ++ Apply, apply, applyAndTryToFix, applyAndTryToFixFL, ++ mapMaybeSnd, + Commute(..), commuteFL, commuteRL, commuteRLFL, + mergeFL, + ShowPatch(..), +@@ -40,8 +41,9 @@ + import Darcs.Lock ( writeDocBinFile, gzWriteDocFile ) + import Darcs.IO ( WriteableDirectory ) + import Darcs.Flags ( DarcsFlag ) ++import English ( plural, Noun(Noun) ) + import FastPackedString ( PackedString, ifHeadThenTail, packString, dropWhitePS ) +---import Darcs.ColourPrinter ( traceDoc ) ++--import Darcs.ColorPrinter ( traceDoc ) + --import Printer ( greenText, ($$) ) + + class (Apply p, Commute p, ShowPatch p, ReadPatch p, Invert p) => Patchy p where +@@ -49,6 +51,18 @@ + + class Apply p where + apply :: WriteableDirectory m => [DarcsFlag] -> p C(x y) -> m () ++ apply _ p = do mp' <- applyAndTryToFix p ++ case mp' of ++ Nothing -> return () ++ Just (e, _) -> fail $ "Unable to apply a patch: " ++ e ++ applyAndTryToFix :: WriteableDirectory m => p C(x y) -> m (Maybe (String, p C(x y))) ++ applyAndTryToFix p = do apply [] p; return Nothing ++ applyAndTryToFixFL :: WriteableDirectory m => p C(x y) -> m (Maybe (String, FL p C(x y))) ++ applyAndTryToFixFL p = mapMaybeSnd (:>:NilFL) `liftM` applyAndTryToFix p ++ ++mapMaybeSnd :: (a -> b) -> Maybe (c, a) -> Maybe (c, b) ++mapMaybeSnd f (Just (a,b)) = Just (a,f b) ++mapMaybeSnd _ Nothing = Nothing + + class Commute p where + commute :: (p :> p) C(x y) -> Maybe ((p :> p) C(x y)) +@@ -77,11 +91,11 @@ + thing :: p C(x y) -> String + thing _ = "patch" + things :: p C(x y) -> String +- things x = thing x ++ "s" ++ things x = plural (Noun $ thing x) "" + + class ReadPatch p where +- readPatch' :: (ParserM m, Monad (m PackedString)) +- => Bool -> m PackedString (Maybe (Sealed (p C(x )))) ++ readPatch' ++ :: ParserM m => Bool -> m (Maybe (Sealed (p C(x )))) + + class MyEq p => Invert p where + invert :: p C(x y) -> p C(y x) +@@ -92,6 +106,16 @@ + instance Apply p => Apply (FL p) where + apply _ NilFL = return () + apply opts (p:>:ps) = apply opts p >> apply opts ps ++ applyAndTryToFix NilFL = return Nothing ++ applyAndTryToFix (p:>:ps) = do mp <- applyAndTryToFixFL p ++ mps <- applyAndTryToFix ps ++ return $ case (mp,mps) of ++ (Nothing, Nothing) -> Nothing ++ (Just (e,p'),Nothing) -> Just (e,p'+>+ps) ++ (Nothing, Just (e,ps')) -> Just (e,p:>:ps') ++ (Just (e,p'), Just (es,ps')) -> ++ Just (unlines [e,es], p'+>+ps') ++ + instance Commute p => Commute (FL p) where + commute (NilFL :> x) = Just (x :> NilFL) + commute (x :> NilFL) = Just (NilFL :> x) +@@ -131,8 +155,7 @@ + + instance ReadPatch p => ReadPatch (FL p) where + readPatch' want_eof = Just `liftM` read_patches +- where read_patches :: (ParserM m, Monad (m PackedString)) +- => m PackedString (Sealed (FL p C(x ))) ++ where read_patches :: ParserM m => m (Sealed (FL p C(x ))) + read_patches = do --tracePeek "starting FL read" + mp <- readPatch' False + case mp of +@@ -150,35 +173,31 @@ + -- traceDoc (greenText x $$ greenText (show $ sal_to_string y)) return () + + {-# INLINE bracketedFL #-} +-bracketedFL :: (ReadPatch p, ParserM m, Monad (m PackedString)) => +- Word8 -> Word8 -> m PackedString (Maybe (Sealed (FL p C(x)))) ++bracketedFL :: (ReadPatch p, ParserM m) => ++ Word8 -> Word8 -> m (Maybe (Sealed (FL p C(x)))) + bracketedFL pre post = + peekforw pre bfl (return Nothing) +- where bfl :: (ReadPatch p, ParserM m, Monad (m PackedString)) => +- m PackedString (Maybe (Sealed (FL p C(x)))) ++ where bfl :: (ReadPatch p, ParserM m) => m (Maybe (Sealed (FL p C(x)))) + bfl = peekforw post (return $ Just $ Sealed NilFL) + (do Just (Sealed p) <- readPatch' False + Just (Sealed ps) <- bfl + return $ Just $ Sealed (p:>:ps)) + + {-# INLINE peekforw #-} +-peekforw :: (ParserM m, Monad (m PackedString)) => Word8 +- -> m PackedString a -> m PackedString a -> m PackedString a ++peekforw :: ParserM m => Word8 -> m a -> m a -> m a + peekforw w ifstr ifnot = do s <- peek_input + case ifHeadThenTail w $ dropWhitePS s of + Just s' -> alter_input (const s') >> ifstr + Nothing -> ifnot + +-peekforPS :: (ParserM m, Monad (m PackedString)) => PackedString +- -> m PackedString a -> m PackedString a -> m PackedString a ++peekforPS :: ParserM m => PackedString -> m a -> m a -> m a + peekforPS ps ifstr ifnot = do s <- peek_input + case ((ps ==) . fst) `fmap` my_lex s of + Just True -> work my_lex >> ifstr + _ -> ifnot + + {-# INLINE peekfor #-} +-peekfor :: (ParserM m, Monad (m PackedString)) => String +- -> m PackedString a -> m PackedString a -> m PackedString a ++peekfor :: ParserM m => String -> m a -> m a -> m a + peekfor str = peekforPS (packString str) + + instance Apply p => Apply (RL p) where +diff -ruN darcs-2.0.0/src/Darcs/Patch/Permutations.lhs darcs-2.0.2/src/Darcs/Patch/Permutations.lhs +--- darcs-2.0.0/src/Darcs/Patch/Permutations.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Patch/Permutations.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -17,7 +17,7 @@ + + + \begin{code} +-{-# OPTIONS -fglasgow-exts -fno-warn-orphans #-} ++{-# OPTIONS_GHC -cpp -fglasgow-exts -fno-warn-orphans #-} + #include "gadts.h" + module Darcs.Patch.Permutations ( removeFL, removeRL, removeCommon, + commuteWhatWeCanFL, commuteWhatWeCanRL, +diff -ruN darcs-2.0.0/src/Darcs/Patch/Prim.lhs darcs-2.0.2/src/Darcs/Patch/Prim.lhs +--- darcs-2.0.0/src/Darcs/Patch/Prim.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Patch/Prim.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -19,7 +19,7 @@ + \section{Patch relationships} + + \begin{code} +-{-# OPTIONS -fglasgow-exts #-} ++{-# OPTIONS_GHC -cpp -fglasgow-exts #-} + #include "gadts.h" + module Darcs.Patch.Prim + ( Prim(..), IsConflictedPrim(IsC), ConflictState(..), showPrim, +@@ -63,7 +63,7 @@ + import Darcs.Utils ( nubsort ) + import Lcs ( getChanges ) + import RegChars ( regChars ) +-import Printer ( Doc, vcat, packedString, ++import Printer ( Doc, vcat, packedString, Color(Cyan,Magenta), lineColor, + text, userchunk, invisibleText, invisiblePS, blueText, + ($$), (<+>), (<>), prefix, userchunkPS, + ) +@@ -397,8 +397,8 @@ + showHunk :: FileNameFormat -> FileName -> Int -> [PackedString] -> [PackedString] -> Doc + showHunk x f line old new = + blueText "hunk" <+> formatFileName x f <+> text (show line) +- $$ prefix "-" (vcat $ map userchunkPS old) +- $$ prefix "+" (vcat $ map userchunkPS new) ++ $$ lineColor Magenta (prefix "-" (vcat $ map userchunkPS old)) ++ $$ lineColor Cyan (prefix "+" (vcat $ map userchunkPS new)) + \end{code} + + \paragraph{Token replace} +@@ -720,7 +720,7 @@ + merge (y :\/: z) = + case elegant_merge (y:\/:z) of + Just (z' :/\: y') -> z' :/\: y' +- Nothing -> undefined ++ Nothing -> error "Commute Prim merge" + commutex x = toMaybe $ msum [speedy_commute x, + everything_else_commute x + ] +diff -ruN darcs-2.0.0/src/Darcs/Patch/Properties.lhs darcs-2.0.2/src/Darcs/Patch/Properties.lhs +--- darcs-2.0.0/src/Darcs/Patch/Properties.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Patch/Properties.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -29,7 +29,7 @@ + \begin{document} + + \begin{code} +-{-# OPTIONS -fno-warn-deprecations -fno-warn-orphans -fglasgow-exts #-} ++{-# OPTIONS_GHC -cpp -fno-warn-deprecations -fno-warn-orphans -fglasgow-exts #-} + #include "gadts.h" + module Darcs.Patch.Properties ( recommute, commute_inverses, permutivity, partial_permutivity, + identity_commutes, inverse_doesnt_commute, +@@ -47,7 +47,7 @@ + import Darcs.Patch.Ordered + import Darcs.Sealed ( Sealed(Sealed) ) + import Printer ( Doc, renderPS, redText, greenText, ($$) ) +---import Darcs.ColourPrinter ( traceDoc ) ++--import Darcs.ColorPrinter ( traceDoc ) + \end{code} + + \section{Patch properties} +diff -ruN darcs-2.0.0/src/Darcs/Patch/QuickCheck.lhs darcs-2.0.2/src/Darcs/Patch/QuickCheck.lhs +--- darcs-2.0.0/src/Darcs/Patch/QuickCheck.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Patch/QuickCheck.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -1,5 +1,5 @@ + \begin{code} +-{-# OPTIONS -fno-warn-deprecations -fno-warn-orphans -fglasgow-exts -fallow-undecidable-instances #-} ++{-# OPTIONS_GHC -cpp -fno-warn-deprecations -fno-warn-orphans -fglasgow-exts -fallow-undecidable-instances #-} + #include "gadts.h" + module Darcs.Patch.QuickCheck ( WithStartState, RepoModel, Tree, + #ifndef GADT_WITNESSES +@@ -26,11 +26,10 @@ + Invert(..), Commute(..)) + import Darcs.Patch.Prim (Prim(..), Effect(..), FilePatchType(..), FromPrim(..), is_identity ) + import Darcs.Patch.Real ( RealPatch, prim2real ) +---import Darcs.ColourPrinter ( errorDoc ) +---import Darcs.ColourPrinter ( traceDoc ) ++--import Darcs.ColorPrinter ( errorDoc ) ++--import Darcs.ColorPrinter ( traceDoc ) + import Darcs.Show + --import Printer ( greenText, ($$) ) +--- import UnsafeCatch ( unsafeCatch ) + import FileName + + #include "impossible.h" +diff -ruN darcs-2.0.0/src/Darcs/Patch/Read.lhs darcs-2.0.2/src/Darcs/Patch/Read.lhs +--- darcs-2.0.0/src/Darcs/Patch/Read.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Patch/Read.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -17,7 +17,7 @@ + + + \begin{code} +-{-# OPTIONS -fno-warn-orphans #-} ++{-# OPTIONS_GHC -cpp -fno-warn-orphans #-} + module Darcs.Patch.Read ( readPrim, readPatch ) + where + +@@ -25,7 +25,9 @@ + import Control.Monad ( liftM ) + + #include "gadts.h" +-import FastPackedString ( PackedString ) ++import FastPackedString ( PackedString, nilPS, headPS, tailPS, breakFirstPS, ++ nullPS, unpackPS, breakOnPS, dropWhilePS, concatPS, ++ fromHex2PS, readIntPS, dropWhitePS ) + import FileName ( FileName, fn2fp, fp2fn, ps2fn, decode_white ) + import Darcs.Patch.Core ( Patch(..), Named(..) ) + import Darcs.Patch.Prim ( Prim(..), FileNameFormat(..), +@@ -36,7 +38,7 @@ + import Darcs.Patch.Patchy ( invert ) + #endif + import Darcs.Patch.Info ( PatchInfo, readPatchInfo ) +-import Darcs.Patch.ReadMonads (Stringalike(..), ParserM, work, maybe_work, alter_input, ++import Darcs.Patch.ReadMonads (ParserM, work, maybe_work, alter_input, + parse_strictly, peek_input, lex_string, lex_eof, my_lex) + #include "impossible.h" + import Darcs.Patch.Patchy ( ReadPatch, readPatch', bracketedFL ) +@@ -53,18 +55,17 @@ + instance ReadPatch p => ReadPatch (Named p) where + readPatch' want_eof + = do s <- peek_input +- case liftM (sal_to_string . fst) $ my_lex s of ++ case liftM (unpackPS . fst) $ my_lex s of + Just ('[':_) -> liftM Just $ readNamed want_eof -- ] + _ -> return Nothing + + instance ReadPatch Prim where + readPatch' w = readPrim OldFormat w + +-readPrim :: (ParserM m, Monad (m PackedString)) +- => FileNameFormat -> Bool -> m PackedString (Maybe (Sealed (Prim C(x )))) ++readPrim :: ParserM m => FileNameFormat -> Bool -> m (Maybe (Sealed (Prim C(x )))) + readPrim x _ + = do s <- peek_input +- case liftM (sal_to_string . fst) $ my_lex s of ++ case liftM (unpackPS . fst) $ my_lex s of + Just "{}" -> do work my_lex + return $ Just $ seal Identity + Just "(" -> liftM Just $ readSplit x -- ) +@@ -85,7 +86,7 @@ + case mps of + Just (Sealed ps) -> return $ Just $ Sealed $ ComP ps + Nothing -> do s <- peek_input +- case liftM (sal_to_string . fst) $ my_lex s of ++ case liftM (unpackPS . fst) $ my_lex s of + #ifndef GADT_WITNESSES + Just "merger" -> liftM (Just . seal) $ readMerger True + Just "regrem" -> liftM (Just . seal) $ readMerger False +@@ -94,8 +95,7 @@ + \end{code} + + \begin{code} +-read_patches :: (ParserM m, Monad (m PackedString)) +- => FileNameFormat -> String -> Bool -> m PackedString (Sealed (FL Prim C(x ))) ++read_patches :: ParserM m => FileNameFormat -> String -> Bool -> m (Sealed (FL Prim C(x ))) + read_patches x str want_eof + = do mp <- readPrim x False + case mp of +@@ -110,8 +110,7 @@ + \end{code} + + \begin{code} +-readSplit :: (ParserM m, Monad (m PackedString)) => +- FileNameFormat -> m PackedString (Sealed (Prim C(x ))) ++readSplit :: ParserM m => FileNameFormat -> m (Sealed (Prim C(x ))) + readSplit x = do + work my_lex + ps <- read_patches x ")" False +@@ -119,15 +118,15 @@ + \end{code} + + \begin{code} +-readFileName :: Stringalike s => FileNameFormat -> s -> FileName +-readFileName OldFormat = ps2fn . sal_to_PS +-readFileName NewFormat = fp2fn . decode_white . sal_to_string ++readFileName :: FileNameFormat -> PackedString -> FileName ++readFileName OldFormat = ps2fn ++readFileName NewFormat = fp2fn . decode_white . unpackPS + +-readHunk :: (ParserM m, Monad (m PackedString)) => FileNameFormat -> m PackedString (Prim C(x y)) ++readHunk :: ParserM m => FileNameFormat -> m (Prim C(x y)) + readHunk x = do + work my_lex + fi <- work my_lex +- l <- work sal_readInt ++ l <- work readIntPS + have_nl <- skip_newline + if have_nl + then do work $ lines_starting_with ' ' -- skipping context +@@ -137,25 +136,25 @@ + return $ hunk (fn2fp $ readFileName x fi) l old new + else return $ hunk (fn2fp $ readFileName x fi) l [] [] + +-skip_newline :: (ParserM m, Monad (m PackedString)) => m PackedString Bool ++skip_newline :: ParserM m => m Bool + skip_newline = do s <- peek_input +- if sal_null s ++ if nullPS s + then return False +- else if sal_head s /= '\n' ++ else if headPS s /= '\n' + then return False +- else alter_input sal_tail >> return True ++ else alter_input tailPS >> return True + \end{code} + + \begin{code} +-readTok :: (ParserM m, Monad (m PackedString)) => FileNameFormat -> m PackedString (Prim C(x y)) ++readTok :: ParserM m => FileNameFormat -> m (Prim C(x y)) + readTok x = do + work my_lex + f <- work my_lex + regstr <- work my_lex + o <- work my_lex + n <- work my_lex +- return $ FP (readFileName x f) $ TokReplace (drop_brackets $ sal_to_string regstr) +- (sal_to_string o) (sal_to_string n) ++ return $ FP (readFileName x f) $ TokReplace (drop_brackets $ unpackPS regstr) ++ (unpackPS o) (unpackPS n) + where drop_brackets = init . tail + \end{code} + +@@ -172,37 +171,37 @@ + ... + \end{verbatim} + \begin{code} +-readBinary :: (ParserM m, Monad (m PackedString)) => FileNameFormat -> m PackedString (Prim C(x y)) ++readBinary :: ParserM m => FileNameFormat -> m (Prim C(x y)) + readBinary x = do + work my_lex + fi <- work my_lex + work my_lex +- alter_input sal_dropWhite ++ alter_input dropWhitePS + old <- work $ lines_starting_with '*' + work my_lex +- alter_input sal_dropWhite ++ alter_input dropWhitePS + new <- work $ lines_starting_with '*' + return $ binary (fn2fp $ readFileName x fi) +- (sal_to_PS $ sal_fromHex $ sal_concat old) +- (sal_to_PS $ sal_fromHex $ sal_concat new) ++ (fromHex2PS $ concatPS old) ++ (fromHex2PS $ concatPS new) + \end{code} + + \begin{code} +-readAddFile :: (ParserM m, Monad (m PackedString)) => FileNameFormat -> m PackedString (Prim C(x y)) ++readAddFile :: ParserM m => FileNameFormat -> m (Prim C(x y)) + readAddFile x = do work my_lex + f <- work my_lex + return $ FP (readFileName x f) AddFile + \end{code} + + \begin{code} +-readRmFile :: (ParserM m, Monad (m PackedString)) => FileNameFormat -> m PackedString (Prim C(x y)) ++readRmFile :: ParserM m => FileNameFormat -> m (Prim C(x y)) + readRmFile x = do work my_lex + f <- work my_lex + return $ FP (readFileName x f) RmFile + \end{code} + + \begin{code} +-readMove :: (ParserM m, Monad (m PackedString)) => FileNameFormat -> m PackedString (Prim C(x y)) ++readMove :: ParserM m => FileNameFormat -> m (Prim C(x y)) + readMove x = do work my_lex + d <- work my_lex + d' <- work my_lex +@@ -210,24 +209,24 @@ + \end{code} + + \begin{code} +-readChangePref :: (ParserM m, Monad (m PackedString)) => m PackedString (Prim C(x y)) ++readChangePref :: ParserM m => m (Prim C(x y)) + readChangePref + = do work my_lex + p <- work my_lex +- f <- work (Just . sal_breakOn '\n' . sal_tail . sal_dropWhile (== ' ')) +- t <- work (Just . sal_breakOn '\n' . sal_tail) +- return $ ChangePref (sal_to_string p) (sal_to_string f) (sal_to_string t) ++ f <- work (Just . breakOnPS '\n' . tailPS . dropWhilePS (== ' ')) ++ t <- work (Just . breakOnPS '\n' . tailPS) ++ return $ ChangePref (unpackPS p) (unpackPS f) (unpackPS t) + \end{code} + + \begin{code} +-readAddDir :: (ParserM m, Monad (m PackedString)) => FileNameFormat -> m PackedString (Prim C(x y)) ++readAddDir :: ParserM m => FileNameFormat -> m (Prim C(x y)) + readAddDir x = do work my_lex + f <- work my_lex + return $ DP (readFileName x f) AddDir + \end{code} + + \begin{code} +-readRmDir :: (ParserM m, Monad (m PackedString)) => FileNameFormat -> m PackedString (Prim C(x y)) ++readRmDir :: ParserM m => FileNameFormat -> m (Prim C(x y)) + readRmDir x = do work my_lex + f <- work my_lex + return $ DP (readFileName x f) RmDir +@@ -235,21 +234,20 @@ + + \begin{code} + #ifndef GADT_WITNESSES +-readMerger :: (ParserM m, Monad (m PackedString)) => Bool -> m PackedString (Patch C(x y)) ++readMerger :: ParserM m => Bool -> m (Patch C(x y)) + readMerger b = do work my_lex + g <- work my_lex + lex_string "(" + Just (Sealed p1) <- readPatch' False + Just (Sealed p2) <- readPatch' False + lex_string ")" +- let m = merger (sal_to_string g) p1 p2 ++ let m = merger (unpackPS g) p1 p2 + return $ if b then m else invert m + #endif + \end{code} + + \begin{code} +-readNamed :: (ReadPatch p, ParserM m, Monad (m PackedString)) => +- Bool -> m PackedString (Sealed (Named p C(x ))) ++readNamed :: (ReadPatch p, ParserM m) => Bool -> m (Sealed (Named p C(x ))) + readNamed want_eof + = do mn <- maybe_work readPatchInfo + case mn of +@@ -258,29 +256,29 @@ + do d <- read_depends + Just p <- readPatch' want_eof + return $ (NamedP n d) `mapSeal` p +-read_depends :: (ParserM m, Monad (m PackedString)) => m PackedString [PatchInfo] ++read_depends :: ParserM m => m [PatchInfo] + read_depends = do s <- peek_input + case my_lex s of +- Just (xs, _) | sal_to_string xs == "<" -> ++ Just (xs, _) | unpackPS xs == "<" -> + do work my_lex + read_pis + _ -> return [] +-read_pis :: (ParserM m, Monad (m PackedString)) => m PackedString [PatchInfo] ++read_pis :: ParserM m => m [PatchInfo] + read_pis = do mpi <- maybe_work readPatchInfo + case mpi of + Just pi -> do pis <- read_pis + return (pi:pis) +- Nothing -> do alter_input (sal_tail . sal_dropWhile (/= '>')) ++ Nothing -> do alter_input (tailPS . dropWhilePS (/= '>')) + return [] + \end{code} + + \begin{code} +-lines_starting_with :: Stringalike s => Char -> s -> Maybe ([PackedString], s) ++lines_starting_with :: Char -> PackedString -> Maybe ([PackedString], PackedString) + lines_starting_with c thes = + Just (lsw [] thes) +- where lsw acc s | sal_null s || sal_head s /= c = (reverse acc, s) +- lsw acc s = let s' = sal_tail s +- in case sal_breakFirst '\n' s' of +- Just (l, r) -> lsw (sal_to_PS l:acc) r +- Nothing -> (reverse (sal_to_PS s':acc), sal_empty) ++ where lsw acc s | nullPS s || headPS s /= c = (reverse acc, s) ++ lsw acc s = let s' = tailPS s ++ in case breakFirstPS '\n' s' of ++ Just (l, r) -> lsw (l:acc) r ++ Nothing -> (reverse (s':acc), nilPS) + \end{code} +diff -ruN darcs-2.0.0/src/Darcs/Patch/ReadMonads.hs darcs-2.0.2/src/Darcs/Patch/ReadMonads.hs +--- darcs-2.0.0/src/Darcs/Patch/ReadMonads.hs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Patch/ReadMonads.hs 2008-06-24 01:23:13.000000000 +0000 +@@ -1,57 +1,57 @@ + +-module Darcs.Patch.ReadMonads (Stringalike(..), +- ParserM, work, maybe_work, alter_input, ++module Darcs.Patch.ReadMonads (ParserM, work, maybe_work, alter_input, + parse_strictly, parse_lazily, + peek_input, + lex_char, lex_string, lex_strings, lex_eof, + my_lex) where + +-import Stringalike ( Stringalike(..) ) ++import FastPackedString ( PackedString, dropWhitePS, breakWhitePS, nullPS, ++ unpackPS, nilPS ) + +-lex_char :: (Stringalike s, ParserM m) => Char -> m s () ++lex_char :: ParserM m => Char -> m () + lex_char c = lex_string [c] + +-lex_string :: (Stringalike s, ParserM m) => String -> m s () ++lex_string :: ParserM m => String -> m () + lex_string str = work + $ \s -> case my_lex s of +- Just (xs, ys) | sal_to_string xs == str -> Just ((), ys) ++ Just (xs, ys) | unpackPS xs == str -> Just ((), ys) + _ -> Nothing + +-lex_eof :: (Stringalike s, ParserM m) => m s () ++lex_eof :: ParserM m => m () + lex_eof = work +- $ \s -> if sal_null (sal_dropWhite s) +- then (Just ((), sal_empty)) ++ $ \s -> if nullPS (dropWhitePS s) ++ then (Just ((), nilPS)) + else Nothing + +-lex_strings :: (Stringalike s, ParserM m) => [String] -> m s String ++lex_strings :: ParserM m => [String] -> m String + lex_strings str = + work $ \s -> + case my_lex s of + Just (xs, ys) | xs' `elem` str -> Just (xs', ys) +- where xs' = sal_to_string xs ++ where xs' = unpackPS xs + _ -> Nothing + +-my_lex :: Stringalike s => s -> Maybe (s, s) +-my_lex s = let s' = sal_dropWhite s +- in if sal_null s' ++my_lex :: PackedString -> Maybe (PackedString, PackedString) ++my_lex s = let s' = dropWhitePS s ++ in if nullPS s' + then Nothing +- else Just $ sal_breakWhite s' ++ else Just $ breakWhitePS s' + +-alter_input :: (Stringalike s, ParserM m) +- => (s -> s) -> m s () ++alter_input :: ParserM m ++ => (PackedString -> PackedString) -> m () + alter_input f = work (\s -> Just ((), f s)) + +-class ParserM m where +- work :: (s -> Maybe (a, s)) -> m s a +- maybe_work :: (s -> Maybe (a, s)) -> m s (Maybe a) +- peek_input :: m s s ++class Monad m => ParserM m where ++ work :: (PackedString -> Maybe (a, PackedString)) -> m a ++ maybe_work :: (PackedString -> Maybe (a, PackedString)) -> m (Maybe a) ++ peek_input :: m PackedString + + ----- Strict Monad ----- +-parse_strictly :: SM s a -> s -> Maybe (a, s) ++parse_strictly :: SM a -> PackedString -> Maybe (a, PackedString) + parse_strictly (SM f) s = f s + +-newtype SM s a = SM (s -> Maybe (a, s)) +-instance Monad (SM s) where ++newtype SM a = SM (PackedString -> Maybe (a, PackedString)) ++instance Monad SM where + SM m >>= k = SM $ \s -> case m s of + Nothing -> Nothing + Just (x, s') -> +@@ -68,11 +68,11 @@ + peek_input = SM $ \s -> Just (s, s) + + ----- Lazy Monad ----- +-parse_lazily :: LM s a -> s -> (a, s) ++parse_lazily :: LM a -> PackedString -> (a, PackedString) + parse_lazily (LM f) s = f s + +-newtype LM s a = LM (s -> (a, s)) +-instance Monad (LM s) where ++newtype LM a = LM (PackedString -> (a, PackedString)) ++instance Monad LM where + LM m >>= k = LM $ \s -> let (x, s') = m s + LM y = k x + in y s' +diff -ruN darcs-2.0.0/src/Darcs/Patch/Real.lhs darcs-2.0.2/src/Darcs/Patch/Real.lhs +--- darcs-2.0.0/src/Darcs/Patch/Real.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Patch/Real.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -19,13 +19,13 @@ + \section{Conflictor patches} + + \begin{code} +-{-# OPTIONS -fglasgow-exts -fno-warn-orphans #-} ++{-# OPTIONS_GHC -cpp -fglasgow-exts -fno-warn-orphans #-} + #include "gadts.h" + module Darcs.Patch.Real + ( RealPatch(..), prim2real, is_consistent, is_forward, is_duplicate, + pullCommon, mergeUnravelled ) where + +-import Control.Monad ( mplus ) ++import Control.Monad ( mplus, liftM ) + import Data.List ( partition, nub ) + import Darcs.Patch.Prim ( Prim, FromPrim(..), ToFromPrim(..), Conflict(..), Effect(..), + showPrim, FileNameFormat(NewFormat), +@@ -42,17 +42,16 @@ + add, addP, addPs, remP, remPs, remNons, + (*>), (>*), (*>>), (>>*) ) + import Darcs.Patch.Permutations ( commuteWhatWeCanFL, commuteWhatWeCanRL, +- headPermutationsFL, + removeRL, removeFL, remove_subsequenceFL ) +-import Stringalike ( sal_to_string ) ++import FastPackedString ( unpackPS ) + import Darcs.Patch.ReadMonads (work, peek_input, my_lex ) + import Darcs.Utils ( nubsort ) + import Darcs.Sealed ( FlippedSeal(..), Sealed(Sealed), mapSeal ) + import Darcs.Show + import Printer ( Doc, renderString, blueText, redText, (<+>), ($$) ) +-import Darcs.ColourPrinter ( errorDoc, assertDoc ) ++import Darcs.ColorPrinter ( errorDoc, assertDoc ) + --import Printer ( greenText ) +---import Darcs.ColourPrinter ( traceDoc ) ++--import Darcs.ColorPrinter ( traceDoc ) + #include "impossible.h" + + -- Duplicate x: This patch has no effect since 'x' is already present in the repository +@@ -173,7 +172,7 @@ + case geteff ix' xs of + (ns,xs') -> (non (Normal x) : map (addP (Normal x)) ns, + Normal x :>: xs') +-geteff ix xx = case mergeConflictingNons $ filter (not . depends_uponFL xx) ix of ++geteff ix xx = case mergeConflictingNons ix of + Nothing -> errorDoc $ redText "mergeConflictingNons failed in geteff with ix" $$ + showNons ix $$ redText "xx" $$ showPatch xx + Just rix -> case mergeAfterConflicting rix xx of +@@ -553,9 +552,6 @@ + list_touched_files (InvConflictor x c p) = + nubsort $ concatMap nonTouches x ++ list_touched_files c ++ nonTouches p + +- +-depends_uponFL :: FL Prim C(x y) -> Non RealPatch C(x) -> Bool +-depends_uponFL xx n = any (\ (x:>_) -> n `depends_upon` Non NilFL x) $ headPermutationsFL xx + {- + all_conflicts_withFL :: FL Prim C(x y) -> [Non RealPatch C(x)] + -> ([Non RealPatch C(x)], [Non RealPatch C(x)]) +@@ -640,6 +636,8 @@ + + instance Apply RealPatch where + apply opts p = apply opts (effect p) ++ applyAndTryToFixFL (Normal p) = mapMaybeSnd (mapFL_FL Normal) `liftM` applyAndTryToFixFL p ++ applyAndTryToFixFL x = do apply [] x; return Nothing + + instance ShowPatch RealPatch where + showPatch (Duplicate d) = blueText "duplicate" $$ showNon d +@@ -665,7 +663,7 @@ + instance ReadPatch RealPatch where + readPatch' want_eof = + do s <- peek_input +- case fmap (sal_to_string . fst) $ my_lex s of ++ case fmap (unpackPS . fst) $ my_lex s of + Just "duplicate" -> + do work my_lex + p <- readNon +@@ -677,7 +675,7 @@ + Just "conflictor" -> + do work my_lex + --let tracePeek x = do y <- peek_input +- -- traceDoc (greenText x $$ greenText (show $ sal_to_string y)) return () ++ -- traceDoc (greenText x $$ greenText (show $ unpackPS y)) return () + i <- readNons + Just (Sealed ps) <- bracketedFL (fromIntegral $ fromEnum '[') (fromIntegral $ fromEnum ']') + +diff -ruN darcs-2.0.0/src/Darcs/Patch/Set.lhs darcs-2.0.2/src/Darcs/Patch/Set.lhs +--- darcs-2.0.0/src/Darcs/Patch/Set.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Patch/Set.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -17,6 +17,7 @@ + + + \begin{code} ++{-# OPTIONS_GHC -cpp #-} + #include "gadts.h" + module Darcs.Patch.Set ( PatchSet, SealedPatchSet ) where + +diff -ruN darcs-2.0.0/src/Darcs/Patch/Show.lhs darcs-2.0.2/src/Darcs/Patch/Show.lhs +--- darcs-2.0.0/src/Darcs/Patch/Show.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Patch/Show.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -17,7 +17,7 @@ + + + \begin{code} +-{-# OPTIONS -fno-warn-orphans #-} ++{-# OPTIONS_GHC -cpp -fno-warn-orphans #-} + module Darcs.Patch.Show ( showPatch_, showNamedPrefix ) + where + +diff -ruN darcs-2.0.0/src/Darcs/Patch/Test.lhs darcs-2.0.2/src/Darcs/Patch/Test.lhs +--- darcs-2.0.0/src/Darcs/Patch/Test.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Patch/Test.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -17,7 +17,7 @@ + + + \begin{code} +-{-# OPTIONS -fno-warn-deprecations -fglasgow-exts #-} ++{-# OPTIONS_GHC -cpp -fno-warn-deprecations -fglasgow-exts #-} + #include "gadts.h" + module Darcs.Patch.Test + ( prop_read_show, +diff -ruN darcs-2.0.0/src/Darcs/Patch/Unit.lhs darcs-2.0.2/src/Darcs/Patch/Unit.lhs +--- darcs-2.0.0/src/Darcs/Patch/Unit.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Patch/Unit.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -16,7 +16,7 @@ + % Boston, MA 02110-1301, USA. + + \begin{code} +-{-# OPTIONS -fno-warn-deprecations -fno-warn-orphans -fglasgow-exts #-} ++{-# OPTIONS_GHC -cpp -fno-warn-deprecations -fno-warn-orphans -fglasgow-exts #-} + #include "gadts.h" + module Darcs.Patch.Unit ( run_patch_unit_tests ) where + +@@ -38,9 +38,9 @@ + import Darcs.Patch.QuickCheck + import Printer ( Doc, redText, ($$) ) + --import Printer ( greenText ) +---import Darcs.ColourPrinter ( traceDoc ) +---import Darcs.ColourPrinter ( errorDoc ) +-import Darcs.ColourPrinter () -- for instance Show Doc ++--import Darcs.ColorPrinter ( traceDoc ) ++--import Darcs.ColorPrinter ( errorDoc ) ++import Darcs.ColorPrinter () -- for instance Show Doc + + -- import Debug.Trace + -- #include "impossible.h" +diff -ruN darcs-2.0.0/src/Darcs/Patch/Viewing.lhs darcs-2.0.2/src/Darcs/Patch/Viewing.lhs +--- darcs-2.0.0/src/Darcs/Patch/Viewing.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Patch/Viewing.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -17,7 +17,7 @@ + + + \begin{code} +-{-# OPTIONS -fno-warn-orphans #-} ++{-# OPTIONS_GHC -cpp -fno-warn-orphans #-} + module Darcs.Patch.Viewing ( xml_summary, summarize ) + where + +@@ -29,7 +29,7 @@ + import FastPackedString ( nullPS, linesPS ) + import FileName ( FileName, fp2fn, fn2fp ) + import Printer ( Doc, empty, vcat, +- text, blueText, ++ text, blueText, Color(Cyan,Magenta), lineColor, + minus, plus, ($$), (<+>), (<>), + prefix, renderString, + userchunkPS, +@@ -127,8 +127,8 @@ + post = take numpost $ drop (max 0 $ l+length o-1) cleanedls + in blueText "hunk" <+> formatFileName OldFormat f <+> text (show l) + $$ prefix " " (vcat $ map userchunkPS pre) +- $$ prefix "-" (vcat $ map userchunkPS o) +- $$ prefix "+" (vcat $ map userchunkPS n) ++ $$ lineColor Magenta (prefix "-" (vcat $ map userchunkPS o)) ++ $$ lineColor Cyan (prefix "+" (vcat $ map userchunkPS n)) + $$ prefix " " (vcat $ map userchunkPS post) + coolContextHunk _ _ _ _ = impossible + \end{code} +diff -ruN darcs-2.0.0/src/Darcs/Patch.lhs darcs-2.0.2/src/Darcs/Patch.lhs +--- darcs-2.0.0/src/Darcs/Patch.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Patch.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -41,7 +41,7 @@ + will provide some insight into how at least this physicist thinks. + + \begin{code} +-{-# OPTIONS -fno-warn-orphans #-} ++{-# OPTIONS_GHC -cpp -fno-warn-orphans #-} + #include "gadts.h" + module Darcs.Patch ( RepoPatch, Prim, Patch, RealPatch, Named, Patchy, + flattenFL, joinPatches, +diff -ruN darcs-2.0.0/src/Darcs/Population.lhs darcs-2.0.2/src/Darcs/Population.lhs +--- darcs-2.0.0/src/Darcs/Population.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Population.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -20,6 +20,7 @@ + NOTE: this documentation belongs in a ``libdarcs API'' chapter, which + currently doesn't exist. + \begin{code} ++{-# OPTIONS_GHC -cpp #-} + module Darcs.Population ( Population, patchChanges, applyToPop, + getPopFrom, + setPopState, +diff -ruN darcs-2.0.0/src/Darcs/PrintPatch.lhs darcs-2.0.2/src/Darcs/PrintPatch.lhs +--- darcs-2.0.0/src/Darcs/PrintPatch.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/PrintPatch.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -17,6 +17,7 @@ + + + \begin{code} ++{-# OPTIONS_GHC -cpp #-} + #include "gadts.h" + module Darcs.PrintPatch ( printPatch, contextualPrintPatch, + printPatchPager, printFriendly ) where +@@ -24,11 +25,9 @@ + import Darcs.Patch ( Patchy, showContextPatch, showPatch ) + import Darcs.SlurpDirectory ( Slurpy ) + import Darcs.Arguments ( DarcsFlag, showFriendly ) +-import Printer ( putDocLnWith, hPutDocLnWith ) +-import Darcs.ColourPrinter ( fancyPrinters ) +-import Darcs.Lock ( withOpenTemp ) +-import System.IO ( hFlush ) +-import Darcs.Utils ( view_file ) ++import Printer ( putDocLnWith ) ++import Darcs.ColorPrinter ( fancyPrinters ) ++import Darcs.External ( viewDocWith ) + \end{code} + + +@@ -41,11 +40,7 @@ + printPatch p = putDocLnWith fancyPrinters $ showPatch p + + printPatchPager :: Patchy p => p C(x y) -> IO () +-printPatchPager p = withOpenTemp $ \ (h,f) -> do +- hPutDocLnWith fancyPrinters h $ showPatch p +- hFlush h +- view_file f +- return () ++printPatchPager p = viewDocWith fancyPrinters $ showPatch p + + contextualPrintPatch :: Patchy p => Slurpy -> p C(x y) -> IO () + contextualPrintPatch s p = putDocLnWith fancyPrinters $ showContextPatch s p +diff -ruN darcs-2.0.0/src/Darcs/Progress.lhs darcs-2.0.2/src/Darcs/Progress.lhs +--- darcs-2.0.0/src/Darcs/Progress.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Progress.lhs 2008-06-24 01:23:12.000000000 +0000 +@@ -1,6 +1,7 @@ + % Various utility functions that do not belong anywhere else. + + \begin{code} ++{-# OPTIONS_GHC -cpp #-} + #include "gadts.h" + module Darcs.Progress ( beginTedious, endTedious, tediousSize, + debugMessage, debugFail, withoutProgress, +@@ -169,11 +170,12 @@ + mkhPutCr :: Handle -> IO (String -> IO ()) + mkhPutCr fe = do + isTerm <- hIsTerminalDevice fe ++ stdoutIsTerm <- hIsTerminalDevice stdout + return $ if isTerm then \s -> do hPutStr fe $ '\r':s++"\r" + hFlush fe + let spaces = '\r':take (length s) (repeat ' ')++"\r" + hPutStr fe spaces +- hPutStr stdout spaces ++ when stdoutIsTerm $ hPutStr stdout spaces + else \s -> when (not $ null s) $ do hPutStrLn fe s + hFlush fe + +diff -ruN darcs-2.0.0/src/Darcs/RepoPath.hs darcs-2.0.2/src/Darcs/RepoPath.hs +--- darcs-2.0.0/src/Darcs/RepoPath.hs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/RepoPath.hs 2008-06-24 01:23:12.000000000 +0000 +@@ -1,3 +1,4 @@ ++{-# OPTIONS_GHC -cpp #-} + -- Copyright (C) 2007 Eric Kow + -- + -- This program is free software; you can redistribute it and/or modify +diff -ruN darcs-2.0.0/src/Darcs/Repository/ApplyPatches.lhs darcs-2.0.2/src/Darcs/Repository/ApplyPatches.lhs +--- darcs-2.0.0/src/Darcs/Repository/ApplyPatches.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Repository/ApplyPatches.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -16,6 +16,7 @@ + % Boston, MA 02110-1301, USA. + + \begin{code} ++{-# OPTIONS_GHC -cpp #-} + #include "gadts.h" + module Darcs.Repository.ApplyPatches ( apply_patches, apply_patches_with_feedback ) where + +diff -ruN darcs-2.0.0/src/Darcs/Repository/Checkpoint.lhs darcs-2.0.2/src/Darcs/Repository/Checkpoint.lhs +--- darcs-2.0.0/src/Darcs/Repository/Checkpoint.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Repository/Checkpoint.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -21,6 +21,7 @@ + There should be a discussion of checkpoints here. + + \begin{code} ++{-# OPTIONS_GHC -cpp #-} + module Darcs.Repository.Checkpoint ( get_checkpoint, get_checkpoint_by_default, + identify_checkpoint, + write_checkpoint, write_recorded_checkpoint, +@@ -32,7 +33,7 @@ + import System.IO.Unsafe ( unsafeInterleaveIO ) + import Data.Maybe ( listToMaybe, catMaybes ) + import Darcs.Hopefully ( hopefully, info ) +-import FastPackedString ( PackedString, packString, nullPS ) ++import FastPackedString ( PackedString, nilPS, nullPS ) + + import Darcs.Lock ( withTempDir, writeDocBinFile ) + import Darcs.SlurpDirectory ( Slurpy, empty_slurpy, mmap_slurp, ) +@@ -58,6 +59,7 @@ + import Darcs.Repository.Prefs ( filetype_function ) + import Darcs.Utils ( catchall ) + import Darcs.FilePathUtils ( absolute_dir ) ++import Darcs.Global ( darcsdir ) + import Printer ( Doc, ($$), empty ) + #include "impossible.h" + import Darcs.Sealed ( Sealed(Sealed), FlippedSeal(..), unsafeUnseal, liftSM ) +@@ -75,15 +77,15 @@ + read_checkpoints :: String -> IO [(PatchInfo, Maybe Slurpy)] + read_checkpoints d = do + realdir <- absolute_dir d +- pistr <- fetchFilePS (realdir++"/_darcs/checkpoints/inventory") Uncachable +- `catchall` (return $ packString "") ++ pistr <- fetchFilePS (realdir++"/"++darcsdir++"/checkpoints/inventory") Uncachable ++ `catchall` return nilPS + pis <- return $ reverse $ read_patch_ids pistr + slurpies <- sequence $ map (fetch_checkpoint realdir) pis + return $ zip pis slurpies + where fetch_checkpoint r pinfo = + unsafeInterleaveIO $ do + pstr <- gzFetchFilePS +- (r++"/_darcs/checkpoints/"++make_filename pinfo) Cachable ++ (r++"/"++darcsdir++"/checkpoints/"++make_filename pinfo) Cachable + case fst `fmap` readPatch pstr of + Nothing -> return Nothing + Just (Sealed p) -> return $ apply_to_slurpy (p :: (Named Patch)) empty_slurpy +@@ -101,8 +103,8 @@ + identify_checkpoint :: RepoPatch p => Repository p -> IO (Maybe PatchInfo) + identify_checkpoint repository@(Repo r _ _ _) = do + pis <- (map info . catMaybes . mapRL lastRL) `liftSM` read_repo repository +- pistr <- fetchFilePS (r++"/_darcs/checkpoints/inventory") Uncachable +- `catchall` (return $ packString "") ++ pistr <- fetchFilePS (r++"/"++darcsdir++"/checkpoints/inventory") Uncachable ++ `catchall` return nilPS + return $ listToMaybe $ filter (`elem` pis) $ reverse $ read_patch_ids pistr + where lastRL = headFL . reverseRL + headFL (x:>:_) = Just x +@@ -115,7 +117,7 @@ + Nothing -> return Nothing + Just pinfo -> (fmap unsafeUnseal . fmap fst . readPatch) `fmap` + gzFetchFilePS +- (r++"/_darcs/checkpoints/"++make_filename pinfo) Cachable ++ (r++"/"++darcsdir++"/checkpoints/"++make_filename pinfo) Cachable + + format_inv :: [PatchInfo] -> Doc + format_inv [] = empty +@@ -150,10 +152,10 @@ + + write_checkpoint_patch :: RepoPatch p => Named p -> IO () + write_checkpoint_patch p = +- do createDirectoryIfMissing False "_darcs/checkpoints" +- gzWritePatch ("_darcs/checkpoints/"++make_filename (patch2patchinfo p)) p ++ do createDirectoryIfMissing False (darcsdir++"/checkpoints") ++ gzWritePatch (darcsdir++"/checkpoints/"++make_filename (patch2patchinfo p)) p + cpi <- (map fst) `fmap` read_checkpoints "." +- writeDocBinFile "_darcs/checkpoints/inventory" ++ writeDocBinFile (darcsdir++"/checkpoints/inventory") + $ format_inv $ reverse $ patch2patchinfo p:cpi + + with_tag :: RepoPatch p => Repository p -> PatchInfo -> (IO ()) -> IO () +diff -ruN darcs-2.0.0/src/Darcs/Repository/DarcsRepo.lhs darcs-2.0.2/src/Darcs/Repository/DarcsRepo.lhs +--- darcs-2.0.0/src/Darcs/Repository/DarcsRepo.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Repository/DarcsRepo.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -1,4 +1,4 @@ +-% Copyright (C) 2002-2005 David Roundy ++% Copyright (C) 2002-2005,2007-2008 David Roundy + % + % This program is free software; you can redistribute it and/or modify + % it under the terms of the GNU General Public License as published by +@@ -46,20 +46,21 @@ + interpretation of the stored patches in this repository. + + \begin{code} ++{-# OPTIONS_GHC -cpp -fglasgow-exts #-} + #include "gadts.h" + module Darcs.Repository.DarcsRepo ( write_inventory, write_inventory_and_patches, + add_to_inventory, add_to_tentative_pristine, + add_to_tentative_inventory, remove_from_tentative_inventory, + finalize_tentative_changes, finalize_pristine_changes, + revert_tentative_changes, +- read_repo, ++ read_repo, write_and_read_patch, + copy_patches + ) where + + import System.Directory ( doesDirectoryExist ) + import Workaround ( renameFile, createDirectoryIfMissing ) + import Darcs.Utils ( clarify_errors ) +-import Darcs.Progress ( beginTedious, endTedious, finishedOneIO ) ++import Darcs.Progress ( debugMessage, beginTedious, endTedious, finishedOneIO ) + import Darcs.FilePathUtils ( absolute_dir ) + import System.IO ( hPutStrLn, stderr ) + import System.IO.Unsafe ( unsafeInterleaveIO ) +@@ -68,7 +69,7 @@ + patchInfoAndPatch, info, + actually, hopefully, unavailable, n2pia ) + import Darcs.SignalHandler ( withSignalsBlocked ) +-import FastPackedString ( PackedString, packString, gzReadFilePS, ++import FastPackedString ( PackedString, packString, nilPS, gzReadFilePS, + readFilePS, + breakOnPS, nullPS ) + import Darcs.SlurpDirectory ( Slurpy, empty_slurpy ) +@@ -92,6 +93,7 @@ + import Darcs.Flags ( DarcsFlag( NoCompress ) ) + import Darcs.Patch.Depends ( slightly_optimize_patchset, commute_to_end, deep_optimize_patchset ) + import Darcs.Repository.Pristine ( identifyPristine, applyPristine ) ++import Darcs.Global ( darcsdir ) + import Darcs.Utils ( catchall ) + import Darcs.Progress ( progressFL ) + import Printer ( text, (<>), Doc, ($$), empty ) +@@ -110,9 +112,21 @@ + do let writeFun = if NoCompress `elem` opts + then writePatch + else gzWritePatch +- pname = "_darcs/patches/"++make_filename (patch2patchinfo p) ++ pname = darcsdir++"/patches/"++make_filename (patch2patchinfo p) + writeFun pname p + return pname ++ ++write_and_read_patch :: RepoPatch p => [DarcsFlag] -> PatchInfoAnd p C(x y) ++ -> IO (PatchInfoAnd p C(x y)) ++write_and_read_patch opts p = do fn <- write_patch opts $ hopefully p ++ unsafeInterleaveIO $ parse fn ++ where parse fn = do debugMessage ("Reading patch file: "++ fn) ++ ps <- gzReadFilePS fn ++ Sealed pp <- case readPatch ps of ++ Just (x,_) -> return x ++ Nothing -> fail ("Couldn't parse patch file "++fn) ++ return $ n2pia $ unsafeCoerceP pp ++ + \end{code} + + \begin{code} +@@ -129,20 +143,20 @@ + -- out the entire inventory, including the parts that you haven't + -- changed... + write_inventory dir ps = withSignalsBlocked $ do +- createDirectoryIfMissing False (dir++"/_darcs/inventories") ++ createDirectoryIfMissing False (dir++"/"++darcsdir++"/inventories") + simply_write_inventory "inventory" dir $ slightly_optimize_patchset ps + + simply_write_inventory :: RepoPatch p => String -> FilePath -> PatchSet p C(x) -> IO () + simply_write_inventory name dir NilRL = +- writeBinFile (dir++"/_darcs/"++name) "" ++ writeBinFile (dir++"/"++darcsdir++"/"++name) "" + simply_write_inventory name dir (ps:<:NilRL) = do +- writeDocBinFile (dir++"/_darcs/"++name) $ format_inventory $ mapFL info $ reverseRL ps ++ writeDocBinFile (dir++"/"++darcsdir++"/"++name) $ format_inventory $ mapFL info $ reverseRL ps + simply_write_inventory _ _ (NilRL:<:_) = + fail $ "Bug in simply_write_inventory, please report!" + simply_write_inventory name dir (ps:<:pss) = do + tagname <- return $ make_filename $ last $ mapRL info ps + simply_write_inventory ("inventories/"++tagname) dir pss +- writeDocBinFile (dir++"/_darcs/"++name) $ text "Starting with tag:" ++ writeDocBinFile (dir++"/"++darcsdir++"/"++name) $ text "Starting with tag:" + $$ format_inventory (mapFL info $ reverseRL ps) + + write_inventory_and_patches :: RepoPatch p => [DarcsFlag] -> PatchSet p C(x) -> IO () +@@ -151,22 +165,30 @@ + + add_to_inventory :: FilePath -> [PatchInfo] -> IO () + add_to_inventory dir pinfos = +- appendDocBinFile (dir++"/_darcs/inventory") $ text "\n" <> pidocs pinfos ++ appendDocBinFile (dir++"/"++darcsdir++"/inventory") $ text "\n" <> pidocs pinfos + where + pidocs [] = text "" + pidocs (p:ps) = showPatchInfo p $$ pidocs ps + +-add_to_tentative_inventory :: RepoPatch p => [DarcsFlag] -> Named p C(x y) -> IO FilePath ++add_to_tentative_inventory :: forall p C(x y). RepoPatch p => [DarcsFlag] -> Named p C(x y) -> IO FilePath + add_to_tentative_inventory opts p = +- do appendDocBinFile ("_darcs/tentative_inventory") $ text "\n" ++ do appendDocBinFile (darcsdir++"/tentative_inventory") $ text "\n" + <> showPatchInfo (patch2patchinfo p) ++ when (is_tag $ patch2patchinfo p) $ ++ do debugMessage "Optimizing the tentative inventory, since we're adding a tag." ++ realdir <- absolute_dir "." ++ let k = "Reading tentative inventory" ++ beginTedious k ++ Sealed ps <- read_repo_private k opts realdir "tentative_inventory" ++ :: IO (SealedPatchSet p) ++ simply_write_inventory "tentative_inventory" "." $ slightly_optimize_patchset ps + write_patch opts p + + add_to_tentative_pristine :: Effect p => p C(x y) -> IO () + add_to_tentative_pristine p = + do -- Sealed p <- (fst . fromJust . readPatchCarefully) `fmap` gzReadFilePS fp +- appendDocBinFile ("_darcs/tentative_pristine") $ showPatch (effect p) -- FIXME: this is inefficient! +- appendBinFile ("_darcs/tentative_pristine") "\n" ++ appendDocBinFile (darcsdir++"/tentative_pristine") $ showPatch (effect p) -- FIXME: this is inefficient! ++ appendBinFile (darcsdir++"/tentative_pristine") "\n" + + remove_from_tentative_inventory :: RepoPatch p => Bool -> [DarcsFlag] -> FL (Named p) C(x y) -> IO () + remove_from_tentative_inventory update_pristine opts to_remove = +@@ -184,11 +206,11 @@ + revert_tentative_changes + + finalize_tentative_changes :: IO () +-finalize_tentative_changes = renameFile "_darcs/tentative_inventory" "_darcs/inventory" ++finalize_tentative_changes = renameFile (darcsdir++"/tentative_inventory") (darcsdir++"/inventory") + + finalize_pristine_changes :: IO () + finalize_pristine_changes = +- do Sealed ps <- read_patches "_darcs/tentative_pristine" ++ do Sealed ps <- read_patches $ darcsdir++"/tentative_pristine" + pris <- identifyPristine + repairable $ applyPristine pris ps + where +@@ -205,16 +227,16 @@ + + revert_tentative_changes :: IO () + revert_tentative_changes = +- do cloneFile "_darcs/inventory" "_darcs/tentative_inventory" +- writeBinFile "_darcs/tentative_pristine" "" ++ do cloneFile (darcsdir++"/inventory") (darcsdir++"/tentative_inventory") ++ writeBinFile (darcsdir++"/tentative_pristine") "" + \end{code} + + \begin{code} + copy_patches :: [DarcsFlag] -> FilePath -> FilePath -> [PatchInfo] -> IO () + copy_patches opts dir out patches = do + realdir <- absolute_dir dir +- copyFilesOrUrls opts (realdir++"/_darcs/patches") (map make_filename patches) +- (out++"/_darcs/patches") Cachable ++ copyFilesOrUrls opts (realdir++"/"++darcsdir++"/patches") (map make_filename patches) ++ (out++"/"++darcsdir++"/patches") Cachable + + read_repo :: RepoPatch p => [DarcsFlag] -> String -> IO (SealedPatchSet p) + read_repo opts d = do +@@ -227,7 +249,7 @@ + + read_repo_private :: RepoPatch p => String -> [DarcsFlag] -> FilePath -> FilePath -> IO (SealedPatchSet p) + read_repo_private k opts d iname = do +- i <- fetchFilePS (d++"/_darcs/"++iname) Uncachable ++ i <- fetchFilePS (d++"/"++darcsdir++"/"++iname) Uncachable + finishedOneIO k iname + (rest,str) <- case breakOnPS '\n' i of + (swt,pistr) | swt == packString "Starting with tag:" -> +@@ -237,7 +259,7 @@ + return (seal NilRL,i) + pis <- return $ reverse $ read_patch_ids str + isdir <- doesDirectoryExist d +- let parse f = let fn = d ++ "/_darcs/patches/" ++ make_filename f ++ let parse f = let fn = d ++ "/"++darcsdir++"/patches/" ++ make_filename f + in if isdir then parse_local fn + else parse_remote fn + lift2Sealed (:<:) (return rest) (read_patches parse pis) +@@ -277,15 +299,15 @@ + read_checkpoints :: String -> IO [(PatchInfo, Maybe Slurpy)] + read_checkpoints d = do + realdir <- absolute_dir d +- pistr <- fetchFilePS (realdir++"/_darcs/checkpoints/inventory") Uncachable +- `catchall` (return $ packString "") ++ pistr <- fetchFilePS (realdir++"/"++darcsdir++"/checkpoints/inventory") Uncachable ++ `catchall` return nilPS + pis <- return $ reverse $ read_patch_ids pistr + slurpies <- sequence $ map (fetch_checkpoint realdir) pis + return $ zip pis slurpies + where fetch_checkpoint r pinfo = + unsafeInterleaveIO $ do + pstr <- gzFetchFilePS +- (r++"/_darcs/checkpoints/"++make_filename pinfo) Cachable ++ (r++"/"++darcsdir++"/checkpoints/"++make_filename pinfo) Cachable + case fst `liftM` readPatch_ pstr of + Nothing -> return Nothing + Just (Sealed p) -> return $ apply_to_slurpy p empty_slurpy +@@ -297,9 +319,9 @@ + -- only tags can be checkpoints + let pinfos = filter is_tag $ mapFL patch2patchinfo ps + unless (null pinfos) $ do +- createDirectoryIfMissing False "_darcs/checkpoints" ++ createDirectoryIfMissing False (darcsdir++"/checkpoints") + cpi <- (map fst) `liftM` read_checkpoints "." +- writeDocBinFile "_darcs/checkpoints/inventory" $ ++ writeDocBinFile (darcsdir++"/checkpoints/inventory") $ + format_inventory $ reverse $ filter (`notElem` pinfos) cpi + \end{code} + +diff -ruN darcs-2.0.0/src/Darcs/Repository/Format.lhs darcs-2.0.2/src/Darcs/Repository/Format.lhs +--- darcs-2.0.0/src/Darcs/Repository/Format.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Repository/Format.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -3,6 +3,7 @@ + % This file is licensed under the GPL, version two or later. + + \begin{code} ++{-# OPTIONS_GHC -cpp #-} + module Darcs.Repository.Format ( RepoFormat(..), RepoProperty(..), identifyRepoFormat, + create_repo_format, writeRepoFormat, + write_problem, read_problem, readfrom_and_writeto_problem, +@@ -10,8 +11,8 @@ + ) where + + import Data.List ( sort, intersperse ) +-import Data.Maybe ( isJust ) +-import Control.Monad ( liftM, msum ) ++import Data.Maybe ( isJust, catMaybes ) ++import Control.Monad ( msum ) + + import Darcs.SignalHandler ( catchNonSignal ) + import Darcs.External ( fetchFilePS, Cachable( Cachable ) ) +@@ -21,6 +22,7 @@ + import Darcs.Lock ( writeBinFile ) + import Darcs.Utils ( catchall, prettyException ) + import Darcs.Progress ( beginTedious, endTedious, finishedOneIO ) ++import Darcs.Global ( darcsdir ) + #include "impossible.h" + + data RepoProperty = Darcs1_0 | Darcs2 | HashedInventory +@@ -29,7 +31,7 @@ + + \begin{code} + df :: FilePath +-df = "_darcs/format" ++df = darcsdir++"/format" + + identifyRepoFormat :: String -> IO (Either String RepoFormat) + identifyRepoFormat repo = +@@ -40,7 +42,7 @@ + -- below is a workaround for servers that don't return a 404 on nonexistent files + rf <- if nullPS dff || isJust (findPS '<' dff) + then do finishedOneIO k "inventory" +- have_inventory <- doesRemoteFileExist (repo++"/_darcs/inventory") ++ have_inventory <- doesRemoteFileExist (repo++"/"++darcsdir++"/inventory") + case have_inventory of + Right _ -> return $ Right default_repo_format + Left e -> return $ Left $ "Not a repository: "++repo++" ("++e++")" +@@ -75,7 +77,7 @@ + -- Nothing means we can write + write_problem :: RepoFormat -> Maybe String + write_problem rf | isJust $ read_problem rf = read_problem rf +-write_problem (RF ks) = unlines `liftM` sequence (map wp ks) ++write_problem (RF ks) = unlines `fmap` justsOrNothing (map wp ks) + where wp x | all is_known x = Nothing + wp [] = impossible + wp x = Just $ unwords $ "Can't write repository format: " : +@@ -92,7 +94,7 @@ + read_problem :: RepoFormat -> Maybe String + read_problem rf | format_has Darcs1_0 rf && format_has Darcs2 rf + = Just "Invalid repositoryformat: format 2 is incompatible with format 1" +-read_problem (RF ks) = unlines `liftM` sequence (map rp ks) ++read_problem (RF ks) = unlines `fmap` justsOrNothing (map rp ks) + where rp x | any is_known x = Nothing + rp [] = impossible + rp x = Just $ unwords $ +@@ -103,6 +105,12 @@ + + known_properties :: [RepoProperty] + known_properties = [Darcs1_0, Darcs2, HashedInventory] ++ ++justsOrNothing :: [Maybe x] -> Maybe [x] ++justsOrNothing mxs = ++ case catMaybes mxs of ++ [] -> Nothing ++ xs -> Just xs + \end{code} + + \begin{code} +diff -ruN darcs-2.0.0/src/Darcs/Repository/HashedIO.lhs darcs-2.0.2/src/Darcs/Repository/HashedIO.lhs +--- darcs-2.0.0/src/Darcs/Repository/HashedIO.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Repository/HashedIO.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -15,9 +15,9 @@ + % Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + \begin{code} +-{-# OPTIONS -fglasgow-exts #-} ++{-# OPTIONS_GHC -cpp -fglasgow-exts #-} + #include "gadts.h" +-module Darcs.Repository.HashedIO ( HashedIO, applyHashed, readHashFile, ++module Darcs.Repository.HashedIO ( HashedIO, applyHashed, + copyHashed, syncHashed, copyPartialsHashed, listHashedContents, + slurpHashed, hashSlurped ) where + +@@ -34,7 +34,7 @@ + findFileMtimeUsingCache, setFileMtimeUsingCache ) + import Darcs.Patch ( Patchy, apply ) + import Darcs.IO ( ReadableDirectory(..), WriteableDirectory(..) ) +-import Darcs.Flags ( DarcsFlag(VerifyHash) ) ++import Darcs.Flags ( DarcsFlag ) + import Darcs.Lock ( writeAtomicFilePS ) + import Darcs.Utils ( withCurrentDirectory ) + import Darcs.Progress ( debugMessage, beginTedious, endTedious, tediousSize, finishedOneIO, progress ) +@@ -43,13 +43,10 @@ + import FastPackedString ( PackedString, packString, unpackPS, linesPS, unlinesPS, nilPS, lengthPS ) + import SHA1 ( sha1PS ) + +-readHashFile :: Cache -> [DarcsFlag] -> String -> String -> IO (String,PackedString) +-readHashFile c opts subdir hash = ++readHashFile :: Cache -> String -> String -> IO (String,PackedString) ++readHashFile c subdir hash = + do debugMessage $ "Reading hash file "++hash++" from "++subdir++"/" +- (fn,hf) <- fetchFileUsingCache c subdir hash +- if VerifyHash `elem` opts && sha1PS hf /= hash +- then fail $ "Hash failed hash: "++ fn +- else return (fn,hf) ++ fetchFileUsingCache c subdir hash + + applyHashed :: Patchy q => Cache -> [DarcsFlag] -> String -> q C(x y) -> IO String + applyHashed c fs h p = do s <- slurpHashed c fs h +@@ -86,7 +83,6 @@ + mDoesFileExist fn = do thing <- identifyThing fn + case thing of Just (F,_) -> return True + _ -> return False +- mIsFileExecutable _ = return False + mInCurrentDirectory fn j | fn' == fp2fn "" = j + | otherwise = + case break_on_dir fn' of +@@ -142,7 +138,10 @@ + Just x -> do rmThing o + makeThing n x + mRemoveDirectory = rmThing +- mRemoveFile = rmThing ++ mRemoveFile f = do x <- mReadFilePS f ++ when (lengthPS x /= 0) $ ++ fail $ "Cannot remove non-empty file "++fn2fp f ++ rmThing f + + identifyThing :: FileName -> HashedIO r p (Maybe (ObjType,String)) + identifyThing fn | fn' == fp2fn "" = do h <- gets rootHash +@@ -168,8 +167,8 @@ + else fail "obj doesn't exist in rmThing" + + readhash :: String -> HashedIO r p PackedString +-readhash h = do HashDir _ c opts _ <- get +- z <- lift $ unsafeInterleaveIO $ readHashFile c opts "pristine.hashed" h ++readhash h = do c <- gets cache ++ z <- lift $ unsafeInterleaveIO $ readHashFile c "pristine.hashed" h + let (_,out) = z + return out + +diff -ruN darcs-2.0.0/src/Darcs/Repository/HashedRepo.lhs darcs-2.0.2/src/Darcs/Repository/HashedRepo.lhs +--- darcs-2.0.0/src/Darcs/Repository/HashedRepo.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Repository/HashedRepo.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -21,25 +21,25 @@ + documenting it. + + \begin{code} +-{-# OPTIONS -fglasgow-exts #-} ++{-# OPTIONS_GHC -cpp -fglasgow-exts #-} + #include "gadts.h" + module Darcs.Repository.HashedRepo ( revert_tentative_changes, finalize_tentative_changes, +- slurp_pristine, sync_repo, ++ slurp_pristine, sync_repo, clean_pristine, + copy_pristine, copy_partials_pristine, pristine_from_working, + apply_to_tentative_pristine, replacePristine, + add_to_tentative_inventory, remove_from_tentative_inventory, +- read_repo, ++ read_repo, write_and_read_patch, + write_tentative_inventory, copy_repo, slurp_all_but_darcs + ) where + +-import System.Directory ( getDirectoryContents, removeFile, doesFileExist ) ++import System.Directory ( getDirectoryContents, doesFileExist ) + import System.IO.Unsafe ( unsafeInterleaveIO ) + import System.IO ( stderr, hPutStrLn ) + import Data.List ( delete, (\\) ) +-import Control.Monad ( unless, when ) ++import Control.Monad ( unless ) + + import Workaround ( renameFile, createDirectoryIfMissing ) +-import Darcs.Flags ( DarcsFlag( VerifyHash ) ) ++import Darcs.Flags ( DarcsFlag ) + import Darcs.Patch.Set ( PatchSet, SealedPatchSet ) + import Darcs.FilePathUtils ( absolute_dir ) + import Darcs.Repository.Prefs ( Cache, fetchFileUsingCache, speculateFileUsingCache, writeFileUsingCache, +@@ -62,46 +62,57 @@ + import Printer ( Doc, hcat, (<>), ($$), renderString, renderPS, text, invisiblePS ) + import SHA1 ( sha1PS ) + import Darcs.External ( copyFileOrUrl, cloneFile, fetchFilePS, Cachable( Uncachable ) ) +-import Darcs.Lock ( writeBinFile, writeDocBinFile, writeAtomicFilePS, appendBinFile, appendDocBinFile ) ++import Darcs.Lock ( writeBinFile, writeDocBinFile, writeAtomicFilePS, appendBinFile, appendDocBinFile, ++ removeFileMayNotExist ) + import Darcs.Utils ( withCurrentDirectory ) + import Darcs.Progress ( beginTedious, tediousSize, endTedious, debugMessage, finishedOneIO ) + #include "impossible.h" + import Darcs.Patch.Ordered ( FL(..), RL(..), + mapRL, mapFL, lengthRL ) + import Darcs.Sealed ( Sealed(..), seal, unseal ) ++import Darcs.Global ( darcsdir ) + + revert_tentative_changes :: IO () + revert_tentative_changes = +- do cloneFile "_darcs/hashed_inventory" "_darcs/tentative_hashed_inventory" +- i <- gzReadFilePS "_darcs/hashed_inventory" +- writeBinFile "_darcs/tentative_pristine" $ "pristine:" ++ inv2pris i ++ do cloneFile (darcsdir++"/hashed_inventory") (darcsdir++"/tentative_hashed_inventory") ++ i <- gzReadFilePS (darcsdir++"/hashed_inventory") ++ writeBinFile (darcsdir++"/tentative_pristine") $ "pristine:" ++ inv2pris i + + finalize_tentative_changes :: RepoPatch p => Repository p C(r u t) -> [DarcsFlag] -> IO () + finalize_tentative_changes r opts = +- do let t = "_darcs/tentative_hashed_inventory" ++ do let t = darcsdir++"/tentative_hashed_inventory" + -- first let's optimize it... + debugMessage "Optimizing the inventory..." + ps <- read_tentative_repo r opts "." + write_tentative_inventory (extractCache r) opts ps + -- then we'll add in the pristine cache, + i <- gzReadFilePS t +- p <- gzReadFilePS "_darcs/tentative_pristine" ++ p <- gzReadFilePS $ darcsdir++"/tentative_pristine" + writeDocBinFile t $ pris2inv (inv2pris p) i + -- and rename it to its final value +- renameFile t "_darcs/hashed_inventory" +- -- then we'll remove obsolete bits of our pristine cache +- debugMessage "Cleaning out the pristine cache..." +- clean_pristine (extractCache r) opts "." "_darcs/hashed_inventory" +- -- and also clean out any global caches. +- debugMessage "Cleaning out any global caches..." +- cleanCaches (extractCache r) "pristine.hashed" ++ renameFile t $ darcsdir++"/hashed_inventory" ++ -- note: in general we can't clean the pristine cache, because a ++ -- simultaneous get might be in progress ++ ++clean_pristine :: Repository p C(r u t) -> IO () ++clean_pristine r@(Repo d opts _ _) = withCurrentDirectory d $ ++ do -- we'll remove obsolete bits of our pristine cache ++ debugMessage "Cleaning out the pristine cache..." ++ i <- gzReadFilePS (darcsdir++"/hashed_inventory") ++ hs <- listHashedContents "Cleaning pristine cache" (extractCache r) opts $ inv2pris i ++ let hashdir = darcsdir++"/pristine.hashed/" ++ fs <- filter okayHash `fmap` getDirectoryContents hashdir ++ mapM_ (removeFileMayNotExist . (hashdir++)) (fs \\ hs) ++ -- and also clean out any global caches. ++ debugMessage "Cleaning out any global caches..." ++ cleanCaches (extractCache r) "pristine.hashed" + + add_to_tentative_inventory :: RepoPatch p => Cache -> [DarcsFlag] -> PatchInfoAnd p C(x y) -> IO FilePath + add_to_tentative_inventory c opts p = + do hash <- snd `fmap` write_patch_if_necesary c opts p +- appendDocBinFile ("_darcs/tentative_hashed_inventory") $ showPatchInfo $ info p +- appendBinFile ("_darcs/tentative_hashed_inventory") $ "\nhash: " ++ hash ++ "\n" +- return $ "_darcs/patches/" ++ hash ++ appendDocBinFile (darcsdir++"/tentative_hashed_inventory") $ showPatchInfo $ info p ++ appendBinFile (darcsdir++"/tentative_hashed_inventory") $ "\nhash: " ++ hash ++ "\n" ++ return $ darcsdir++"/patches/" ++ hash + + remove_from_tentative_inventory :: RepoPatch p => Repository p C(r u t) -> [DarcsFlag] + -> FL (Named p) C(x t) -> IO () +@@ -135,13 +146,6 @@ + writeHashFile c opts subdir d = do debugMessage $ "Writing hash file to "++subdir + writeFileUsingCache c opts subdir $ renderPS d + +-readHashFile :: Cache -> [DarcsFlag] -> String -> String -> IO (String,PackedString) +-readHashFile cache opts subdir hash = +- do (fn,hf) <- fetchFileUsingCache cache subdir hash +- when (VerifyHash `elem` opts && sha1PS hf /= hash) $ +- fail $ "Hash failed hash: "++ fn +- return (fn,hf) +- + read_repo :: RepoPatch p => Repository p C(r u t) -> [DarcsFlag] -> String -> IO (PatchSet p C(r)) + read_repo repo opts d = do + realdir <- absolute_dir d +@@ -161,7 +165,7 @@ + read_repo_private :: RepoPatch p => Repository p C(r u t) -> [DarcsFlag] + -> FilePath -> FilePath -> IO (SealedPatchSet p) + read_repo_private repo opts d iname = +- do inventories <- read_inventory_private repo opts (d++"/_darcs") iname ++ do inventories <- read_inventory_private repo opts (d++"/"++darcsdir) iname + parseinvs inventories + where read_patches :: RepoPatch p => [(PatchInfo, String)] -> IO (Sealed (RL (PatchInfoAnd p) C(x))) + read_patches [] = return $ seal NilRL +@@ -179,12 +183,12 @@ + (rp is) + (createHashed h (parse i)) + speculate :: String -> [(PatchInfo, String)] -> IO () +- speculate h is = do already_got_one <- doesFileExist (d++"/_darcs/patches/"++h) ++ speculate h is = do already_got_one <- doesFileExist (d++"/"++darcsdir++"/patches/"++h) + unless already_got_one $ + mapM_ (speculateFileUsingCache (extractCache repo) "patches" . snd) is + parse :: Patchy p => PatchInfo -> String -> IO (Sealed (p C(x))) + parse i h = do debugMessage ("Reading patch file: "++ show (human_friendly i)) +- (fn,ps) <- readHashFile (extractCache repo) opts "patches" h ++ (fn,ps) <- fetchFileUsingCache (extractCache repo) "patches" h + case readPatch ps of + Just (p,_) -> return p + Nothing -> fail $ unlines ["Couldn't parse file "++fn, +@@ -199,28 +203,41 @@ + Sealed y <- unseal seal `fmap` unsafeInterleaveIO ioy + return $ seal $ f y x + ++write_and_read_patch :: RepoPatch p => Cache -> [DarcsFlag] -> PatchInfoAnd p C(x y) ++ -> IO (PatchInfoAnd p C(x y)) ++write_and_read_patch c opts p = do (i,h) <- write_patch_if_necesary c opts p ++ Sealed x <- createHashed h (parse i) ++ return $ patchInfoAndPatch i $ unsafeCoerceP x ++ where parse i h = do debugMessage ("Reading patch file: "++ show (human_friendly i)) ++ (fn,ps) <- fetchFileUsingCache c "patches" h ++ case readPatch ps of ++ Just (x,_) -> return x ++ Nothing -> fail $ unlines ["Couldn't parse patch file "++fn, ++ "which is", ++ renderString $ human_friendly i] ++ + write_tentative_inventory :: RepoPatch p => Cache -> [DarcsFlag] -> PatchSet p C(x) -> IO () + write_tentative_inventory c opts = write_either_inventory c opts "tentative_hashed_inventory" + + copy_repo :: RepoPatch p => Repository p C(r u t) -> [DarcsFlag] -> String -> IO () + copy_repo repo@(Repo outr _ _ _) opts inr = do +- createDirectoryIfMissing False (outr++"/_darcs/inventories") +- copyFileOrUrl opts (inr++"/_darcs/hashed_inventory") (outr++"/_darcs/hashed_inventory") ++ createDirectoryIfMissing False (outr++"/"++darcsdir++"/inventories") ++ copyFileOrUrl opts (inr++"/"++darcsdir++"/hashed_inventory") (outr++"/"++darcsdir++"/hashed_inventory") + Uncachable -- no need to copy anything but hashed_inventory! +- appendBinFile (outr++"/_darcs/prefs/sources") (show $ repo2cache inr `unionCaches` extractCache repo) ++ appendBinFile (outr++"/"++darcsdir++"/prefs/sources") (show $ repo2cache inr `unionCaches` extractCache repo) + debugMessage "Done copying hashed inventory." + + write_either_inventory :: RepoPatch p => Cache -> [DarcsFlag] -> String -> PatchSet p C(x) -> IO () + write_either_inventory c opts iname x = +- do createDirectoryIfMissing False "_darcs/inventories" ++ do createDirectoryIfMissing False $ darcsdir++"/inventories" + let k = "Writing inventory" + beginTedious k + tediousSize k (lengthRL x) + hsh <- write_inventory_private k c opts $ slightly_optimize_patchset x + endTedious k + case hsh of +- Nothing -> writeBinFile ("_darcs/"++iname) "" +- Just h -> gzReadFilePS ("_darcs/inventories/"++h) >>= writeAtomicFilePS ("_darcs/"++iname) ++ Nothing -> writeBinFile (darcsdir++"/"++iname) "" ++ Just h -> gzReadFilePS (darcsdir++"/inventories/"++h) >>= writeAtomicFilePS (darcsdir++"/"++iname) + + write_inventory_private :: RepoPatch p => String -> Cache -> [DarcsFlag] + -> PatchSet p C(x) -> IO (Maybe String) +@@ -257,22 +274,22 @@ + (rest,str) <- case breakOnPS '\n' i of + (swt,pistr) | swt == packString "Starting with inventory:" -> + case breakOnPS '\n' $ tailPS pistr of +- (h,thisinv) | okayHash h -> ++ (h,thisinv) | okayHash $ unpackPS h -> + do r <- unsafeInterleaveIO $ read_inventories + (extractCache repo) opts (unpackPS h) + return (r,thisinv) +- _ -> fail $ "Bad hash in " ++ d ++ "/_darcs/" ++ iname ++ _ -> fail $ "Bad hash in " ++ d ++ "/"++darcsdir++"/" ++ iname + _ -> return ([],i) + return $ reverse (read_patch_ids str) : rest + + read_inventories :: Cache -> [DarcsFlag] -> String -> IO [[(PatchInfo, String)]] + read_inventories cache opts ihash = do +- (fn,i_and_p) <- readHashFile cache opts "inventories" ihash ++ (fn,i_and_p) <- fetchFileUsingCache cache "inventories" ihash + let i = skip_pristine i_and_p + (rest,str) <- case breakOnPS '\n' i of + (swt,pistr) | swt == packString "Starting with inventory:" -> + case breakOnPS '\n' $ tailPS pistr of +- (h,thisinv) | okayHash h -> ++ (h,thisinv) | okayHash $ unpackPS h -> + do r <- unsafeInterleaveIO $ + read_inventories cache opts (unpackPS h) + return (r,thisinv) +@@ -297,18 +314,6 @@ + then Nothing + else Just (unpackPS $ tailPS h,r) + +-{- +-read_patch_ids :: (Stringalike s, ParserM m, Monad (m s)) => Bool -> m s [(PatchInfo, PackedString)] +-read_patch_ids +- = do mn <- maybe_work readPatchInfo +- case mn of +- Nothing -> return [] +- Just n -> +- do d <- read_depends +- Just p <- readPatch' want_eof +- return $ NamedP n d p +--} +- + apply_pristine :: Patchy q => Cache -> [DarcsFlag] -> String -> String -> q C(() ()) -> IO () + apply_pristine c opts d iname p = + do i <- gzReadFilePS (d++"/"++iname) +@@ -316,15 +321,7 @@ + writeDocBinFile (d++"/"++iname) $ pris2inv h i + + apply_to_tentative_pristine :: Patchy q => Cache -> [DarcsFlag] -> q C(() ()) -> IO () +-apply_to_tentative_pristine c opts p = apply_pristine c opts "." "_darcs/tentative_pristine" p +- +-clean_pristine :: Cache -> [DarcsFlag] -> String -> String -> IO () +-clean_pristine c opts d iname = +- withCurrentDirectory d $ do i <- gzReadFilePS iname +- hs <- listHashedContents "Cleaning pristine cache" c opts $ inv2pris i +- let hashdir = "_darcs/pristine.hashed/" +- fs <- filter okayHash `fmap` getDirectoryContents hashdir +- mapM_ (removeFile . (hashdir++)) (fs \\ hs) ++apply_to_tentative_pristine c opts p = apply_pristine c opts "." (darcsdir++"/tentative_pristine") p + + slurp_pristine :: Cache -> [DarcsFlag] -> String -> String -> IO Slurpy + slurp_pristine c opts d iname = do +@@ -342,7 +339,7 @@ + replacePristine :: Cache -> [DarcsFlag] -> FilePath -> IO () + replacePristine c opts d = do s <- slurp_all_but_darcs d + h <- hashSlurped c opts s +- let t = "_darcs/hashed_inventory" ++ let t = darcsdir++"/hashed_inventory" + i <- gzReadFilePS t + writeDocBinFile t $ pris2inv h i + +@@ -356,7 +353,7 @@ + endTedious k + + sync_repo :: Cache -> IO () +-sync_repo c = do i <- readFilePS "_darcs/hashed_inventory" ++sync_repo c = do i <- readFilePS $ darcsdir++"/hashed_inventory" + s <- slurp_all_but_darcs "." + beginTedious "Synchronizing pristine" + syncHashed c s $ inv2pris i +@@ -391,7 +388,7 @@ + + slurp_all_but_darcs :: FilePath -> IO Slurpy + slurp_all_but_darcs d = do s <- slurp d +- case slurp_remove (fp2fn "./_darcs") s of ++ case slurp_remove (fp2fn $ "./"++darcsdir) s of + Nothing -> return s + Just s' -> return s' + +diff -ruN darcs-2.0.0/src/Darcs/Repository/Internal.lhs darcs-2.0.2/src/Darcs/Repository/Internal.lhs +--- darcs-2.0.0/src/Darcs/Repository/Internal.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Repository/Internal.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -17,7 +17,7 @@ + % Boston, MA 02110-1301, USA. + + \begin{code} +-{-# OPTIONS -fglasgow-exts #-} ++{-# OPTIONS_GHC -cpp -fglasgow-exts #-} + #include "gadts.h" + module Darcs.Repository.Internal ( Repository(..), RepoType(..), ($-), + maybeIdentifyRepository, identifyDarcs1Repository, identifyRepositoryFor, +@@ -27,7 +27,7 @@ + withRecorded, checkPristineAgainstCwd, + get_unrecorded, get_unrecorded_unsorted, get_unrecorded_no_look_for_adds, + read_repo, sync_repo, +- prefsUrl, ++ prefsUrl, makePatchLazy, + read_pending, add_to_pending, + withRepoLock, withRepoReadLock, + withRepository, withRepositoryDirectory, withGutsOf, +@@ -39,9 +39,10 @@ + applyToWorking, patchSetToPatches, + createPristineDirectoryTree, createPartialsPristineDirectoryTree, + replacePristine, +- optimizeInventory, ++ optimizeInventory, cleanRepository, + getMarkedupFile, +- PatchSet, SealedPatchSet ++ PatchSet, SealedPatchSet, ++ setScriptsExecutable + ) where + + import Printer ( putDocLn, (<+>), text, ($$) ) +@@ -49,7 +50,8 @@ + import Data.Maybe ( isJust, isNothing ) + import Darcs.Repository.Prefs ( get_prefval ) + import Darcs.Resolution ( standard_resolution, external_resolution ) +-import System ( ExitCode(..), exitWith, system ) ++import System.Exit ( ExitCode(..), exitWith ) ++import System.Cmd ( system ) + import Darcs.External ( backupByCopying, clonePartialsTree ) + import Darcs.IO ( runTolerantly, runSilently ) + import Darcs.Repository.Pristine ( identifyPristine, nopristine, checkPristine, +@@ -64,14 +66,14 @@ + write_problem, read_problem, readfrom_and_writeto_problem ) + import System.Directory ( doesDirectoryExist, setCurrentDirectory, removeFile ) + import Control.Monad ( liftM, when, unless ) +-import Workaround ( createDirectoryIfMissing, getCurrentDirectory, renameFile ) +-import FastPackedString ( PackedString, readFilePS, gzReadFilePS, nilPS, packString ) ++import Workaround ( createDirectoryIfMissing, getCurrentDirectory, renameFile, setExecutable ) ++import FastPackedString ( PackedString, readFilePS, gzReadFilePS, nilPS, packString, takePS ) + import Darcs.Patch ( Effect, is_hunk, is_binary, description, + try_to_shrink, commuteFL ) + import Darcs.Patch.Prim ( try_shrinking_inverse ) + import Darcs.Patch.Bundle ( scan_bundle, make_bundle ) + import Darcs.SlurpDirectory ( Slurpy, slurp_unboring, mmap_slurp, co_slurp, +- slurp_has ) ++ slurp_has, list_slurpy_files ) + import Darcs.Hopefully ( PatchInfoAnd, info, n2pia, + hopefully, hopefullyM ) + import Darcs.Repository.ApplyPatches ( apply_patches ) +@@ -80,13 +82,14 @@ + remove_from_tentative_inventory, sync_repo, + copy_pristine, copy_partials_pristine, slurp_pristine, + apply_to_tentative_pristine, pristine_from_working, +- write_tentative_inventory, +- add_to_tentative_inventory, read_repo, +- replacePristine ) ++ write_tentative_inventory, write_and_read_patch, ++ add_to_tentative_inventory, read_repo, clean_pristine, ++ replacePristine, slurp_all_but_darcs ) + import qualified Darcs.Repository.DarcsRepo as DarcsRepo + import Darcs.Flags ( DarcsFlag(AnyOrder, Boring, LookForAdds, Verbose, Quiet, + MarkConflicts, AllowConflicts, NoUpdateWorking, +- RepoDir, WorkDir, UMask, Test, LeaveTestDir), ++ RepoDir, WorkDir, UMask, Test, LeaveTestDir, ++ SetScriptsExecutable, DryRun), + want_external_merge ) + import Darcs.Patch.Ordered ( FL(..), RL(..), EqCheck(..), unsafeCoerceP, + (:\/:)(..), (:/\:)(..), (:>)(..), +@@ -122,11 +125,12 @@ + withTempDir, withPermDir ) + import Darcs.Sealed ( Sealed(Sealed), mapSeal, unsafeUnseal, liftSM, seal ) + import Darcs.Repository.InternalTypes( Repository(..), RepoType(..) ) ++import Darcs.Global ( darcsdir ) + #include "impossible.h" + + maybeIdentifyRepository :: [DarcsFlag] -> String -> IO (Either String (Repository p)) + maybeIdentifyRepository opts "." = +- do darcs <- doesDirectoryExist "_darcs" ++ do darcs <- doesDirectoryExist darcsdir + rf_or_e <- identifyRepoFormat "." + here <- absolute_dir "." + case rf_or_e of +@@ -238,7 +242,7 @@ + slurp_recorded :: RepoPatch p => Repository p -> IO Slurpy + slurp_recorded (Repo dir opts rf (DarcsRepository _ c)) + | format_has HashedInventory rf = +- HashedRepo.slurp_pristine c opts dir "_darcs/hashed_inventory" ++ HashedRepo.slurp_pristine c opts dir $ darcsdir++"/hashed_inventory" + slurp_recorded repository@(Repo dir _ _ (DarcsRepository p _)) = do + mc <- withCurrentDirectory dir $ slurpPristine p + case mc of (Just slurpy) -> return slurpy +@@ -257,7 +261,7 @@ + return (cur, unrec) + + pendingName :: RepoType p -> String +-pendingName (DarcsRepository _ _) = "_darcs/patches/pending" ++pendingName (DarcsRepository _ _) = darcsdir++"/patches/pending" + + read_pending :: RepoPatch p => Repository p -> IO (FL Prim) + read_pending (Repo r _ _ tp) = +@@ -276,7 +280,7 @@ + + read_pendingfile :: String -> IO (FL Prim) + read_pendingfile name = do +- pend <- gzReadFilePS name `catchall` return (packString "") ++ pend <- gzReadFilePS name `catchall` return nilPS + case readPrims pend of + Sealed p -> return p + +@@ -361,16 +365,21 @@ + return $ seal ps + | otherwise = DarcsRepo.read_repo opts r + ++makePatchLazy :: RepoPatch p => Repository p -> PatchInfoAnd p -> IO (PatchInfoAnd p) ++makePatchLazy (Repo r opts rf (DarcsRepository _ c)) p ++ | format_has HashedInventory rf = withCurrentDirectory r $ HashedRepo.write_and_read_patch c opts p ++ | otherwise = withCurrentDirectory r $ DarcsRepo.write_and_read_patch opts p ++ + sync_repo :: Repository p -> IO () + sync_repo (Repo r _ rf (DarcsRepository _ c)) + | format_has HashedInventory rf = withCurrentDirectory r $ HashedRepo.sync_repo c + sync_repo (Repo r _ _ (DarcsRepository p _)) = withCurrentDirectory r $ syncPristine p + + prefsUrl :: Repository p -> String +-prefsUrl (Repo r _ _ (DarcsRepository _ _)) = r ++ "/_darcs/prefs" ++prefsUrl (Repo r _ _ (DarcsRepository _ _)) = r ++ "/"++darcsdir++"/prefs" + + unrevertUrl :: Repository p -> String +-unrevertUrl (Repo r _ _ (DarcsRepository _ _)) = r ++ "/_darcs/patches/unrevert" ++unrevertUrl (Repo r _ _ (DarcsRepository _ _)) = r ++ "/"++darcsdir++"/patches/unrevert" + + applyToWorking :: Patchy p => Repository p1 -> [DarcsFlag] -> p -> IO () + applyToWorking (Repo r _ _ (DarcsRepository _ _)) opts patch = +@@ -480,7 +489,7 @@ + "use the --mark-conflicts or --allow-conflicts options to "++cmd++"\n"++ + "These can set as defaults by adding\n"++ + " "++cmd++" mark-conflicts\n"++ +- "to _darcs/prefs/defaults in the target repo. " ++ "to "++darcsdir++"/prefs/defaults in the target repo. " + + check_unrecorded_conflicts :: forall p. RepoPatch p => [DarcsFlag] -> FL (Named p) -> IO Bool + check_unrecorded_conflicts opts _ | NoUpdateWorking `elem` opts = return False +@@ -509,6 +518,8 @@ + + tentativelyAddPatch_ :: RepoPatch p => UpdatePristine -> Repository p -> [DarcsFlag] + -> PatchInfoAnd p -> IO () ++tentativelyAddPatch_ _ _ opts _ ++ | DryRun `elem` opts = bug "tentativelyAddPatch_ called when --dry-run is specified" + tentativelyAddPatch_ up r@(Repo dir _ rf (DarcsRepository _ c)) opts p = + withCurrentDirectory dir $ + do decideHashedOrNormal rf $ HvsO { +@@ -527,7 +538,9 @@ + old = DarcsRepo.add_to_tentative_pristine p} + + tentativelyAddToPending :: forall p. RepoPatch p => Repository p -> [DarcsFlag] -> FL Prim -> IO () +-tentativelyAddToPending (Repo _ opts _ _) _ _ | NoUpdateWorking `elem` opts = return () ++tentativelyAddToPending (Repo _ opts _ _) _ _ ++ | NoUpdateWorking `elem` opts = return () ++ | DryRun `elem` opts = bug "tentativelyAddToPending called when --dry-run is specified" + tentativelyAddToPending (Repo dir _ _ rt) _ patch = + withCurrentDirectory dir $ do + let pn = pendingName rt +@@ -594,6 +607,8 @@ + make_new_pending repository new_pending + + finalizeRepositoryChanges :: RepoPatch p => Repository p -> IO () ++finalizeRepositoryChanges (Repo _ opts _ _) ++ | DryRun `elem` opts = bug "finalizeRepositoryChanges called when --dry-run specified" + finalizeRepositoryChanges repository@(Repo dir opts rf _) + | format_has HashedInventory rf = + withCurrentDirectory dir $ do debugMessage "Considering whether to test..." +@@ -621,6 +636,7 @@ + Just testcode -> + withTentative repository (wd "testing") $ \_ -> + do putInfo "Running test...\n" ++ when (SetScriptsExecutable `elem` opts) setScriptsExecutable + ec <- system testcode + if ec == ExitSuccess + then putInfo "Test ran successfully.\n" +@@ -629,6 +645,8 @@ + where wd = if LeaveTestDir `elem` opts then withPermDir else withTempDir + + revertRepositoryChanges :: RepoPatch p => Repository p -> IO () ++revertRepositoryChanges (Repo _ opts _ _) ++ | DryRun `elem` opts = bug "revertRepositoryChanges called when --dry-run is specified" + revertRepositoryChanges r@(Repo dir opts rf dr@(DarcsRepository _ _)) = + withCurrentDirectory dir $ + do removeFileMayNotExist (pendingName dr ++ ".tentative") +@@ -659,8 +677,10 @@ + do Repo dir opts rf rt <- identifyDarcs1Repository opts1 url + let rt' = case rt of DarcsRepository t c -> DarcsRepository t c + if format_has Darcs2 rf +- then job (Repo dir opts rf rt' :: Repository (FL RealPatch)) +- else job (Repo dir opts rf rt :: Repository Patch) ++ then do debugMessage $ "Identified darcs-2 repo: " ++ dir ++ job (Repo dir opts rf rt' :: Repository (FL RealPatch)) ++ else do debugMessage $ "Identified darcs-1 repo: " ++ dir ++ job (Repo dir opts rf rt :: Repository Patch) + + ($-) :: ((forall p. RepoPatch p => Repository p -> IO a) -> IO a) + -> (forall p. RepoPatch p => Repository p -> IO a) -> IO a +@@ -672,12 +692,13 @@ + do case write_problem rf of + Nothing -> return () + Just err -> fail err +- let name = "./_darcs/lock" ++ let name = "./"++darcsdir++"/lock" + wu = case (getUMask opts) of + Nothing -> id + Just u -> withUMask u +- wu $ withLock name +- (revertRepositoryChanges repository >> job repository) ++ wu $ if DryRun `elem` opts ++ then job repository ++ else withLock name (revertRepositoryChanges repository >> job repository) + + withRepoReadLock :: [DarcsFlag] -> (forall p. RepoPatch p => Repository p -> IO a) -> IO a + withRepoReadLock opts job = +@@ -685,13 +706,12 @@ + do case write_problem rf of + Nothing -> return () + Just err -> fail err +- let name = "./_darcs/lock" ++ let name = "./"++darcsdir++"/lock" + wu = case (getUMask opts) of Nothing -> id + Just u -> withUMask u +- if format_has HashedInventory rf +- then wu $ job repository +- else wu $ withLock name +- (revertRepositoryChanges repository >> job repository) ++ wu $ if format_has HashedInventory rf || DryRun `elem` opts ++ then job repository ++ else withLock name (revertRepositoryChanges repository >> job repository) + \end{code} + + \begin{code} +@@ -743,6 +763,12 @@ + old = DarcsRepo.write_inventory r $ deep_optimize_patchset ps + } + ++cleanRepository :: RepoPatch p => Repository p -> IO () ++cleanRepository repository@(Repo _ _ rf _) = ++ decideHashedOrNormal rf $ ++ HvsO { hashed = HashedRepo.clean_pristine repository, ++ old = return () } ++ + replacePristine :: Repository p -> FilePath -> IO () + replacePristine (Repo r opts rf (DarcsRepository pris c)) d + | format_has HashedInventory rf = withCurrentDirectory r $ HashedRepo.replacePristine c opts d +@@ -752,7 +778,7 @@ + createPristineDirectoryTree repo@(Repo r opts rf (DarcsRepository pris c)) reldir + | format_has HashedInventory rf = + do createDirectoryIfMissing True reldir +- withCurrentDirectory reldir $ HashedRepo.copy_pristine c opts r "_darcs/hashed_inventory" ++ withCurrentDirectory reldir $ HashedRepo.copy_pristine c opts r (darcsdir++"/hashed_inventory") + | otherwise = + do dir <- absolute_dir reldir + done <- withCurrentDirectory r $ easyCreatePristineDirectoryTree pris dir +@@ -765,7 +791,7 @@ + | format_has HashedInventory rf = + do createDirectoryIfMissing True dir + withCurrentDirectory dir $ +- HashedRepo.copy_partials_pristine c opts r "_darcs/hashed_inventory" prefs ++ HashedRepo.copy_partials_pristine c opts r (darcsdir++"/hashed_inventory") prefs + createPartialsPristineDirectoryTree r@(Repo rdir _ _ (DarcsRepository pris _)) prefs dir + = withCurrentDirectory rdir $ + do done <- easyCreatePartialsPristineDirectoryTree prefs pris dir +@@ -800,11 +826,11 @@ + Repository p -> ((FilePath -> IO a) -> IO a) -> (FilePath -> IO a) -> IO a + withTentative (Repo dir opts rf (DarcsRepository _ c)) mk_dir f + | format_has HashedInventory rf = +- mk_dir $ \d -> do HashedRepo.copy_pristine c opts dir "_darcs/tentative_pristine" ++ mk_dir $ \d -> do HashedRepo.copy_pristine c opts dir (darcsdir++"/tentative_pristine") + f d + withTentative repository@(Repo dir opts _ _) mk_dir f = + withRecorded repository mk_dir $ \d -> +- do ps <- read_patches (dir ++ "/_darcs/tentative_pristine") ++ do ps <- read_patches (dir ++ "/"++darcsdir++"/tentative_pristine") + apply opts $ joinPatches ps + f d + where read_patches :: FilePath -> IO (FL p) +@@ -828,3 +854,21 @@ + Nothing -> (f, [(packString "Error reading a patch!",None)]) + do_mark_all [] (f, mk) = (f, mk) + \end{code} ++ ++\begin{code} ++-- | Sets scripts in or below the current directory executable. A script is any file that starts ++-- with the bytes '#!'. This is used sometimes for --set-scripts-executable, but at other times ++-- --set-scripts-executable is handled by the hunk patch case of applyFL. ++setScriptsExecutable :: IO () ++setScriptsExecutable = do ++ debugMessage "Making scripts executable" ++ myname <- getCurrentDirectory ++ c <- list_slurpy_files `fmap` (HashedRepo.slurp_all_but_darcs myname) ++ let setExecutableIfScript f = ++ do contents <- readFilePS f ++ when (takePS 2 contents == packString "#!") $ do ++ debugMessage ("Making executable: " ++ f) ++ setExecutable f True ++ mapM_ setExecutableIfScript c ++\end{code} ++ +diff -ruN darcs-2.0.0/src/Darcs/Repository/InternalTypes.lhs darcs-2.0.2/src/Darcs/Repository/InternalTypes.lhs +--- darcs-2.0.0/src/Darcs/Repository/InternalTypes.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Repository/InternalTypes.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -15,7 +15,7 @@ + % Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + \begin{code} +-{-# OPTIONS -fglasgow-exts #-} ++{-# OPTIONS_GHC -cpp -fglasgow-exts #-} + #include "gadts.h" + module Darcs.Repository.InternalTypes ( Repository(..), RepoType(..), Pristine(..) + , extractCache +diff -ruN darcs-2.0.0/src/Darcs/Repository/Motd.lhs darcs-2.0.2/src/Darcs/Repository/Motd.lhs +--- darcs-2.0.0/src/Darcs/Repository/Motd.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Repository/Motd.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -21,6 +21,7 @@ + import Control.Monad ( unless ) + import Darcs.Flags ( DarcsFlag( Quiet ) ) + import Darcs.External ( fetchFilePS, Cachable(..) ) ++import Darcs.Global ( darcsdir ) + import FastPackedString ( nullPS, nilPS, hPutPS, PackedString ) + import Darcs.Utils ( catchall ) + import System.IO ( stdout ) +@@ -33,7 +34,7 @@ + + \begin{code} + get_motd :: String -> IO PackedString +-get_motd repo = fetchFilePS (repo++"/_darcs/prefs/motd") (MaxAge 600) ++get_motd repo = fetchFilePS (repo++"/"++darcsdir++"/prefs/motd") (MaxAge 600) + `catchall` return nilPS + + show_motd :: [DarcsFlag] -> String -> IO () +diff -ruN darcs-2.0.0/src/Darcs/Repository/Prefs.lhs darcs-2.0.2/src/Darcs/Repository/Prefs.lhs +--- darcs-2.0.0/src/Darcs/Repository/Prefs.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Repository/Prefs.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -17,7 +17,7 @@ + + + \begin{code} +-{-# OPTIONS -fglasgow-exts #-} ++{-# OPTIONS_GHC -cpp -fglasgow-exts #-} + #include "gadts.h" + module Darcs.Repository.Prefs ( add_to_preflist, get_preflist, set_preflist, + get_global, +@@ -45,12 +45,11 @@ + import Text.Regex ( Regex, mkRegex, matchRegex, ) + import Data.Char ( toUpper ) + import Data.Maybe ( isNothing, isJust, catMaybes, listToMaybe ) +-import Data.List ( nub ) +-import System ( getEnv ) ++import Data.List ( nub, isPrefixOf ) ++import System.Environment ( getEnv ) + +-import Stringalike ( Stringalike, sal_length ) + import Darcs.SlurpDirectory ( undefined_time ) +-import Darcs.Flags ( DarcsFlag( NoSetDefault, DryRun, Ephemeral, NoCompress ) ) ++import Darcs.Flags ( DarcsFlag( NoSetDefault, DryRun, Ephemeral, NoCompress, RemoteRepo ) ) + import Darcs.Utils ( withCurrentDirectory, catchall, stripCr ) + import Darcs.IO ( ReadableDirectory(..), WriteableDirectory(..) ) + import FileName ( fp2fn ) +@@ -64,6 +63,7 @@ + import Crypt.SHA256 ( sha256sum ) + import FastPackedString ( PackedString, nilPS, unpackPS, gzWriteFilePS, lengthPS, + linesPS, dropPS ) ++import Darcs.Global ( darcsdir ) + \end{code} + + \section{prefs} +@@ -142,6 +142,9 @@ + default_boring = set_preflist "boring" $ "# Boring file regexps:" : + ["\\.hi$", "\\.hi-boot$", "\\.o-boot$", -- Haskell interfaces + "\\.o$","\\.o\\.cmd$", -- object files ++ "\\.p_hi$", "\\.p_o$", -- profiling Haskell ++ "\\.installed-pkg-config", "\\.setup-config", ++ "\\.setup-config^dist(/|$)", -- Cabal intermediates + "# *.ko files aren't boring by default because they might", + "# be Korean translations rather than kernel modules.", + "# \\.ko$", +@@ -152,18 +155,26 @@ + "(^|/)RCS($|/)", ",v$", -- RCS + "(^|/)\\.svn($|/)", -- Subversion admin directory + "(^|/)\\.hg($|/)", -- Mercurial ++ "(^|/)\\.git($|/)", -- Git + "\\.bzr$", "(^|/)SCCS($|/)", -- bzr, SCCS +- "~$", -- Emacs (and other) backups +- "(^|/)_darcs($|/)", -- darcs admin directory ++ "~$", -- Emacs (and other) backups ++ "(^|/)"++darcsdir++"($|/)", "(^|/)\\.darcsrepo($|/)", -- darcs admin directory + "\\.bak$","\\.BAK$", -- editor backups(?) + "\\.orig$", "\\.rej$", -- patch originals and rejects + "(^|/)vssver\\.scc$", +- "\\.swp$","(^|/)MT($|/)", ++ "\\.swp$","(^|/)MT($|/)", + "(^|/)\\{arch\\}($|/)","(^|/).arch-ids($|/)", -- GNU Arch + "(^|/),","\\.prof$","(^|/)\\.DS_Store$", + "(^|/)BitKeeper($|/)","(^|/)ChangeSet($|/)", + -- Python, Emacs, Java byte code: + "\\.py[co]$", "\\.elc$","\\.class$", ++ -- Compiled ZSH configuration files ++ "\\.zwc$", ++ -- Gentoo tools can leave revdep files behind ++ "\\.revdep-rebuild.*", ++ -- X server spam ++ "\\..serverauth.*", ++ -- Image spam + "\\#", "(^|/)Thumbs\\.db$", + -- autotools stuff: + "(^|/)autom4te\\.cache($|/)", "(^|/)config\\.(log|status)$", +@@ -181,7 +192,10 @@ + -- WAF files. ( http://code.google.com/p/waf/ ) + "(^|/)\\.waf-[[:digit:].]+-[[:digit:]]+($|/)", + "(^|/)\\.lock-wscript$", +- "^\\.darcs-temp-mail$" -- darcs editor file ++ "^\\.darcs-temp-mail$", -- darcs editor file ++ -- Microsoft Web Expression, Visual Studio metadata directories ++ "\\_vti_cnf$", ++ "\\_vti_pvt$" + ] + + darcsdir_filter :: [FilePath] -> [FilePath] +@@ -192,16 +206,14 @@ + is_darcsdir "" = True + is_darcsdir ".." = True + is_darcsdir "../" = True +-is_darcsdir "_darcs" = True +-is_darcsdir ('_':'d':'a':'r':'c':'s':'/':_) = True +-is_darcsdir _ = False ++is_darcsdir fp = darcsdir `isPrefixOf` fp + boring_file_filter :: IO ([FilePath] -> [FilePath]) + + get_global f = (getEnv "HOME" >>= get_preffile.(++("/.darcs/"++f))) + `catchall` return [] + + boring_file_filter = do +- borefile <- def_prefval "boringfile" "_darcs/prefs/boring" ++ borefile <- def_prefval "boringfile" (darcsdir ++ "/prefs/boring") + bores <- get_lines borefile `catchall` return [] + gbs <- get_global "boring" + return $ actual_boring_file_filter $ map mkRegex (bores++gbs) +@@ -245,7 +257,7 @@ + The \verb!_darcs/prefs/binaries! file may contain a list of regular + expressions describing files that should be treated as binary files rather + than text files. Darcs automatically treats files containing +-\verb!^Z\! or \verb!'\0'! as binary. ++\verb!^Z\! or \verb!'\0'! within the first 4096 bytes as being binary files. + You probably will want to have the binaries file under + version control. To do this you can use darcs setpref to set the value + ``binariesfile'' to the name of your desired binaries file +@@ -270,7 +282,7 @@ + + filetype_function :: IO (FilePath -> FileType) + filetype_function = do +- binsfile <- def_prefval "binariesfile" "_darcs/prefs/binaries" ++ binsfile <- def_prefval "binariesfile" (darcsdir ++ "/prefs/binaries") + bins <- get_lines binsfile `catch` + (\e-> if isDoesNotExistError e then return [] else ioError e) + gbs <- get_global "binaries" +@@ -294,10 +306,10 @@ + -- this avoids a circular dependency with Repository + prefsDirectory :: ReadableDirectory m => m String + prefsDirectory = +- do darcs <- mDoesDirectoryExist $ fp2fn "_darcs" ++ do darcs <- mDoesDirectoryExist $ fp2fn darcsdir + if darcs +- then return "_darcs/prefs/" +- else fail "Directory _darcs/ does not exist!" ++ then return $ darcsdir ++ "/prefs/" ++ else fail $ "Directory " ++ darcsdir ++ "/ does not exist!" + + withPrefsDirectory :: ReadableDirectory m => (String -> m ()) -> m () + withPrefsDirectory j = do prefs <- prefsDirectory `mplus` return "x" +@@ -358,14 +370,16 @@ + \end{code} + + \begin{code} +-defaultrepo :: FilePath -> [String] -> IO [String] +-defaultrepo fix [] = do defrepo <- get_preflist "defaultrepo" +- case defrepo of +- [r] -> return [unmake_relative fix r] +- _ -> return [] +- +-defaultrepo _ r = return r +-set_defaultrepo r opts = do doit <- if (NoSetDefault `notElem` opts && DryRun `notElem` opts) ++defaultrepo :: [DarcsFlag] -> FilePath -> [String] -> IO [String] ++defaultrepo opts fix [] = ++ case [r | RemoteRepo r <- opts] of ++ [] -> do defrepo <- get_preflist "defaultrepo" ++ case defrepo of ++ [r] -> return [unmake_relative fix r] ++ _ -> return [] ++ (r:_) -> return [unmake_relative fix r] ++defaultrepo _ _ r = return r ++set_defaultrepo r opts = do doit <- if (NoSetDefault `notElem` opts && DryRun `notElem` opts && r_is_not_tmp) + then return True + else do olddef <- + get_preflist "defaultrepo" +@@ -373,10 +387,13 @@ + when doit + (set_preflist "defaultrepo" [r]) + add_to_preflist "repos" r ++ `catchall` return () -- we don't care if this fails! ++ where ++ r_is_not_tmp = not $ r `elem` [x | RemoteRepo x <- opts] + \end{code} + + \paragraph{email} +-The \verb!_darcs/prefs/email! file is used to provide the e-mail address for your ++The \verb!_darcs/prefs/email! file is used to provide the e-mail address for your + repository that others will use when they \verb!darcs send! a patch back to you. + The contents of the file should simply be an e-mail address. + +@@ -404,12 +421,12 @@ + repo2cache :: String -> Cache + repo2cache r = Ca [Cache Repo NotWritable r] + +-okayHash :: Stringalike s => s -> Bool +-okayHash s = sal_length s == 40 || sal_length s == 64 || sal_length s == 75 ++okayHash :: String -> Bool ++okayHash s = length s == 40 || length s == 64 || length s == 75 + + takeHash :: PackedString -> Maybe (String, PackedString) + takeHash ps = do h <- listToMaybe $ linesPS ps +- guard $ okayHash h ++ guard $ okayHash $ unpackPS h + Just (unpackPS h, dropPS (lengthPS h) ps) + + checkHash :: String -> PackedString -> Bool +@@ -420,9 +437,9 @@ + + getCaches :: [DarcsFlag] -> String -> IO Cache + getCaches opts repodir = +- do here <- parsehs `fmap` get_preffile "_darcs/prefs/sources" ++ do here <- parsehs `fmap` get_preffile (darcsdir ++ "/prefs/sources") + there <- (parsehs . lines . unpackPS) `fmap` +- (gzFetchFilePS (repodir ++ "/_darcs/prefs/sources") Cachable ++ (gzFetchFilePS (repodir ++ "/" ++ darcsdir ++ "/prefs/sources") Cachable + `catchall` return nilPS) + maincache <- parsehs `fmap` get_global "sources" + thisdir <- getCurrentDirectory +@@ -442,14 +459,14 @@ + findFileMtimeUsingCache (Ca cache) subdir f = mt cache + where mt [] = return undefined_time + mt (Cache Repo Writable r:_) = (modificationTime `fmap` +- getSymbolicLinkStatus (r++"/_darcs/"++subdir++"/"++f)) ++ getSymbolicLinkStatus (r++"/"++darcsdir++"/"++subdir++"/"++f)) + `catchall` return undefined_time + mt (_:cs) = mt cs + + setFileMtimeUsingCache :: Cache -> String -> String -> EpochTime -> IO () + setFileMtimeUsingCache (Ca cache) subdir f t = st cache + where st [] = return () +- st (Cache Repo Writable r:_) = setFileTimes (r++"/_darcs/"++subdir++"/"++f) t t ++ st (Cache Repo Writable r:_) = setFileTimes (r++"/"++darcsdir++"/"++subdir++"/"++f) t t + `catchall` return () + st (_:cs) = st cs + +@@ -464,7 +481,7 @@ + if ex then return True + else cacheHasIt cs + fn Directory d = d ++ "/" ++ subdir ++ "/" ++ f +- fn Repo r = r ++ "/_darcs/" ++ subdir ++ "/" ++ f ++ fn Repo r = r ++ "/"++darcsdir++"/" ++ subdir ++ "/" ++ f + + speculateFileUsingCache :: Cache -> String -> String -> IO () + speculateFileUsingCache c sd h = do debugMessage $ "Speculating on "++h +@@ -493,7 +510,7 @@ + else copyFileOrUrl [] (fn t d) out Cachable + sfuc (_:cs) out = sfuc cs out + fn Directory d = d ++ "/" ++ subdir ++ "/" ++ f +- fn Repo r = r ++ "/_darcs/" ++ subdir ++ "/" ++ f ++ fn Repo r = r ++ "/"++darcsdir++"/" ++ subdir ++ "/" ++ f + + + data FromWhere = LocalOnly | Anywhere deriving ( Eq ) +@@ -545,7 +562,7 @@ + `catchall` return () + tryLinking _ _ = return () + fn Directory d = d ++ "/" ++ subdir ++ "/" ++ f +- fn Repo r = r ++ "/_darcs/" ++ subdir ++ "/" ++ f ++ fn Repo r = r ++ "/"++darcsdir++"/" ++ subdir ++ "/" ++ f + + createCache :: CacheType -> String -> String -> IO () + createCache Directory d subdir = createDirectoryIfMissing True (d ++ "/" ++ subdir) +@@ -570,7 +587,7 @@ + return hash + wfuc [] = debugFail $ "No location to write file `" ++ subdir ++"/"++hash ++ "'" + fn Directory d = d ++ "/" ++ subdir ++ "/" ++ hash +- fn Repo r = r ++ "/_darcs/" ++ subdir ++ "/" ++ hash ++ fn Repo r = r ++ "/"++darcsdir++"/" ++ subdir ++ "/" ++ hash + + cleanCaches :: Cache -> String -> IO () + cleanCaches (Ca cs) subdir = mapM_ cleanCache cs +diff -ruN darcs-2.0.0/src/Darcs/Repository/Pristine.lhs darcs-2.0.2/src/Darcs/Repository/Pristine.lhs +--- darcs-2.0.0/src/Darcs/Repository/Pristine.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Repository/Pristine.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -18,6 +18,7 @@ + + + \begin{code} ++{-# OPTIONS_GHC -cpp #-} + #include "gadts.h" + module Darcs.Repository.Pristine ( Pristine, flagsToPristine, nopristine, + createPristine, removePristine, identifyPristine, +@@ -49,6 +50,7 @@ + import SHA1 ( sha1PS ) + import Darcs.External ( cloneTree, cloneTreeExcept, clonePartialsTree ) + import Darcs.Repository.InternalTypes ( Pristine(..) ) ++import Darcs.Global ( darcsdir ) + #include "impossible.h" + + nopristine :: Pristine +@@ -67,7 +69,7 @@ + reallyIdentifyPristine = + do dir <- findpristine doesDirectoryExist "" + none <- findpristine doesFileExist ".none" +- hashinv <- doesFileExist "_darcs/hashed_inventory" ++ hashinv <- doesFileExist $ darcsdir++"/hashed_inventory" + hashpris <- doesDirectoryExist hashedPristineDirectory + case (dir, none, hashinv && hashpris) of + (Nothing, Nothing, False) -> return Nothing +@@ -86,13 +88,13 @@ + (True, False) -> return (Just n1) + (False, True) -> return (Just n2) + (True, True) -> fail "Multiple pristine trees." +- where n1 = "_darcs/pristine" ++ ext +- n2 = "_darcs/current" ++ ext ++ where n1 = darcsdir++"/pristine" ++ ext ++ n2 = darcsdir++"/current" ++ ext + + flagsToPristine :: [DarcsFlag] -> Pristine + flagsToPristine fs | UseFormat2 `elem` fs || UseHashedInventory `elem` fs = HashedPristine +-flagsToPristine (PristineNone : _) = NoPristine ("_darcs/" ++ pristineName ++ ".none") +-flagsToPristine (PristinePlain : _) = PlainPristine ("_darcs/" ++ pristineName) ++flagsToPristine (PristineNone : _) = NoPristine (darcsdir++"/" ++ pristineName ++ ".none") ++flagsToPristine (PristinePlain : _) = PlainPristine (darcsdir++"/" ++ pristineName) + flagsToPristine (_ : t) = flagsToPristine t + flagsToPristine [] = flagsToPristine [PristinePlain] + +@@ -108,7 +110,7 @@ + return p + + hashedPristineDirectory :: String +-hashedPristineDirectory = "_darcs/pristine.hashed" ++hashedPristineDirectory = darcsdir++"/pristine.hashed" + + removePristine :: Pristine -> IO () + removePristine (NoPristine n) = removeFile n +@@ -141,7 +143,7 @@ + + createPristineFromWorking :: Pristine -> IO () + createPristineFromWorking (NoPristine _) = return () +-createPristineFromWorking (PlainPristine n) = cloneTreeExcept ["_darcs"] "." n ++createPristineFromWorking (PlainPristine n) = cloneTreeExcept [darcsdir] "." n + createPristineFromWorking HashedPristine = + bug "HashedPristine is not implemented yet." + +@@ -161,7 +163,7 @@ + renameDirectory n nold + renameDirectory newcur n + return () +- where nold = "_darcs/" ++ pristineName ++ "-old" ++ where nold = darcsdir ++ "/" ++ pristineName ++ "-old" + replacePristine _ HashedPristine = + bug "HashedPristine is not implemented yet." + +diff -ruN darcs-2.0.0/src/Darcs/Repository.lhs darcs-2.0.2/src/Darcs/Repository.lhs +--- darcs-2.0.0/src/Darcs/Repository.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Repository.lhs 2008-06-24 01:23:12.000000000 +0000 +@@ -17,12 +17,13 @@ + % Boston, MA 02110-1301, USA. + + \begin{code} +-{-# OPTIONS -fglasgow-exts #-} ++{-# OPTIONS_GHC -cpp -fglasgow-exts #-} + #include "gadts.h" + module Darcs.Repository ( Repository, ($-), maybeIdentifyRepository, + identifyRepositoryFor, + withRepoLock, withRepoReadLock, + withRepository, withRepositoryDirectory, withGutsOf, ++ makePatchLazy, writePatchSet, + findRepository, amInRepository, amNotInRepository, + slurp_pending, replacePristine, + slurp_recorded, slurp_recorded_and_unrecorded, +@@ -36,18 +37,21 @@ + tentativelyMergePatches, considerMergeToWorking, + revertRepositoryChanges, finalizeRepositoryChanges, + copyRepository, copy_oldrepo_patches, ++ patchSetToRepository, + unrevertUrl, + applyToWorking, patchSetToPatches, + createPristineDirectoryTree, createPartialsPristineDirectoryTree, +- optimizeInventory, checkPristineAgainstCwd, ++ optimizeInventory, cleanRepository, checkPristineAgainstCwd, + getMarkedupFile, +- PatchSet, SealedPatchSet, PatchInfoAnd ++ PatchSet, SealedPatchSet, PatchInfoAnd, ++ setScriptsExecutable + ) where + + import Darcs.Repository.Internal + (Repository(..), RepoType(..), ($-), pristineFromWorking, + maybeIdentifyRepository, identifyRepositoryFor, + findRepository, amInRepository, amNotInRepository, ++ makePatchLazy, + slurp_pending, replacePristine, + slurp_recorded, slurp_recorded_and_unrecorded, + withRecorded, +@@ -63,13 +67,15 @@ + unrevertUrl, + applyToWorking, patchSetToPatches, + createPristineDirectoryTree, createPartialsPristineDirectoryTree, +- optimizeInventory, ++ optimizeInventory, cleanRepository, + getMarkedupFile, ++ setScriptsExecutable + ) + import Darcs.Repository.Prefs ( unionCaches, fetchFileUsingCache ) + import Darcs.Patch.Set ( PatchSet, SealedPatchSet ) + + import Control.Monad ( unless, when ) ++import Data.Either(Either(..)) + + import qualified Darcs.Repository.DarcsRepo as DarcsRepo + import qualified Darcs.Repository.HashedRepo as HashedRepo +@@ -92,6 +98,9 @@ + import Darcs.Sealed ( Sealed(..), unsafeUnflippedseal, unsealM ) + + import Darcs.Flags ( DarcsFlag( Quiet, Partial, Lazy, Ephemeral ) ) ++import Darcs.Global ( darcsdir ) ++#include "impossible.h" ++ + \end{code} + + \begin{code} +@@ -177,21 +186,14 @@ + copyFullRepository fromrepository@(Repo fromdir opts rffrom _) = do + copyInventory fromrepository + debugMessage "Copying prefs" +- copyFileOrUrl opts (fromdir++"/_darcs/prefs/prefs") "_darcs/prefs/prefs" (MaxAge 600) ++ copyFileOrUrl opts (fromdir++"/"++darcsdir++"/prefs/prefs") (darcsdir++"/prefs/prefs") (MaxAge 600) + `catchall` return () + debugMessage "Grabbing lock in new repository..." + withRepoLock opts $- \torepository@(Repo _ _ rfto (DarcsRepository _ c)) -> + if format_has HashedInventory rffrom && format_has HashedInventory rfto + then do debugMessage "Writing working directory contents..." + createPristineDirectoryTree torepository "." +- unless (Partial `elem` opts || Lazy `elem` opts || Ephemeral `elem` opts) $ +- do putInfo "Copying patches, to get lazy repository hit ctrl-C..." +- Sealed r <- read_repo torepository +- let peekaboo :: PatchInfoAnd p C(x y) -> IO () +- peekaboo x = case extractHash x of +- Left _ -> return () +- Right h -> fetchFileUsingCache c "patches" h >> return () +- sequence_ $ mapRL peekaboo $ progressRL "Copying patches" $ concatRL r ++ fetch_patches_if_necessary opts torepository + when (Partial `elem` opts) $ putStrLn $ + "--partial: hashed or darcs-2 repository detected, using --lazy instead" + else if format_has HashedInventory rfto +@@ -206,5 +208,49 @@ + else do read_repo torepository `unsealM` (apply_patches opts . reverseRL . concatRL) + debugMessage "Writing the pristine" + pristineFromWorking torepository +- where putInfo = when (not $ Quiet `elem` opts) . putStrLn ++ ++-- | writePatchSet is like patchSetToRepository, except that it doesn't ++-- touch the working directory or pristine cache. ++writePatchSet :: RepoPatch p => PatchSet p -> [DarcsFlag] -> IO (Repository p) ++writePatchSet patchset opts = do ++ maybeRepo <- maybeIdentifyRepository opts "." ++ let repo@(Repo _ _ rf2 (DarcsRepository _ c)) = ++ case maybeRepo of ++ Right r -> r ++ Left e -> bug ("Current directory not repository in writePatchSet: " ++ e) ++ debugMessage "Writing inventory" ++ if format_has HashedInventory rf2 ++ then do HashedRepo.write_tentative_inventory c opts patchset ++ HashedRepo.finalize_tentative_changes repo opts ++ else DarcsRepo.write_inventory_and_patches opts patchset ++ return repo ++ ++-- | patchSetToRepository takes a patch set, and writes a new repository in the current directory ++-- that contains all the patches in the patch set. This function is used when 'darcs get'ing a ++-- repository with the --to-match flag and the new repository is not in hashed format. ++-- This function does not (yet) work for hashed repositories. If the passed @DarcsFlag@s tell ++-- darcs to create a hashed repository, this function will call @error@. ++patchSetToRepository :: RepoPatch p => PatchSet p -> [DarcsFlag] -> IO (Repository p) ++patchSetToRepository patchset opts = do ++ repo <- writePatchSet patchset opts ++ read_repo repo `unsealM` (apply_patches opts . reverseRL . concatRL) ++ debugMessage "Writing the pristine" ++ pristineFromWorking repo ++ return repo ++ ++-- | Unless 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 ++-- with fetchFileUsingCache. This is used as a helper in copyFullRepository. ++fetch_patches_if_necessary :: RepoPatch p => [DarcsFlag] -> Repository p -> IO () ++fetch_patches_if_necessary opts torepository@(Repo _ _ _ (DarcsRepository _ c)) = ++ unless (Partial `elem` opts || Lazy `elem` opts || Ephemeral `elem` opts) $ ++ do putInfo "Copying patches, to get lazy repository hit ctrl-C..." ++ Sealed r <- read_repo torepository ++ let peekaboo :: PatchInfoAnd p C(x y) -> IO () ++ peekaboo x = case extractHash x of ++ Left _ -> return () ++ Right h -> fetchFileUsingCache c "patches" h >> return () ++ sequence_ $ mapRL peekaboo $ progressRL "Copying patches" $ concatRL r ++ where putInfo = when (not $ Quiet `elem` opts) . putStrLn ++ + \end{code} +diff -ruN darcs-2.0.0/src/Darcs/Resolution.lhs darcs-2.0.2/src/Darcs/Resolution.lhs +--- darcs-2.0.0/src/Darcs/Resolution.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Resolution.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -16,6 +16,7 @@ + % Boston, MA 02110-1301, USA. + + \begin{code} ++{-# OPTIONS_GHC -cpp #-} + #include "gadts.h" + module Darcs.Resolution ( standard_resolution, + external_resolution, +@@ -48,7 +49,7 @@ + import Darcs.External ( cloneTree ) + import Darcs.Patch.Apply ( apply_to_slurpy ) + +---import Darcs.ColourPrinter ( traceDoc ) ++--import Darcs.ColorPrinter ( traceDoc ) + --import Printer ( greenText, ($$), Doc ) + --import Darcs.Patch ( showPatch ) + \end{code} +@@ -59,7 +60,8 @@ + + merge_list :: [Sealed (FL Prim C(x))] -> Sealed (FL Prim C(x)) + merge_list patches = doml NilFL patches +- where doml mp (Sealed p:ps) = ++ where doml :: FL Prim C(x y) -> [Sealed (FL Prim C(x))] -> Sealed (FL Prim C(x)) ++ doml mp (Sealed p:ps) = + case commute (invert p :> mp) of + Just (mp' :> _) -> doml (effect p +>+ effect mp') ps + Nothing -> doml mp ps -- This shouldn't happen for "good" resolutions. +@@ -151,8 +153,9 @@ + Note that the defaults file does not want quotes around the command. + + \begin{code} +-external_resolution :: RepoPatch p => Slurpy -> String -> FL Prim -> FL Prim -> p +- -> IO (Sealed (FL Prim)) ++external_resolution :: RepoPatch p => Slurpy -> String -> FL Prim C(x y) -> FL Prim C(x z) ++ -> p C(x a) ++ -> IO (Sealed (FL Prim C(x))) + external_resolution s1 c p1 p2 pmerged = do + sa <- apply_to_slurpy (invert p1) s1 + sm <- apply_to_slurpy pmerged s1 +@@ -213,7 +216,7 @@ + \end{code} + + \begin{code} +-patchset_conflict_resolutions :: RepoPatch p => PatchSet p -> Sealed (FL Prim) ++patchset_conflict_resolutions :: RepoPatch p => PatchSet p C(x) -> Sealed (FL Prim C(x)) + patchset_conflict_resolutions (NilRL:<:_) = --traceDoc (greenText "no conflicts A") $ + Sealed NilFL + patchset_conflict_resolutions NilRL = --traceDoc (greenText "no conflicts B") $ +diff -ruN darcs-2.0.0/src/Darcs/Sealed.lhs darcs-2.0.2/src/Darcs/Sealed.lhs +--- darcs-2.0.0/src/Darcs/Sealed.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Sealed.lhs 2008-06-24 01:23:12.000000000 +0000 +@@ -16,7 +16,7 @@ + % Boston, MA 02110-1301, USA. + + \begin{code} +-{-# OPTIONS -fglasgow-exts #-} ++{-# OPTIONS_GHC -cpp -fglasgow-exts #-} + #include "gadts.h" + module Darcs.Sealed ( Sealed(..), seal, unseal, mapSeal, + #ifndef GADT_WITNESSES +diff -ruN darcs-2.0.0/src/Darcs/SelectChanges.lhs darcs-2.0.2/src/Darcs/SelectChanges.lhs +--- darcs-2.0.0/src/Darcs/SelectChanges.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/SelectChanges.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -16,7 +16,7 @@ + % Boston, MA 02110-1301, USA. + + \begin{code} +-{-# OPTIONS -fffi -fglasgow-exts #-} ++{-# OPTIONS_GHC -cpp -fffi -fglasgow-exts #-} + #include "gadts.h" + module Darcs.SelectChanges ( with_selected_changes', + with_selected_changes_to_files', +@@ -24,6 +24,7 @@ + with_selected_last_changes_reversed', + with_selected_changes, + with_selected_changes_to_files, ++ with_selected_changes_reversed, + with_selected_last_changes_to_files, + with_selected_last_changes_to_files_reversed, + with_selected_last_changes_reversed, +@@ -35,7 +36,7 @@ + import Data.Maybe ( isJust, catMaybes ) + import Data.Char ( toUpper ) + import Control.Monad ( when ) +-import System ( exitWith, ExitCode(ExitSuccess) ) ++import System.Exit ( exitWith, ExitCode(ExitSuccess) ) + + import English ( Noun(..), englishNum ) + import Darcs.Hopefully ( PatchInfoAnd, hopefully, n2pia ) +@@ -94,48 +95,53 @@ + with_selected_last_changes_to_files' :: WithPatchesToFiles Prim a + with_selected_last_changes_reversed' :: WithPatches Prim a + +-with_selected_changes' = wasc (Just First) +-with_selected_changes_to_files' = wasc_ (Just First) +-with_selected_last_changes_to_files' = wasc_ (Just Last) +-with_selected_last_changes_reversed' = wasc (Just LastReversed) ++with_selected_changes' = wasc First ++with_selected_changes_to_files' = wasc_ First ++with_selected_last_changes_to_files' = wasc_ Last ++with_selected_last_changes_reversed' = wasc LastReversed + + with_selected_changes :: RepoPatch p => WithPatches (PatchInfoAnd p) a + with_selected_changes_to_files :: RepoPatch p => WithPatchesToFiles (PatchInfoAnd p) a ++with_selected_changes_reversed :: RepoPatch p => WithPatches (PatchInfoAnd p) a + with_selected_last_changes_to_files :: RepoPatch p => WithPatchesToFiles (PatchInfoAnd p) a + with_selected_last_changes_to_files_reversed :: RepoPatch p => WithPatchesToFiles (PatchInfoAnd p) a + with_selected_last_changes_reversed :: RepoPatch p => WithPatches (PatchInfoAnd p) a + +-with_selected_changes = wasc' (Just First) +-with_selected_changes_to_files = wasc_' (Just First) +-with_selected_last_changes_to_files = wasc_' (Just Last) +-with_selected_last_changes_to_files_reversed = wasc_' (Just LastReversed) +-with_selected_last_changes_reversed = wasc' (Just LastReversed) ++with_selected_changes = wasc' First ++with_selected_changes_to_files = wasc_' First ++with_selected_changes_reversed = wasc' FirstReversed ++with_selected_last_changes_to_files = wasc_' Last ++with_selected_last_changes_to_files_reversed = wasc_' LastReversed ++with_selected_last_changes_reversed = wasc' LastReversed + +-data WhichChanges = Last | LastReversed | First deriving (Eq, Show) ++data WhichChanges = Last | LastReversed | First | FirstReversed deriving (Eq, Show) + + -- | wasc and wasc_ are just shorthand for with_any_selected_changes +-wasc :: Patchy p => Maybe WhichChanges -> WithPatches p a ++wasc :: Patchy p => WhichChanges -> WithPatches p a + wasc mwch j o s = wasc_ mwch j o s [] +-wasc_ :: Patchy p => Maybe WhichChanges -> WithPatchesToFiles p a ++wasc_ :: Patchy p => WhichChanges -> WithPatchesToFiles p a + wasc_ = with_any_selected_changes + +-wasc' :: RepoPatch p => Maybe WhichChanges -> WithPatches (PatchInfoAnd p) a ++wasc' :: RepoPatch p => WhichChanges -> WithPatches (PatchInfoAnd p) a + wasc' mwch j o s = wasc_' mwch j o s [] +-wasc_' :: RepoPatch p => Maybe WhichChanges -> WithPatchesToFiles (PatchInfoAnd p) a ++wasc_' :: RepoPatch p => WhichChanges -> WithPatchesToFiles (PatchInfoAnd p) a + wasc_' = with_any_selected_changes' + +-with_any_selected_changes :: Patchy p => Maybe WhichChanges -> WithPatchesToFiles p a +-with_any_selected_changes mwch jn opts s fs = +- with_any_selected_changes_ mwch (patches_to_consider mwch fs) jn opts s fs +- +-with_any_selected_changes' :: RepoPatch p => Maybe WhichChanges -> WithPatchesToFiles (PatchInfoAnd p) a +-with_any_selected_changes' mwch jn opts s fs = +- with_any_selected_changes_ mwch (patches_to_consider' mwch fs opts) jn opts s fs ++with_any_selected_changes :: Patchy p => WhichChanges -> WithPatchesToFiles p a ++with_any_selected_changes wch jn opts s fs = ++ with_any_selected_changes_ wch (patches_to_consider (Just wch) fs) jn opts s fs ++ ++with_any_selected_changes' :: RepoPatch p => WhichChanges -> WithPatchesToFiles (PatchInfoAnd p) a ++with_any_selected_changes' wch jn opts s fs = ++ with_any_selected_changes_ wch (patches_to_consider' (Just wch) fs opts) jn opts s fs + + view_changes :: RepoPatch p => [DarcsFlag] -> Slurpy -> [FilePath] -> FL (PatchInfoAnd p) -> IO () +-view_changes opts s fp ps = +- with_any_selected_changes' Nothing +- "view changes" opts s fp ps (\_ -> return ()) ++view_changes opts _ fp ps = ++ without_buffering $ do text_view opts ps_len 0 NilRL init_tps init_pc ++ return () ++ where ps_to_consider :> _ = patches_to_consider' Nothing fp opts ps ++ (init_pc, init_tps) = patch_choices_tps ps_to_consider ++ ps_len = lengthFL init_tps + \end{code} + + \begin{code} +@@ -224,26 +230,24 @@ + \end{code} + + \begin{code} +-with_any_selected_changes_ :: Patchy p => Maybe WhichChanges ++with_any_selected_changes_ :: Patchy p => WhichChanges + -> (FL p -> FL p :> FL p) + -> WithPatchesToFiles p a +-with_any_selected_changes_ mwhichch p2c ++with_any_selected_changes_ whichch p2c + jobname opts _ _ ps job = +- case mwhichch of +- Nothing -> do without_buffering $ text_view jobname opts ps_len 0 NilRL init_tps init_pc +- job (ps_to_consider :> other_ps) +- Just whichch -> + if All `elem` opts || DryRun `elem` opts + then job $ case whichch of LastReversed -> invert other_ps :> invert ps_to_consider ++ FirstReversed -> invert other_ps :> invert ps_to_consider + _ -> ps_to_consider :> other_ps + else do pc <- without_buffering $ + tentatively_text_select "" jobname (Noun "patch") whichch + opts ps_len 0 NilRL init_tps init_pc + job $ selected_patches whichch rejected_ps pc + where ps_to_consider :> other_ps = p2c ps +- rejected_ps = if mwhichch == Just Last then ps_to_consider else other_ps +- (init_pc, init_tps) = patch_choices_tps $ case mwhichch of Just Last -> other_ps +- _ -> ps_to_consider ++ rejected_ps = if whichch == Last || whichch == FirstReversed then ps_to_consider else other_ps ++ (init_pc, init_tps) = patch_choices_tps $ case whichch of Last -> other_ps ++ FirstReversed -> other_ps ++ _ -> ps_to_consider + ps_len = lengthFL init_tps + + patches_to_consider :: Patchy p => Maybe WhichChanges +@@ -251,12 +255,14 @@ + -> FL p -- ^ patches + -> (FL p :> FL p) + patches_to_consider mwhichch fs ps = +- let ps' = if mwhichch == Just LastReversed then invert ps else ps ++ let ps' = if mwhichch == Just LastReversed || mwhichch == Just FirstReversed then invert ps else ps + f = case mwhichch of Just Last -> separate_middle_last_from_first ++ Just FirstReversed -> separate_middle_last_from_first + _ -> separate_first_middle_from_last + deal_with_fs = case mwhichch of Just Last -> select_not_touching fs ++ Just FirstReversed -> select_not_touching fs + _ -> deselect_not_touching fs +- in if null fs then if mwhichch == Just Last then NilFL :> ps' else ps' :> NilFL ++ in if null fs then if mwhichch == Just Last || mwhichch == Just FirstReversed then NilFL :> ps' else ps' :> NilFL + else tp_patches $ f $ deal_with_fs $ patch_choices ps' + + patches_to_consider' :: RepoPatch p => Maybe WhichChanges +@@ -265,23 +271,26 @@ + -> FL (PatchInfoAnd p) -- ^ patches + -> FL (PatchInfoAnd p) :> FL (PatchInfoAnd p) + patches_to_consider' mwhichch fs opts ps = +- let ps' = if mwhichch == Just LastReversed then invert ps else ps ++ let ps' = if mwhichch == Just LastReversed || mwhichch == Just FirstReversed then invert ps else ps + f = case mwhichch of Just Last -> separate_middle_last_from_first ++ Just FirstReversed -> separate_middle_last_from_first + _ -> separate_first_middle_from_last + deal_with_fs = case mwhichch of Just Last -> select_not_touching fs ++ Just FirstReversed -> select_not_touching fs + _ -> deselect_not_touching fs + deselect_unwanted pc = + if have_nonrange_match opts + then case mwhichch of + Just Last -> bug "don't support patch matching with Last in wasp" ++ Just FirstReversed -> bug "don't support patch matching with FirstReversed in wasp" + _ -> if DontGrabDeps `elem` opts + then force_matching_last (not.iswanted) pc + else make_everything_later $ force_matching_first iswanted pc + else pc +- iswanted = let maybe_invert = if mwhichch == Just LastReversed then invert else id ++ iswanted = let maybe_invert = if mwhichch == Just LastReversed || mwhichch == Just FirstReversed then invert else id + in (match_a_patch opts . hopefully . maybe_invert . tp_patch) + in if null fs && not (have_nonrange_match opts) +- then if mwhichch == Just Last then NilFL :> ps' else ps' :> NilFL ++ then if mwhichch == Just Last || mwhichch == Just FirstReversed then NilFL :> ps' else ps' :> NilFL + else tp_patches $ f $ deal_with_fs $ deselect_unwanted $ patch_choices ps' + + -- | Returns the results of a patch selection user interaction +@@ -297,6 +306,8 @@ + xs :> ys -> mapFL_FL tp_patch xs :> mapFL_FL tp_patch ys +>+ other_ps + LastReversed -> case separate_first_from_middle_last pc of + xs :> ys -> invert (mapFL_FL tp_patch ys +>+ other_ps) :> invert (mapFL_FL tp_patch xs) ++ FirstReversed -> case separate_last_from_first_middle pc of ++ xs :> ys -> invert (mapFL_FL tp_patch ys) :> invert (other_ps +>+ mapFL_FL tp_patch xs) + + text_select :: Patchy p => String -> WhichChanges -> [DarcsFlag] -> Int -> Int + -> RL (TaggedPatch p) -> FL (TaggedPatch p) -> PatchChoices p +@@ -357,7 +368,7 @@ + repeat_this + 'd' -> return pc + 'a' -> do ask_confirmation +- return $ select_all_middles (whichch == Last) pc ++ return $ select_all_middles (whichch == Last || whichch == FirstReversed) pc + 'q' -> do putStrLn $ jn_cap++" cancelled." + exitWith $ ExitSuccess + 'j' -> case tps_todo' of +@@ -376,19 +387,19 @@ + n_max n tps_done tps_todo pc + _ -> do putStrLn $ helpFor jn options + repeat_this +- force_yes = if whichch == Last then force_last else force_first +- force_no = if whichch == Last then force_first else force_last ++ force_yes = if whichch == Last || whichch == FirstReversed then force_last else force_first ++ force_no = if whichch == Last || whichch == FirstReversed then force_first else force_last + patches_to_skip = (tag tp:) $ catMaybes + $ mapFL (\tp' -> if list_touched_files tp' == touched_files + then Just (tag tp') + else Nothing) tps_todo' + skip_file = foldr force_no pc patches_to_skip + do_file = foldr force_yes pc patches_to_skip +- the_default = get_default (whichch == Last) $ is_patch_first tp pc ++ the_default = get_default (whichch == Last || whichch == FirstReversed) $ is_patch_first tp pc + jn_cap = (toUpper $ head jn) : tail jn + touched_files = list_touched_files $ tp_patch tp + is_single_file_patch = length touched_files == 1 +- viewp = if whichch == LastReversed then invert (tp_patch tp) else tp_patch tp ++ viewp = if whichch == LastReversed || whichch == FirstReversed then invert (tp_patch tp) else tp_patch tp + ask_confirmation = + if jn `elem` ["unpull", "unrecord", "obliterate"] + then do yorn <- askUser $ "Really " ++ jn ++ " all undecided patches? " +@@ -397,12 +408,12 @@ + _ -> exitWith $ ExitSuccess + else return () + +-text_view :: Patchy p => String -> [DarcsFlag] -> Int -> Int ++text_view :: Patchy p => [DarcsFlag] -> Int -> Int + -> RL (TaggedPatch p) -> FL (TaggedPatch p) -> PatchChoices p + -> IO (PatchChoices p) + +-text_view _ _ _ _ _ NilFL _ = return $ patch_choices NilFL --return pc +-text_view jn opts n_max n ++text_view _ _ _ _ NilFL _ = return $ patch_choices NilFL --return pc ++text_view opts n_max n + tps_done tps_todo@(tp:>:tps_todo') pc = do + printFriendly opts (tp_patch tp) + putStr "\n" +@@ -411,38 +422,38 @@ + prev_patch = case tps_done of + NilRL -> repeat_this + (tp':<:tps_done') -> +- text_view jn opts ++ text_view opts + n_max (n-1) tps_done' (tp':>:tps_todo) pc + next_patch = case tps_todo' of + NilFL -> -- May as well work out the length now we have all + -- the patches in memory +- text_view jn opts n_max ++ text_view opts n_max + n tps_done tps_todo' pc +- _ -> text_view jn opts n_max ++ _ -> text_view opts n_max + (n+1) (tp:<:tps_done) tps_todo' pc + options_yn = +- [ KeyPress 'y' "skip to the next patch" +- , KeyPress 'n' ("quit "++jn) ] ++ [ KeyPress 'y' "view this patch and go to the next" ++ , KeyPress 'n' "skip to the next patch" ] + options_view = + [ KeyPress 'v' "view this patch in full" + , KeyPress 'p' "view this patch in fill with pager" ] + options_summary = + [ KeyPress 'x' "view a summary of this patch" ] + options_nav = +- [ KeyPress 'q' ("quit "++jn) ++ [ KeyPress 'q' ("quit view changes") + , KeyPress 'k' "back up to previous patch" + , KeyPress 'j' "skip to next patch" ] + options = [ options_yn ] + ++ [ options_view ++ + if Summary `elem` opts then [] else options_summary ] + ++ [ options_nav ] +- prompt = "Shall I continue to "++jn++"? " ++ prompt = "Shall I view this patch? " + ++ "(" ++ show (n+1) ++ "/" ++ show n_max ++ ")" + repeat_this = do +- yorn <- promptCharFancy prompt (keysFor options) (Just 'y') "?h" ++ yorn <- promptCharFancy prompt (keysFor options) (Just 'n') "?h" + case yorn of +- 'y' -> next_patch +- 'n' -> exitWith ExitSuccess ++ 'y' -> printPatch (tp_patch tp) >> next_patch ++ 'n' -> next_patch + 'v' -> printPatch (tp_patch tp) >> repeat_this + 'p' -> printPatchPager (tp_patch tp) >> repeat_this + 'x' -> do putDocLn $ prefix " " $ summary (tp_patch tp) +@@ -450,9 +461,9 @@ + 'q' -> exitWith ExitSuccess + 'k' -> prev_patch + 'j' -> next_patch +- 'c' -> text_view jn opts ++ 'c' -> text_view opts + n_max n tps_done tps_todo pc +- _ -> do putStrLn $ helpFor jn options ++ _ -> do putStrLn $ helpFor "view changes" options + repeat_this + + tentatively_text_select :: Patchy p => String -> String -> Noun -> WhichChanges -> [DarcsFlag] +diff -ruN darcs-2.0.0/src/Darcs/Show.lhs darcs-2.0.2/src/Darcs/Show.lhs +--- darcs-2.0.0/src/Darcs/Show.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Show.lhs 2008-06-24 01:23:12.000000000 +0000 +@@ -1,4 +1,5 @@ + \begin{code} ++{-# OPTIONS_GHC -cpp #-} + module Darcs.Show(Show1(..), Show2(..), showOp2, app_prec) where + + #include "gadts.h" +@@ -22,4 +23,4 @@ + app_prec :: Int + app_prec = 10 + +-\end{code} +\ No newline at end of file ++\end{code} +diff -ruN darcs-2.0.0/src/Darcs/SignalHandler.lhs darcs-2.0.2/src/Darcs/SignalHandler.lhs +--- darcs-2.0.0/src/Darcs/SignalHandler.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/SignalHandler.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -17,7 +17,7 @@ + + + \begin{code} +-{-# OPTIONS -fglasgow-exts #-} ++{-# OPTIONS_GHC -cpp -fglasgow-exts #-} + module Darcs.SignalHandler ( withSignalsHandled, withSignalsBlocked, + catchNonSignal, tryNonSignal, stdout_is_a_pipe ) where + +diff -ruN darcs-2.0.0/src/Darcs/SlurpDirectory.lhs darcs-2.0.2/src/Darcs/SlurpDirectory.lhs +--- darcs-2.0.0/src/Darcs/SlurpDirectory.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/SlurpDirectory.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -23,8 +23,8 @@ + trees. + + \begin{code} ++{-# OPTIONS_GHC -cpp #-} + module Darcs.SlurpDirectory ( Slurpy(..), FileContents, empty_slurpy, +- emptyFileContents, + slurp, mmap_slurp, slurp_unboring, co_slurp, + slurp_name, is_file, is_dir, + get_filecontents, get_dircontents, get_mtime, +@@ -50,7 +50,7 @@ + import Darcs.Utils ( withCurrentDirectory, formatPath ) + import System.IO.Unsafe ( unsafeInterleaveIO ) + import Data.List ( sort, tails, isPrefixOf ) +-import Control.Monad ( MonadPlus(..), liftM ) ++import Control.Monad ( MonadPlus(..) ) + import Data.Char ( toLower ) + import System.Posix.Types ( EpochTime, FileOffset ) + import System.Posix.Files +@@ -80,9 +80,6 @@ + concat (map show l) ++ "End Dir " ++ (fn2fp fn) ++ "\n" + show (SlurpFile fn _ _) = "File " ++ (fn2fp fn) ++ "\n" + +-emptyFileContents :: FileContents +-emptyFileContents = nilPS +- + slurp :: FilePath -> IO Slurpy + mmap_slurp :: FilePath -> IO Slurpy + slurp_unboring :: (FilePath->Bool) -> FilePath -> IO Slurpy +@@ -133,7 +130,6 @@ + instance ReadableDirectory SlurpMonad where + mDoesDirectoryExist d = smDoesDirectoryExist d + mDoesFileExist f = smDoesFileExist f +- mIsFileExecutable _ = return False + mInCurrentDirectory = smInSlurpy + mGetDirectoryContents = smGetDirContents + mReadFilePS = smReadFilePS +@@ -344,13 +340,16 @@ + -> FilePath -> IO Slurpy + genslurp usemm nb dirname = do + isdir <- doesDirectoryExist dirname +- liftM fromJust $ +- if isdir +- then withCurrentDirectory dirname $ +- do actualname <- getCurrentDirectory +- genslurp_helper usemm nb (reverse actualname) "" "." +- else do former_dir <- getCurrentDirectory +- genslurp_helper usemm nb (reverse former_dir) "" dirname ++ ms <- if isdir ++ then withCurrentDirectory dirname $ ++ do actualname <- getCurrentDirectory ++ genslurp_helper usemm nb (reverse actualname) "" "." ++ else do former_dir <- getCurrentDirectory ++ genslurp_helper usemm nb (reverse former_dir) "" dirname ++ case ms of ++ Just s -> return s ++ Nothing -> fail $ "Unable to read directory " ++ dirname ++ ++ " (it appears to be neither file nor directory)" + + unsafeInterleaveMapIO :: (a -> IO b) -> [a] -> IO [b] + unsafeInterleaveMapIO _ [] = return [] +@@ -361,27 +360,25 @@ + + genslurp_helper :: Bool -> (FilePath -> Bool) + -> FilePath -> String -> String -> IO (Maybe Slurpy) +-genslurp_helper usemm nb formerdir fullpath dirname = +- unsafeInterleaveIO $ do ++genslurp_helper usemm nb formerdir fullpath dirname = do + fs <- getSymbolicLinkStatus fulldirname +- if isRegularFile fs then do +- let mtime = (Nothing, modificationTime fs, fileSize fs) +- ls <- unsafeInterleaveIO $ myReadFileLinesPSetc fulldirname +- return $ Just $ SlurpFile (fp2fn dirname) mtime ls +- else if isDirectory fs || (isSymbolicLink fs && dirname == ".") then do +- sl <- unsafeInterleaveIO $ do +- fnames <- getDirectoryContents fulldirname +- unsafeInterleaveMapIO +- (\f -> genslurp_helper usemm nb fulldirname' +- (fullpath///f) f) +- $ filter (nb . (fullpath///)) +- $ filter not_hidden fnames +- return $ Just $ SlurpDir (fp2fn dirname) Nothing $ catMaybes sl +- else return Nothing ++ if isRegularFile fs ++ then do let mtime = (Nothing, modificationTime fs, fileSize fs) ++ ls <- unsafeInterleaveIO $ myReadFileLinesPSetc fulldirname ++ return $ Just $ SlurpFile (fp2fn dirname) mtime ls ++ else if isDirectory fs || (isSymbolicLink fs && dirname == ".") ++ then do sl <- unsafeInterleaveIO $ ++ do fnames <- getDirectoryContents fulldirname ++ unsafeInterleaveMapIO ++ (\f -> genslurp_helper usemm nb fulldirname' ++ (fullpath///f) f) ++ $ filter (nb . (fullpath///)) $ filter not_hidden fnames ++ return $ Just $ SlurpDir (fp2fn dirname) Nothing $ catMaybes sl ++ else return Nothing + where fulldirname' = formerdir\\\dirname + fulldirname = reverse fulldirname' +- myReadFileLinesPSetc = if usemm then mmapFileLinesPSetc +- else readFileLinesPSetc ++ myReadFileLinesPSetc = if usemm then mmapFilePS ++ else readFilePS + + not_hidden :: FilePath -> Bool + not_hidden "." = False +@@ -429,15 +426,9 @@ + Right fs + | isRegularFile fs -> + do let mtime = (Nothing, modificationTime fs, fileSize fs) +- ls <- unsafeInterleaveIO $ readFileLinesPSetc fn ++ ls <- unsafeInterleaveIO $ readFilePS fn + return $ Just $ SlurpFile f mtime ls + _ -> return Nothing +- +-readFileLinesPSetc :: String -> IO FileContents +-readFileLinesPSetc = readFilePS +- +-mmapFileLinesPSetc :: String -> IO FileContents +-mmapFileLinesPSetc = mmapFilePS + \end{code} + + \begin{code} +diff -ruN darcs-2.0.0/src/Darcs/Test.lhs darcs-2.0.2/src/Darcs/Test.lhs +--- darcs-2.0.0/src/Darcs/Test.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Test.lhs 2008-06-24 01:23:12.000000000 +0000 +@@ -16,26 +16,20 @@ + % Boston, MA 02110-1301, USA. + + \begin{code} +-module Darcs.Test ( run_test, get_test, test_patch, ++module Darcs.Test ( run_test, get_test, + run_posthook, run_prehook ) + where + import Data.Maybe ( isNothing ) + import Darcs.Utils ( withCurrentDirectory ) +-import System ( ExitCode(..), system ) ++import System.Exit ( ExitCode(..) ) ++import System.Cmd ( system ) + import Control.Monad ( when ) +-import System.Directory ( setCurrentDirectory ) +-import Workaround ( getCurrentDirectory ) +-import Darcs.Patch ( Patchy, Named, apply ) +-import Darcs.Patch.Core ( patch2patchinfo ) +-import Darcs.Patch.Info ( just_name ) +-import Darcs.Repository ( withRepository, ($-) , withRecorded ) + +-import Darcs.Arguments ( DarcsFlag( Verbose, Quiet, LeaveTestDir, ++import Darcs.Arguments ( DarcsFlag( Verbose, Quiet, + NoPosthook, RunPosthook, + NoPrehook, RunPrehook ), + get_posthook_cmd, get_prehook_cmd ) + import Darcs.Repository.Prefs ( get_prefval ) +-import Darcs.Lock ( withTempDir, withPermDir ) + import Darcs.Utils ( askUser ) + import System.IO ( hPutStr, stderr ) + \end{code} +@@ -86,27 +80,6 @@ + \end{code} + + \begin{code} +-test_patch :: Patchy p => [DarcsFlag] -> Named p -> IO ExitCode +-test_patch opts p = withRepository opts $- \repository -> do +- testline <- get_prefval "test" +- case testline of +- Nothing -> return ExitSuccess +- Just _ -> do +- formerdir <- getCurrentDirectory +- withRecorded repository (wd "testing") $ \td -> do +- apply opts p +- setCurrentDirectory formerdir +- ec <- run_test opts td +- if ec == ExitSuccess +- then putInfo "Looks like a good patch.\n" +- else putInfo ("Looks like you have a bad patch" ++ name ++ ".\n") +- return ec +- where wd = if LeaveTestDir `elem` opts then withPermDir else withTempDir +- putInfo str = when (not $ Quiet `elem` opts) $ putStr str +- name = ": " ++ just_name (patch2patchinfo p) +-\end{code} +- +-\begin{code} + run_posthook :: [DarcsFlag] -> FilePath -> IO ExitCode + run_posthook opts repodir + | NoPosthook `elem` opts = return ExitSuccess +diff -ruN darcs-2.0.0/src/Darcs/URL.hs darcs-2.0.2/src/Darcs/URL.hs +--- darcs-2.0.0/src/Darcs/URL.hs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/URL.hs 2008-06-24 01:23:13.000000000 +0000 +@@ -1,3 +1,4 @@ ++{-# OPTIONS_GHC -cpp #-} + {- + Copyright (C) 2004 David Roundy + +@@ -38,7 +39,7 @@ + Examples: + /usr/repo/foo - local file + c:/src/darcs - local file +- http://darcs.net/repos/stable - URL ++ http://darcs.net/ - URL + peter@host:/path - ssh + host:/path - ssh + +diff -ruN darcs-2.0.0/src/Darcs/Utils.lhs darcs-2.0.2/src/Darcs/Utils.lhs +--- darcs-2.0.0/src/Darcs/Utils.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Darcs/Utils.lhs 2008-06-24 01:23:13.000000000 +0000 +@@ -1,8 +1,7 @@ + % Various utility functions that do not belong anywhere else. + + \begin{code} +- +-{-# OPTIONS -fffi #-} ++{-# OPTIONS_GHC -cpp -fffi #-} + + module Darcs.Utils ( catchall, ortryrunning, nubsort, breakCommand, + clarify_errors, prettyException, +@@ -11,18 +10,20 @@ + showHexLen, add_to_error_loc, + maybeGetEnv, firstNotBlank, firstJustM, firstJustIO, + isUnsupportedOperationError, isHardwareFaultError, +- view_file, get_viewer, edit_file, promptYorn, promptCharFancy, without_buffering, ++ get_viewer, edit_file, promptYorn, promptCharFancy, without_buffering, + formatPath ) where + + import Prelude hiding ( catch ) + import Control.Exception ( bracket, bracket_, catch, Exception(IOException) ) ++import Control.Concurrent ( threadWaitRead, newEmptyMVar, takeMVar, putMVar, forkIO ) + import GHC.IOBase ( IOException(ioe_location), + IOErrorType(UnsupportedOperation, HardwareFault) ) + import System.IO.Error ( isUserError, ioeGetErrorType, ioeGetErrorString ) + + import Darcs.SignalHandler ( catchNonSignal ) + import Numeric ( showHex ) +-import System ( ExitCode(..), getEnv ) ++import System.Exit ( ExitCode(..) ) ++import System.Environment ( getEnv ) + import System.IO ( hFlush, hPutStrLn, stderr, stdout, stdin, + BufferMode ( NoBuffering ), + hLookAhead, hReady, hSetBuffering, hGetBuffering, hIsTerminalDevice ) +@@ -133,13 +134,21 @@ + (reset_umask rc) + job + ++-- withThread is used to allow ctrl-C to work even while we're waiting ++-- for user input. ++withThread :: IO a -> IO a ++withThread j = do m <- newEmptyMVar ++ forkIO (j >>= putMVar m) ++ takeMVar m ++ + askUser :: String -> IO String +-askUser prompt = withoutProgress $ do putStr prompt +- hFlush stdout ++askUser prompt = withThread $ withoutProgress $ do putStr prompt ++ hFlush stdout ++ threadWaitRead 0 + #ifndef WIN32 +- getLine ++ getLine + #else +- liftM stripCr getLine ++ stripCr `fmap` getLine + #endif + + stripCr :: String -> String +@@ -180,6 +189,9 @@ + `ortryrunning` exec_interactive "emacs" f + `ortryrunning` exec_interactive "emacs -nw" f + `ortryrunning` exec_interactive "nano" f ++#ifdef WIN32 ++ `ortryrunning` exec_interactive "edit" f ++#endif + get_editor :: IO String + get_editor = getEnv "DARCS_EDITOR" `catchall` + getEnv "DARCSEDITOR" `catchall` +@@ -188,12 +200,6 @@ + \end{code} + + \begin{code} +-view_file :: String -> IO ExitCode +-view_file f = do +- viewer <- get_viewer +- exec_interactive viewer f +- `ortryrunning` exec_interactive "less" f +- `ortryrunning` exec_interactive "more" f + get_viewer :: IO String + get_viewer = getEnv "DARCS_PAGER" `catchall` + getEnv "PAGER" `catchall` return "less" +@@ -205,9 +211,10 @@ + + promptCharFancy :: String -> [Char] -> Maybe Char -> [Char] -> IO Char + promptCharFancy p chs md help_chs = +- do a <- without_buffering $ ++ do a <- withThread $ without_buffering $ + do putStr $ p ++ " ["++ setDefault chs ++"]" ++ helpStr + hFlush stdout ++ threadWaitRead 0 + getChar + when (a /= '\n') $ putStr "\n" + case () of +@@ -248,7 +255,8 @@ + set_raw_mode raw + drop_returns = do is_ready <- hReady stdin + when is_ready $ +- do c <- hLookAhead stdin `catch` \_ -> return ' ' ++ do threadWaitRead 0 ++ c <- hLookAhead stdin `catch` \_ -> return ' ' + when (c == '\n') $ + do getChar + drop_returns +diff -ruN darcs-2.0.0/src/darcs.lhs darcs-2.0.2/src/darcs.lhs +--- darcs-2.0.0/src/darcs.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/darcs.lhs 2008-06-24 01:23:12.000000000 +0000 +@@ -27,11 +27,13 @@ + \begin{document} + + \begin{code} ++{-# OPTIONS_GHC -cpp #-} + module Main (main) where + + import System.IO ( hSetBinaryMode) + import System.IO ( stdin, stdout ) +-import System ( exitWith, ExitCode(..), getArgs ) ++import System.Exit ( exitWith, ExitCode(..) ) ++import System.Environment ( getArgs ) + import Control.Monad ( when ) + import Control.Exception ( Exception( AssertionFailed ), handleJust, catchDyn ) + import Workaround ( getCurrentDirectory ) +@@ -214,7 +216,7 @@ + from the root directory of your project: + \begin{verbatim} + % cd my_project/ +-% darcs initialize ++% darcs initialize --darcs-2 + \end{verbatim} + This creates the \verb|_darcs| directory and populates it with whatever + files and directories are needed to describe an empty project. You now +@@ -566,7 +568,7 @@ + even if the patch is applied. You can confirm whether or not your patch was applied + to the remote repository by pointing \verb!darcs changes! at a remote repository: + \begin{verbatim} +-darcs changes --last=10 --repo=http://darcs.net/repos/stable ++darcs changes --last=10 --repo=http://darcs.net/ + \end{verbatim} + + That shows you the last 10 changes in the remote repository. You can adjust the options given +@@ -609,7 +611,7 @@ + \emph{sibling}. This is done with \verb|darcs optimize --relink|, with + --the \verb|--sibling| flag specifying the sibling. + \begin{verbatim} +- $ cd /var/repos/darcs-unstable ++ $ cd /var/repos/darcs.net + $ darcs optimize --relink --sibling /var/repos/darcs + \end{verbatim} + The \verb|--sibling| flag can be repeated multiple times, in which +@@ -678,16 +680,16 @@ + \end{code} + \section{Options apart from darcs commands} + \begin{options} +---help, --extended-help ++--help, --overview + \end{options} + Calling darcs with just \verb|--help| as an argument gives a brief + summary of what commands are available. +-The \verb|--extended-help| option gives a more technical summary of ++The \verb|--overview| option gives a more technical summary of + what the commands actually \emph{do}. + \begin{code} + when (length argv == 1 && (argv!!0 == "-h" || argv!!0 == "--help")) $ + command_command help [] [] +- when (length argv == 1 && (argv!!0 == "--extended-help")) $ ++ when (length argv == 1 && (argv!!0 == "--overview")) $ + command_command help [Verbose] [] + \end{code} + \begin{options} +@@ -726,7 +728,7 @@ + putStrLn "--help" + putStrLn "--version" + putStrLn "--exact-version" +- putStrLn "--extended-help" ++ putStrLn "--overview" + exitWith $ ExitSuccess + hSetBinaryMode stdin True + hSetBinaryMode stdout True +diff -ruN darcs-2.0.0/src/darcs_print.ps darcs-2.0.2/src/darcs_print.ps +--- darcs-2.0.0/src/darcs_print.ps 2008-04-07 15:11:19.000000000 +0000 ++++ darcs-2.0.2/src/darcs_print.ps 2008-06-24 01:25:45.000000000 +0000 +@@ -13,7 +13,7 @@ + %DVIPSCommandLine: dvips -t letter -o src/darcs_print.ps + %+ src/darcs_print.dvi + %DVIPSParameters: dpi=600 +-%DVIPSSource: TeX output 2008.04.07:1111 ++%DVIPSSource: TeX output 2008.06.23:1825 + %%BeginProcSet: tex.pro 0 0 + %! + /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S +@@ -5023,19 +5023,17 @@ + dup 44 /comma put + dup 48 /zero put + dup 50 /two put +-dup 55 /seven put ++dup 51 /three put + dup 56 /eight put +-dup 65 /A put + dup 68 /D put ++dup 74 /J put + dup 82 /R put + dup 97 /a put + dup 100 /d put ++dup 101 /e put + dup 105 /i put +-dup 108 /l put + dup 110 /n put + dup 111 /o put +-dup 112 /p put +-dup 114 /r put + dup 117 /u put + dup 118 /v put + dup 121 /y put +@@ -5069,102 +5067,95 @@ + 4B7F768DA5AA89E8F163029ADD4A9209DE8A4F285766C06EA859639B92CCCDCA + F59B1C2BB8D588CA754D1257BFF76B53984DF4937093AAEF79009D32A29A4C16 + FB610C7D6713482C48D7F9E8410C0F00AD6E67021056B6035534E79F05D14EF2 +-4E87EDDEC33BE4856B885EC0B969DD2E7C8F2F9BF4DB0CD7E57BF8B4050C1434 +-4031EBB95A69072D59DE7B4C42AFD5D88841EFCD1CCDB6A258E2A5D80C594B96 +-D6AECC3AB046504F5C88D55CBC667ADFB2F1F15F45E35765F19DAF1F24EBD3F8 +-866F1A46ECF961B9C9090ACAFF56898A343980FD407515151D934A1382C748C9 +-75527F50FFFBB8F5966142CB57A8AEE7A1B59C397EC17B8C96FD1C60A37780F6 +-B384BE280BDE753394C427E45CA9E0DD32314C28F6E2CDD56FE4C7E8443BFE47 +-EF23E3C05915D9327C554CF3A66AE541C0E78027D5129483989C47B330E59079 +-1FB06F07FA02F309E4DB7B1902B0B2AD32C25D41069B20A02F90A04E70B1AA63 +-77AD56E9B90EA1BA5CFB1CCEBEE303DBC38ACD5CCEFBB4E8D111C410D3D421D8 +-0DBA1694D2247962F328EAD58CF9F70B1676E1A3CC5435CC40AB246E999DA792 +-033479BBF97040700292341E4A23C63F59482A847D24C6BF32695EB03747B510 +-8DBE3886BF599C70FCE44BF5D938B1FEB1FB220518AB7A5642E0036051D93B67 +-BF989E92540A768C854F36842C04FB63459B923FBF3E5856349FD3F424FAB552 +-84729C4148EBDEDF7BA893D6E36AFEEE824958CEB6C332C94133CBA5041C642F +-B907AF9505FB7CA742FD1D428BDA58D46693FB40EC4074442682342892F34EAD +-CD802530CBE1AC0D5C102FAD709139098295A90D6F7A841544104CB399E687A8 +-9BFCB02A181218928ED2A53E69C98F832C3D5636AC3F8CE92B018ABDCD0DB5CA +-79C6DDA0A3058B034002833A381872BD27C09274C11C25808DFFE1714A6CD3CB +-F8B18F265989B32A3AE0294A91948FCA8F1F07515F96244DF42E7B1D26F0F654 +-BD1F1B4B3E03724E9E872A9007D0E2FAC28A3296BF823BE6759E626B54A98ACE +-2E0A900C26045F165090BAD09EE24206EB72692E1741CD2BBF67104724038F95 +-C9D03EA2A65D77EE01023E0398E7146545E5D75D7E1091DFAFF5E293ADAC21E7 +-D928B069249DF07E25C2E5C89A3AEA6E78BFDB99F84A95DAAC89117A1975F3A5 +-2919ECFDC49293DFCAFD5ED75E5FD74F97573C975660029C2CE3ECEDA20E14FE +-F64D353F50C7E34FD03198746F512ABC89675EA7A34F6DD30BB164D80EAC4B76 +-4B1A1D63E891AC6F9C7B8A8D0CC4A308EA764BC6B05E3FBB7D7F01CFEDD0B54B +-C7507FBF0817E4D1B03A0DB5F80971F05043A513F8B290D3368B94529D9401A4 +-939D75E9611370038CF20C5FEF58CC44222E09F9974F461B994BA2D180B3CA75 +-D614E7FE269BD52D974AACF04AFC7138E4567620937F5D320CAB71C3EC5EDAD8 +-BF7AF8BFDB2577457421BB4DACB3CA9985F2F45725F3EA3A71574317E162F710 +-5095980654FCE821CB7F7CB703FF9ADA06FAF7C265B485094516F93FF90D0DF4 +-70EA52A15CC63101E8E9F54061B62E7FA54662EEFF69791DB283739B5AA08D53 +-35FD580BFD6372F51C4232A2E6D7F0F9CFD2A6A475AE9ADFB3932002830EE74E +-E2E481D1BDDF196C163C977987CBBD6B5AF0141AD02B2B04A8ADF9C1AFF03C4B +-9B14524332272B0824C16D7B7D59DA9D1A7EF545E1C01BAC916D655188111C65 +-F1C48A087C2B444B35A24B1B91BA6DB226A5ACFDA730DC0F24BC13D99175914C +-EB4E1B38443FCADB6462292022CB70AFA124B11F43A0AA5D9473E272BD1CDDD2 +-36F812D8598EB3C11F6AB39EDB7F4C7A3F1574098171A6AE8B13BDDF2C72F5DA +-CD83E46B79B78BC03905D2394FC609C408B854004DEF4C963B38AB5FECD52F5C +-42B32C343060E138E0F44303977B35A403ED3AC39EB93710C5FA6D24C969ED2D +-1052DDF86277016AAD4875209ACAC41A55E292886B43A1777CBDFB235FE64E99 +-C1DBF06199C50646CC9733B61B4A9D2D8A27ED08AF2FBAFA6CD3786256B90D69 +-CD5792B684E5EF4D2F7291DB544BABC6A2BDB963AEBD2205564A2AEB785E66C3 +-D744F883DD86161B08DF018DEB6B6D1079C0BBF0EC2D9E56A23D5112A4357512 +-2C10305B350C06080FC12D147E90E4C225206F240678E37618310A70AA2831F4 +-37940949CED52E922D3F6104DBC33C01D4DB87374798869A05774604317A45C1 +-AB5552EA311028E797670DFD91A0A868B7E3AC22C5605ADF4B1FC1B421430D58 +-646161CB61DEBAD8E29496E0A60033082670ABA70D0E82482769D833930AD3E4 +-CF773CC336E3D65655DD81C10E75206DAA62A1C25224C269007159F02202B920 +-BC79BB3C51A960B4B34C0DE830F819D95108559FAB6DC1FFE760353006957EC9 +-18F2D6036784B1E63612642E568C10BEA46BAD19F5BAA7E5A6CE604775486E82 +-CC534234A7D0955AD8D0444F87882BB8411A57C32758850D06F5BE8BEA49CA80 +-44D166008A36D7E8E62DA68DD97E4C6144C26176C453D4563E9DFDF96B983157 +-DAAE4DB6766C667DB9CE94BBB4343C7C04DD9453115004015BD87D9859A7BE14 +-56D4F24D09013C6439B8D09DC6FE3D21F8E066F546B261D7E1F5E2A536A4A4A0 +-55214DE4491310FB3661BD54206C2F4B890C38C9C9E696E9C8CCF1B3CC2D38C8 +-6B23993289949C92741FB94223B349FB9D3B4F7DFBC103EF24F5BED92A2D2AE8 +-A4D0EE2C943D2F323047BD805F23DA2919932DC137C25A18F9C17CD4D4D24F9C +-DDB11FC85577EB76B721F2930DD8DD1E18E42BAA5AF0B3169ACF4BF993DF06D0 +-87335BA5658755EEE65234CF3FF3EA2F2A380FD775E77608671D1488C3A5E84C +-8CF88367A10ECD309EA1DD4EDC1F81B6E9B01C22AAA713538E763A1F8DEAEB4D +-E9E4CD1986E349BFDC0483C04D7F6375768C992F419A579282F92633415EC4B2 +-112F51F54AE09154290BC196B716D770E085693B8C7CE7229052DD7C0A492D53 +-EF292186E9F3D034174686201F55CC39C45268069E7464D50173C97F110B3EE2 +-78AC5146B13BAB875DA503827FE72A581AFF98D888B57A182D8112505A3D7B6E +-C454F0F3169705A2020CA21A42105EAEF9D3097DF9ACA15A02E5E11C32D77191 +-D713C1A5B68386191734DC1BE4742049DE4EB83F021332211F3B1BF4DA82C9A1 +-858B9A0C7ADD09E04DAC4B4F1531EA8B8BE18B468CAA17B62DFDB5237D0A60D8 +-DCA89441A83AC95CFCCDDACEE91D083A9F7F9EB6EB82629EBFF12A1634857EA9 +-15746B8D50526BB2B59E1A9BE31BB2DE8A39B3EF54197212437B6EF901A1C17D +-903F9CFB9E3FA003CCDDE4E0A08188CDD0294E3C8F5AD2B0A1DCB4D10AA63399 +-F56F24040C4164D48B0BE444B8CB4D49B1CEF36DC0EB5481030535B319138449 +-F14E15A196ECFFCFB68C41AE6D17FD451E304F3D8CD69B4ADF3B2156576D76FB +-91BC28CB8A8C88CF064F8BACD875E02ED155C3A82372F8FE3944354033380F08 +-FF9DB351E41D1D55C7695656CAF9896DB31A17C56359657C4184E5A1C2DCBC8E +-7D30725012E978684E061EB95A96AB322233C31E32BDA27BD56A5474C1111EA1 +-317E648972DE731F1E948DE47465B8904DB2FB4F88AED23680588DCBE46CCA4E +-EB0219B30EEC46FF526D4486AE652A9923FBA7C797994A49A8238905B563C8D3 +-D04EB3ED7C976CEFE417CEB44543B2A75EA85E72B7C7AF4C74F9C344F317A3D6 +-77CF788D55DDEF7B72CECAD7089591A2F1F7424D11E6B419220601F649A3A890 +-CD13939CAECB1FE37B02E32D496869B6012FBDD95FDB34DAFA2DE6D6E4BDDE7C +-AB6577A1F2675B234FC08862D5F0A4DBAB620DC48A9666375A56449FA172203B +-C6D1D8FB2AEB3E22625D6473D0E72FA6613891325305A131810A9AEA7617BEBE +-D54FDEAFF2A9B5B9A9478D106499CDC9D19AC213BBFF2428275C63AC554E82CE +-F2D720DD1741B8B5955D79FBBD44728A3500123FCFFB734AC4B3496AB46CA641 +-982893501C4B57C5F14A2D9BD3319DCF235851B0F2177BD3990CC513349FF634 +-D0EF0A167ACBB5C7FB0CA612924DCDA1E1D9624F25B1FB143A6D16B45FF3C61A +-6F1DF7CABA79FE112D193B7E0FACFBA45BA8D12CBC7F094768D2EA2A6572CAC1 +-ECF142DFFDD1D5680E9439F9AC5F5911F996C62B055604EF00779A6D0D1E3E73 +-B2DCCF08DB984036701A7E3AAA196846DBB69D6BF74EBBA07C4A2273455590F5 +-23F39BD8B4FB8617739AEFD37EBB544E9D8EBDF8398FC3EB2806137E68F2662E +-D9E67EAAA3BC30D91928B7C57747B03E114729A27B4B2BD31BC49F50A9E4CED0 +-CA54D6A3D02656290F86A9779CBFB1251019B05266801C74FE5F4D1CAF978561 +-789143762FD72F7926D40227EBCE392DAA72F7F2B5C31BDB93DC875A22D45B02 +-261997B4C1CB325722ADE2C5DD0DED7834BA7C5098E9501643C2FDB583C96DAE +-68C23D62BA1B6466A232331E57EC3026 ++4E8449D1EEAF4F465AB76DF3E9154FB772ACCABB57F5FC69359E8BCE8711ABCC ++AF2177BCDB1586041B4A56C7CBC0DACC19B606361A89340DC959157F14B5C38F ++86A932CABD3D6D73813B7281AA918E00EA61A0FCE830A9DDB9747919885EF414 ++3EC6284A8FFFCAAA5C7C7652574E33ADEDC0E7FA2C123EB4BCB56AA77F3EB8A4 ++4FB75816910602C87F60961BC5D7028C7D6E26AD6722E913FD0E83FD885E5411 ++6A908DFA468D378F78DAA45AE6179738AB46A529BC3E61698B56ADC7A7B60A65 ++6B718450700F8169A8CC7305708921DBEA34D4540DB21391A228277D9CBC3FEB ++6D30CC8073183F89C707F4D4B5A5F2436BAACFBFBE90CC8EA1A6981E6D7B6580 ++B9819E6F36073B25EB0BF11910A08912E5A6EAA1B97FF229911ED07A6FF97562 ++85BCD63874EE79085D6C3D9132418A92BBCED7F3AA615C7A902E57F574FFB2C8 ++ACBB2869F95AAFD08B27D82A9A85658511EDDC1DC1F0D1A492959B168EAA2D43 ++D45B89E2DC07F9A5D91F34037827713C13F5A53BEBDE289EE363369905C7F14A ++B0CBD602CB2D3488848372186B508D2CA927A8979C29F46CE393A7078F24D62D ++B0428ADFB6D452DC4C658020D5576731B79CEFADD9D56E24D9496EE391F7B126 ++90B06BB061778EBEB130D1E346076F236A3BC101F87DBFE7F1666501ABED2D27 ++635ED62A08433D5C3F3B65EC15C62085568D7FC7032A82253D58A42543788C91 ++46B73BAD9EA4167D28E25C0DB3FB529329C6CCCD900F6BB09E367D7B7D12FF13 ++BECD7BFC51012FEBA1AFAEBFD46FC9C357589C7A4C46D5BE89CAF54820F2AB6E ++91C9CB9EFB9C1E479D8A2EAE0EBF643C328CD55E3F1A25FF5069227153934C37 ++295AE1F557605A6586FF686BF84C0FCBFC9F296C5D758CAF6CEAE0B2FC908935 ++5F48ACDBD827D8DD01F329C17E19643C0E48D771D045292C030A3B9DE5CB8012 ++4F0D86F93ED760580B699C4628DD26AD05DAB8BE89A20197B2C143B1A017A1E8 ++62E130149E712A31B2F704F28C4CF5ABBD0C58D2DAD734102CC19286CD5B09A2 ++54D04629C168049152994919201BFC3C340484CD03CC48092E5D118EFE3A2081 ++45E9319A5037802C7B64F380FD5FB482501C80688B1717BAE9B65FEA5EDD9834 ++F993B5A6A38316110E240020EEF29A84C93EDCD03A5F4EC5C4A6D282BE8D6250 ++B89D3F4F43808CEF3091F467310B389DF5D1AA326DD84C6A97E0EC5204094349 ++D025F3AF3338A53BA3F60B5E41ED07053B88808C577A7DB9E961172232CF3EEC ++0EE7BF9382C92D6E2E416FE349AAA783E442B2AFBCDBA9AF76345C34C4737842 ++EE551C762D9080BD893CAB16B5A8D230F2763CC33410C1A40BB91D208656A0B5 ++228FC9E934CAA6C346A0F904383E03BE85C88799D1EF66D2FA758E3BE44F4C12 ++0FF847EA749E582C4C7C4533AB451A32A160C87A022856A16E872C45ECF38593 ++99426D9915F0D7B8058F36313514CFE5E234280271A5020E33B54B698190288B ++298A494DAF30EB6AF4519D484C5FE713FE2DD23EF282F9051FDCDC358A3665B5 ++19A82208AED8DF16FDC2C0F16AFE20534F508B2F68427C5A1F41C09C5547E569 ++FA26A0E7EE73F933B21EA6F9B4F5C2AA57E31528EBA49D2ED5E3D72775FAAD6C ++80E05C34229F0DAF0726EF143353FBEBC1DAF98CFE04375764C417F27FBB9EBA ++EE0E4AAB3C88E9A9622A49C7DA40E36A1B5079CC969C58C22EDBF057233DF18F ++F1929248F21F593511B4073968F054FF5FD71449280C788427EAEEB743C62997 ++3127CFE70FF1C75F5D69AF6FFB39B65AFC8C1C87FDE8BA8270BB49FBD79EFDEE ++F080921B57E68A70999BEA0D32774AD2EAFCE0716FEA155321CA9E3178AC9B35 ++23EEA41630802437E34E5B830EAA9E7F4B60EA8AE1D5E2D956536C54E886CE7E ++ED683D7237B609CC8F8381495E9DA5196FBEDFEB376A4AC83A4B7EA013738900 ++EB2C74B872DB696FEC92E7F2D600F86A6AE86F74AB260101ACD9CC412854DBB1 ++27EA84E717BAF50026ADEA7152E198BE67FE8C578FAE0A9DC7E8D54FCBFA4623 ++AB9B44963DD8C0DF431A7E51626D0ADE833F0CCDA033D774357123BDA43C7A81 ++CDA0314D29171E63AE5681CE44BDDAB1F88FD0AB348238D124AE70B1F1DE236F ++BE21FB0E7CD519418E6754CAF3D0D8925E9F487342BBCC38ED48B8530F6BE517 ++2462C7F5BC02353015E310737CE43A2FD42A696939853B1586CBF1FF4278F9E9 ++69A0D479747AB119CE954F3B5B6FE6B0C9BE9303B6EE6A401A4A56D2E82B5505 ++F221AEB3B213DCD505F9B545D4620EF79F39AD96C2F721B1CE9168B38CABEEE7 ++1FAB3DD04789D13AEC29A6C8A6C9E90226762C32F55A24786119EF2B8CD39A21 ++07FC5D3E82B3607874D36017259B2C0F2FAB92EECEB4DD67341FA3479FB3D8F0 ++008FB2334F65452ECD9B63BC631C7B88E0FB4551D83FBA9C26102FAAA385ECA5 ++BABE43E1F4CCE56432ACC73B3C055BB66A4E9171F2D9A5025A1475A809F72FCA ++363C1EE45E56EB67E49847441DCAEC24CD41F0DE7F5786593977AC666372F7E0 ++49F9FDC4935D5CAAB59657CBB943662D873A35CF689518400126CF8ED925F48E ++E7789A14D250F3B26E64C19B3B95E271401A7049DB5734F56FD93A3868894AF5 ++97BC6580D5A6EE8BE7CBFD9D506BDA6BCCB48C94810FE20426FF1C539637117D ++406AD402F7D58E786680C2BE04365A0116DF06EDF27F216AF5843E59549F6297 ++0D9334D3BDE3E438145E1D6AAD2FD3B17960AE6E7B303F7DFE5910585096B263 ++AD228406A1703C02C13FF035F7AB284E973F0A61DD8A9BEBE25A855D0BAB458B ++9BC4727092ADC42C9591A11B51A98F45360F69F5BC077FA992E1DA01E7719900 ++4F3D3E2B0AC4A2979881AC9EE688F30E1F529A37FEAEE3F431AF0243D8D684A9 ++DBA9853CC29FA29D8FDD16B678042F274DDEF3E446CEE0E2FC2C39AB9D3F3DFF ++E8255CBBB7B8DD2F0BE380D102CB0CA37C5C7769F185A3701465B2E7988A776D ++C4E76415394BE5C412930C90D0E534980E142A98885E7633F1F29739F7282053 ++109C533D07E50A2270C7F97BB7AB5E1CC0F6119966E2E360FC2B47F59E89BC8C ++4947098A292EC3EE89D452EE59E3E7C4FBA060F2D40615E452333217575B402A ++4896AB6ED76413AA936B267E5351675C3BC5A90C839360A56F4C1A1E4215BAA6 ++24D019BAD61FEE4C0B7762FB3366011BCC6424154A6D373354F76128631B48E8 ++B9F0A200E8396F9404F45C642842F62520AE92BE5C287827281868FD260FFB70 ++1913BEC4905EEDC8559BCBAD374650D7892AE2C625E0890AF2C90BF556D0D551 ++C5852D29C088CEE7294450A639E048FC769A5A187369F9DC17CBBAA803DEAD08 ++6A00B91D2BE90B11EBFC812341A3C939849DE7BBD0914C2593686A01227D4582 ++07CF57B53E84D0DC03C4AB1136B5128374ED306218E4016F158F35322EC15AE9 ++8F04FE605B86DF6DA8D4C089E0AB9690C8125D58316424CE812A37CB1AC5FF90 ++E11F0A17695A00D2D061472A49E39B4C97EEAC5E8CEEE4E229BE75BE0D31F3B1 ++BB7B2102E4C2E53FA1456BE35836815CF5BD741C5267718CA6B79DC908FDB596 ++53F8EEC53D3992810FB61D2B98D482F47311B0F26EBE42273C585DFEFDE2EDAC ++79A11A3A95E8E607AAB2BE3C0C227735B71172739E1BF875BBAACA859B637A1D ++7249865EDF086DA2F2FC40FE7FDAA1340CB4E49C98ED5F34BF72C2D655F9F405 ++E1FD0B2F34C55BA0B24F4E33A6392ED9C7E4D5740B82C95C05EF8AF55FA570C8 ++C800652D8E6BBCD55C219FF339DCD9CE35CC6121EAB72101F738374416CA3D42 ++A14F241859E1F449189954647DC5AC19663B8974C026F17EDFCDF03BA7367D54 ++0BEBAD82AF173E3443085659942DBFA9E8A218E3BD9B10D166EC7E1ECAD4F50E ++8177B9B2B6B6B14C1B42854DE88FA1188EA8DD329279D22925804D9CDAD6B2BA ++F5B32670A020C26A6D6AB92FD3316BA90EDAB65628B9891AF4BB7EA702C96ABE ++ + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 +@@ -5481,11 +5472,11 @@ + 43 30 62 65 54 57 63 60 59 62 65 39 1[65 1[23 23 42 42 + 42 42 42 42 42 42 42 42 42 23 28 23 65 42 32 32 23 4[42 + 23 18[69 46 46 48 11[{}87 83.022 /CMR10 rf /Fy 134[51 +-2[51 54 2[38 1[54 49 54 1[27 2[27 4[54 2[49 14[72 13[75 +-2[73 8[49 49 4[49 1[49 3[27 44[{}19 99.6264 /CMR12 rf +-/Fz 140[48 49 14[54 1[60 28[88 68[{}5 119.552 /CMTI12 +-rf /FA 136[96 1[73 1[52 51 2[66 73 2[70 7[58 1[66 28[101 +-17[66 1[66 1[36 4[51 51 40[{}15 143.462 /CMR17 rf end ++2[51 54 5[49 54 4[27 3[43 54 2[49 14[72 7[50 5[75 11[49 ++4[49 49 1[49 3[27 44[{}17 99.6264 /CMR12 rf /Fz 140[48 ++49 14[54 1[60 28[88 68[{}5 119.552 /CMTI12 rf /FA 136[96 ++1[73 1[52 51 2[66 73 2[70 7[58 1[66 28[101 17[66 1[66 ++1[36 4[51 51 40[{}15 143.462 /CMR17 rf end + %%EndProlog + %%BeginSetup + %%Feature: *Resolution 600dpi +@@ -5496,9 +5487,9 @@ + end + %%EndSetup + %%Page: 1 1 +-TeXDict begin 1 0 bop 1070 2140 a FA(Darcs)43 b(2.0.0)f(\(unkno)l(wn\)) ++TeXDict begin 1 0 bop 1070 2140 a FA(Darcs)43 b(2.0.2)f(\(unkno)l(wn\)) + 1576 2322 y Fz(Dar)-6 b(cs)1412 2688 y Fy(Da)m(vid)33 +-b(Roundy)1445 2928 y(April)g(7,)f(2008)p eop end ++b(Roundy)1429 2928 y(June)h(23,)e(2008)p eop end + %%Page: 2 2 + TeXDict begin 2 1 bop 739 282 a Fx(2)p eop end + %%Page: 3 3 +@@ -5525,248 +5516,240 @@ + (.)h(.)f(.)h(.)g(.)f(.)h(.)90 b(14)415 2697 y(2.5)84 + b(Building)28 b(darcs)e(from)h(the)h(rep)r(ository)61 + b(.)41 b(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.) +-90 b(15)415 2799 y(2.6)84 b(Building)28 b(darcs)e(with)i(git)h(.)41 +-b(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h +-(.)f(.)h(.)g(.)f(.)h(.)90 b(16)415 2900 y(2.7)84 b(Submitting)29 +-b(patc)n(hes)e(to)g(darcs)37 b(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f +-(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)90 b(16)291 +-3086 y Fv(3)76 b(Getting)31 b(started)1998 b(17)415 3188 +-y Fx(3.1)84 b(Creating)27 b(y)n(our)f(rep)r(ository)34 ++90 b(15)415 2799 y(2.6)84 b(Submitting)29 b(patc)n(hes)e(to)g(darcs)37 ++b(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.) ++h(.)g(.)f(.)h(.)90 b(16)291 2985 y Fv(3)76 b(Getting)31 ++b(started)1998 b(17)415 3086 y Fx(3.1)84 b(Creating)27 ++b(y)n(our)f(rep)r(ository)34 b(.)42 b(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f ++(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)90 ++b(17)415 3188 y(3.2)84 b(Making)27 b(c)n(hanges)h(.)42 ++b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g ++(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)90 b(18)415 3289 ++y(3.3)84 b(Making)27 b(y)n(our)f(rep)r(ository)g(visible)i(to)f(others) ++50 b(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)90 ++b(18)415 3391 y(3.4)84 b(Getting)28 b(c)n(hanges)e(made)i(to)f(another) ++g(rep)r(ository)35 b(.)42 b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.) ++90 b(19)415 3492 y(3.5)84 b(Mo)n(ving)27 b(patc)n(hes)g(from)g(one)g ++(rep)r(ository)f(to)h(another)56 b(.)41 b(.)h(.)f(.)h(.)f(.)h(.)g(.)f ++(.)h(.)90 b(19)606 3594 y(3.5.1)k(All)28 b(pulls)36 b(.)42 ++b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g ++(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)90 b(19)606 3696 ++y(3.5.2)k(Send)28 b(and)f(apply)g(man)n(ually)64 b(.)42 ++b(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)90 ++b(19)606 3797 y(3.5.3)k(Push)32 b(.)42 b(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.) ++f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h ++(.)g(.)f(.)h(.)90 b(20)606 3899 y(3.5.4)k(Push)27 b(|apply-as)70 + b(.)42 b(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.) +-h(.)f(.)h(.)g(.)f(.)h(.)90 b(17)415 3289 y(3.2)84 b(Making)27 +-b(c)n(hanges)h(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h +-(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)90 +-b(18)415 3391 y(3.3)84 b(Making)27 b(y)n(our)f(rep)r(ository)g(visible) +-i(to)f(others)50 b(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f +-(.)h(.)90 b(18)415 3492 y(3.4)84 b(Getting)28 b(c)n(hanges)e(made)i(to) +-f(another)g(rep)r(ository)35 b(.)42 b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g +-(.)f(.)h(.)90 b(19)415 3594 y(3.5)84 b(Mo)n(ving)27 b(patc)n(hes)g +-(from)g(one)g(rep)r(ository)f(to)h(another)56 b(.)41 +-b(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)90 b(19)606 3696 +-y(3.5.1)k(All)28 b(pulls)36 b(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.) +-h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h +-(.)90 b(19)606 3797 y(3.5.2)k(Send)28 b(and)f(apply)g(man)n(ually)64 ++h(.)f(.)h(.)g(.)f(.)h(.)90 b(20)606 4000 y(3.5.5)k(Sending)27 ++b(signed)h(patc)n(hes)e(b)n(y)i(email)72 b(.)42 b(.)f(.)h(.)g(.)f(.)h ++(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)90 b(21)415 4102 y(3.6)84 ++b(Reducing)28 b(disk)f(space)g(usage)36 b(.)41 b(.)h(.)f(.)h(.)g(.)f(.) ++h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)90 ++b(24)606 4203 y(3.6.1)k(Linking)27 b(b)r(et)n(w)n(een)h(rep)r ++(ositories)78 b(.)42 b(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g ++(.)f(.)h(.)90 b(24)606 4305 y(3.6.2)k(Alternate)27 b(formats)g(for)g ++(the)h(pristine)g(tree)57 b(.)42 b(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h ++(.)90 b(24)291 4491 y Fv(4)76 b(Con\014guring)31 b(darcs)1904 ++b(27)415 4592 y Fx(4.1)84 b(prefs)48 b(.)41 b(.)h(.)g(.)f(.)h(.)f(.)h ++(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.) ++f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)90 b(27)415 4694 ++y(4.2)84 b(En)n(vironmen)n(t)26 b(v)-5 b(ariables)53 ++b(.)41 b(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.) ++f(.)h(.)f(.)h(.)g(.)f(.)h(.)90 b(30)415 4795 y(4.3)84 ++b(General-purp)r(ose)26 b(v)-5 b(ariables)57 b(.)41 b(.)h(.)f(.)h(.)g ++(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)90 ++b(31)415 4897 y(4.4)84 b(Remote)28 b(rep)r(ositories)81 + b(.)42 b(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.) +-h(.)90 b(19)606 3899 y(3.5.3)k(Push)32 b(.)42 b(.)f(.)h(.)f(.)h(.)g(.)f +-(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.) +-f(.)h(.)g(.)f(.)h(.)90 b(20)606 4000 y(3.5.4)k(Push)27 +-b(|apply-as)70 b(.)42 b(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g +-(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)90 b(20)606 4102 +-y(3.5.5)k(Sending)27 b(signed)h(patc)n(hes)e(b)n(y)i(email)72 +-b(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)90 +-b(21)415 4203 y(3.6)84 b(Reducing)28 b(disk)f(space)g(usage)36 +-b(.)41 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.) +-f(.)h(.)g(.)f(.)h(.)90 b(24)606 4305 y(3.6.1)k(Linking)27 +-b(b)r(et)n(w)n(een)h(rep)r(ositories)78 b(.)42 b(.)f(.)h(.)f(.)h(.)g(.) +-f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)90 b(24)606 4406 +-y(3.6.2)k(Alternate)27 b(formats)g(for)g(the)h(pristine)g(tree)57 +-b(.)42 b(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)90 b(24)291 +-4592 y Fv(4)76 b(Con\014guring)31 b(darcs)1904 b(27)415 +-4694 y Fx(4.1)84 b(prefs)48 b(.)41 b(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.) +-g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f +-(.)h(.)f(.)h(.)g(.)f(.)h(.)90 b(27)415 4795 y(4.2)84 +-b(En)n(vironmen)n(t)26 b(v)-5 b(ariables)53 b(.)41 b(.)h(.)f(.)h(.)f(.) +-h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h +-(.)90 b(30)415 4897 y(4.3)84 b(General-purp)r(ose)26 +-b(v)-5 b(ariables)57 b(.)41 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h +-(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)90 b(31)415 +-4998 y(4.4)84 b(Remote)28 b(rep)r(ositories)81 b(.)42 +-b(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f +-(.)h(.)f(.)h(.)g(.)f(.)h(.)90 b(32)1702 5208 y(3)p eop +-end ++h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)90 b(32)415 4998 y(4.5)84 ++b(Highligh)n(ted)27 b(output)47 b(.)42 b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.) ++g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)90 ++b(34)1702 5208 y(3)p eop end + %%Page: 4 4 + TeXDict begin 4 3 bop 739 282 a Fx(4)2351 b Fu(CONTENTS)863 +-515 y Fx(4.5)84 b(Highligh)n(ted)28 b(output)47 b(.)41 +-b(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f +-(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)90 b(33)863 616 y(4.6)84 +-b(Character)26 b(escaping)h(and)g(non-ASCI)r(I)h(c)n(haracter)e(enco)r +-(dings)76 b(.)41 b(.)h(.)g(.)f(.)90 b(34)739 800 y Fv(5)76 +-b(Best)32 b(practices)2058 b(37)863 900 y Fx(5.1)84 b(In)n(tro)r +-(duction)26 b(.)41 b(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.) +-g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)90 +-b(37)863 1000 y(5.2)84 b(Creating)27 b(patc)n(hes)61 +-b(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.) +-h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)90 b(37)1054 +-1101 y(5.2.1)k(Changes)38 b(.)j(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h +-(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)90 +-b(38)1054 1201 y(5.2.2)k(Keeping)27 b(or)g(discarding)f(c)n(hanges)80 +-b(.)42 b(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)90 +-b(38)1054 1301 y(5.2.3)k(Unrecording)26 b(c)n(hanges)42 ++515 y Fx(4.6)84 b(Character)26 b(escaping)h(and)g(non-ASCI)r(I)h(c)n ++(haracter)e(enco)r(dings)76 b(.)41 b(.)h(.)g(.)f(.)90 ++b(34)739 699 y Fv(5)76 b(Best)32 b(practices)2058 b(37)863 ++800 y Fx(5.1)84 b(In)n(tro)r(duction)26 b(.)41 b(.)h(.)f(.)h(.)f(.)h(.) ++g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f ++(.)h(.)f(.)h(.)g(.)f(.)90 b(37)863 900 y(5.2)84 b(Creating)27 ++b(patc)n(hes)61 b(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.) ++h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)90 ++b(37)1054 1000 y(5.2.1)k(Changes)38 b(.)j(.)h(.)f(.)h(.)g(.)f(.)h(.)f ++(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.) ++g(.)f(.)90 b(38)1054 1101 y(5.2.2)k(Keeping)27 b(or)g(discarding)f(c)n ++(hanges)80 b(.)42 b(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f ++(.)90 b(38)1054 1201 y(5.2.3)k(Unrecording)26 b(c)n(hanges)42 + b(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f +-(.)h(.)g(.)f(.)90 b(38)1054 1402 y(5.2.4)k(Sp)r(ecial)28 ++(.)h(.)g(.)f(.)90 b(38)1054 1301 y(5.2.4)k(Sp)r(ecial)28 + b(patc)n(hes)f(and)g(p)r(ending)c(.)42 b(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.) +-f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)90 b(39)863 1502 y(5.3)84 ++f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)90 b(39)863 1402 y(5.3)84 + b(Using)28 b(patc)n(hes)40 b(.)i(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.) + f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f +-(.)90 b(40)1054 1603 y(5.3.1)k(Dep)r(endencies)47 b(.)42 ++(.)90 b(40)1054 1502 y(5.3.1)k(Dep)r(endencies)47 b(.)42 + b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h +-(.)f(.)h(.)f(.)h(.)g(.)f(.)90 b(40)1054 1703 y(5.3.2)k(Branc)n(hes:)35 ++(.)f(.)h(.)f(.)h(.)g(.)f(.)90 b(40)1054 1603 y(5.3.2)k(Branc)n(hes:)35 + b(just)29 b(normal)d(rep)r(ositories)61 b(.)42 b(.)f(.)h(.)g(.)f(.)h(.) +-f(.)h(.)f(.)h(.)g(.)f(.)90 b(40)1054 1803 y(5.3.3)k(Mo)n(ving)27 ++f(.)h(.)f(.)h(.)g(.)f(.)90 b(40)1054 1703 y(5.3.3)k(Mo)n(ving)27 + b(patc)n(hes)g(around|no)f(v)n(ersions)40 b(.)h(.)h(.)g(.)f(.)h(.)f(.)h +-(.)f(.)h(.)g(.)f(.)90 b(41)1054 1904 y(5.3.4)k(T)-7 b(ags|v)n(ersions) ++(.)f(.)h(.)g(.)f(.)90 b(41)1054 1803 y(5.3.4)k(T)-7 b(ags|v)n(ersions) + 60 b(.)42 b(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f +-(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)90 b(41)1054 2004 y(5.3.5)k(Con\015icts) ++(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)90 b(41)1054 1904 y(5.3.5)k(Con\015icts) + 25 b(.)41 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h + (.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)90 b(42)1054 +-2104 y(5.3.6)k(Resolving)27 b(con\015icts)57 b(.)42 b(.)f(.)h(.)f(.)h ++2004 y(5.3.6)k(Resolving)27 b(con\015icts)57 b(.)42 b(.)f(.)h(.)f(.)h + (.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)90 +-b(43)863 2205 y(5.4)84 b(Distributed)29 b(dev)n(elopmen)n(t)e(with)h ++b(43)863 2104 y(5.4)84 b(Distributed)29 b(dev)n(elopmen)n(t)e(with)h + (one)f(primary)f(dev)n(elop)r(er)39 b(.)i(.)h(.)f(.)h(.)g(.)f(.)90 +-b(43)863 2305 y(5.5)84 b(Dev)n(elopmen)n(t)28 b(b)n(y)f(a)g(small)g ++b(43)863 2205 y(5.5)84 b(Dev)n(elopmen)n(t)28 b(b)n(y)f(a)g(small)g + (group)g(of)g(dev)n(elop)r(ers)g(in)h(one)f(o\016ce)e(.)41 +-b(.)h(.)g(.)f(.)90 b(44)863 2406 y(5.6)84 b(P)n(ersonal)26 ++b(.)h(.)g(.)f(.)90 b(44)863 2305 y(5.6)84 b(P)n(ersonal)26 + b(dev)n(elopmen)n(t)76 b(.)42 b(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f + (.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)90 +-b(44)1054 2506 y(5.6.1)k(Priv)-5 b(ate)27 b(patc)n(hes)41 ++b(44)1054 2406 y(5.6.1)k(Priv)-5 b(ate)27 b(patc)n(hes)41 + b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h +-(.)f(.)h(.)f(.)h(.)g(.)f(.)90 b(45)739 2690 y Fv(6)76 +-b(Darcs)33 b(commands)1934 b(47)863 2790 y Fx(6.1)84 ++(.)f(.)h(.)f(.)h(.)g(.)f(.)90 b(45)739 2589 y Fv(6)76 ++b(Darcs)33 b(commands)1934 b(47)863 2690 y Fx(6.1)84 + b(Common)28 b(options)f(to)g(darcs)g(commands)35 b(.)41 + b(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)90 +-b(48)863 2891 y(6.2)84 b(Options)27 b(apart)g(from)g(darcs)g(commands) ++b(48)863 2790 y(6.2)84 b(Options)27 b(apart)g(from)g(darcs)g(commands) + 51 b(.)41 b(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.) +-90 b(56)863 2991 y(6.3)84 b(Getting)28 b(help)c(.)41 ++90 b(56)863 2891 y(6.3)84 b(Getting)28 b(help)c(.)41 + b(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h +-(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)90 b(56)1054 +-3091 y(6.3.1)k(darcs)27 b(help)38 b(.)k(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f ++(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)90 b(57)1054 ++2991 y(6.3.1)k(darcs)27 b(help)38 b(.)k(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f + (.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.) +-90 b(56)863 3192 y(6.4)84 b(Creating)27 b(rep)r(ositories)45 ++90 b(57)863 3091 y(6.4)84 b(Creating)27 b(rep)r(ositories)45 + b(.)d(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f +-(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)90 b(57)1054 3292 y(6.4.1)k(darcs)27 ++(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)90 b(57)1054 3192 y(6.4.1)k(darcs)27 + b(initialize)75 b(.)42 b(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.) + f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)90 b(57)1054 +-3392 y(6.4.2)k(darcs)27 b(get)79 b(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h ++3292 y(6.4.2)k(darcs)27 b(get)79 b(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h + (.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.) +-f(.)90 b(59)1054 3493 y(6.4.3)k(darcs)27 b(put)66 b(.)42 ++f(.)90 b(59)1054 3392 y(6.4.3)k(darcs)27 b(put)66 b(.)42 + b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g +-(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)90 b(60)863 3593 y(6.5)84 ++(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)90 b(60)863 3493 y(6.5)84 + b(Mo)r(difying)28 b(the)g(con)n(ten)n(ts)f(of)h(a)f(rep)r(ository)50 + b(.)42 b(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)90 +-b(61)1054 3694 y(6.5.1)k(darcs)27 b(add)56 b(.)42 b(.)f(.)h(.)g(.)f(.)h ++b(61)1054 3593 y(6.5.1)k(darcs)27 b(add)56 b(.)42 b(.)f(.)h(.)g(.)f(.)h + (.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.) +-h(.)g(.)f(.)90 b(61)1054 3794 y(6.5.2)k(darcs)27 b(remo)n(v)n(e)61 ++h(.)g(.)f(.)90 b(61)1054 3694 y(6.5.2)k(darcs)27 b(remo)n(v)n(e)61 + b(.)42 b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.) +-f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)90 b(62)1054 3894 y(6.5.3)k(darcs)27 ++f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)90 b(62)1054 3794 y(6.5.3)k(darcs)27 + b(m)n(v)79 b(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f + (.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)90 +-b(62)1054 3995 y(6.5.4)k(darcs)27 b(replace)64 b(.)42 ++b(62)1054 3894 y(6.5.4)k(darcs)27 b(replace)64 b(.)42 + b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h +-(.)f(.)h(.)f(.)h(.)g(.)f(.)90 b(63)863 4095 y(6.6)84 ++(.)f(.)h(.)f(.)h(.)g(.)f(.)90 b(63)863 3995 y(6.6)84 + b(W)-7 b(orking)27 b(with)h(c)n(hanges)63 b(.)42 b(.)f(.)h(.)f(.)h(.)f + (.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.) +-90 b(64)1054 4195 y(6.6.1)k(darcs)27 b(record)g(.)41 ++90 b(64)1054 4095 y(6.6.1)k(darcs)27 b(record)g(.)41 + b(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f +-(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)90 b(64)1054 4296 y(6.6.2)k(darcs)27 ++(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)90 b(64)1054 4195 y(6.6.2)k(darcs)27 + b(pull)52 b(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f + (.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)90 +-b(67)1054 4396 y(6.6.3)k(darcs)27 b(push)84 b(.)41 b(.)h(.)g(.)f(.)h(.) ++b(67)1054 4296 y(6.6.3)k(darcs)27 b(push)84 b(.)41 b(.)h(.)g(.)f(.)h(.) + f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h +-(.)g(.)f(.)90 b(69)1054 4497 y(6.6.4)k(darcs)27 b(send)h(.)42 ++(.)g(.)f(.)90 b(70)1054 4396 y(6.6.4)k(darcs)27 b(send)h(.)42 + b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g +-(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)90 b(71)1054 4597 ++(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)90 b(72)1054 4497 + y(6.6.5)k(darcs)27 b(apply)54 b(.)41 b(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h + (.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)90 +-b(74)863 4697 y(6.7)84 b(Seeing)28 b(what)f(y)n(ou'v)n(e)g(done)37 ++b(74)863 4597 y(6.7)84 b(Seeing)28 b(what)f(y)n(ou'v)n(e)g(done)37 + b(.)k(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f +-(.)h(.)f(.)h(.)g(.)f(.)90 b(78)1054 4798 y(6.7.1)k(darcs)27 ++(.)h(.)f(.)h(.)g(.)f(.)90 b(78)1054 4697 y(6.7.1)k(darcs)27 + b(whatsnew)h(.)42 b(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h +-(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)90 b(78)1054 4898 ++(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)90 b(78)1054 4798 + y(6.7.2)k(darcs)27 b(c)n(hanges)38 b(.)k(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.) + g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)90 +-b(78)1054 4998 y(6.7.3)k(darcs)27 b(sho)n(w)76 b(.)41 ++b(78)1054 4898 y(6.7.3)k(darcs)27 b(sho)n(w)76 b(.)41 + b(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f +-(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)90 b(80)p eop end ++(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)90 b(80)863 4998 y(6.8)84 ++b(More)27 b(adv)-5 b(anced)27 b(commands)36 b(.)42 b(.)f(.)h(.)f(.)h(.) ++g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)90 ++b(82)p eop end + %%Page: 5 5 + TeXDict begin 5 4 bop 291 282 a Fu(CONTENTS)2350 b Fx(5)606 +-515 y(6.7.4)94 b(darcs)26 b(sho)n(w)h(con)n(ten)n(ts)71 +-b(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.) +-h(.)g(.)f(.)h(.)90 b(80)415 615 y(6.8)84 b(More)27 b(adv)-5 +-b(anced)27 b(commands)36 b(.)41 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f +-(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)90 b(82)606 +-715 y(6.8.1)k(darcs)26 b(tag)75 b(.)41 b(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.) +-h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h +-(.)90 b(82)606 814 y(6.8.2)k(darcs)26 b(setpref)77 b(.)42 ++515 y(6.8.1)94 b(darcs)26 b(tag)75 b(.)41 b(.)h(.)g(.)f(.)h(.)f(.)h(.)f ++(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.) ++h(.)90 b(82)606 615 y(6.8.2)k(darcs)26 b(setpref)77 b(.)42 + b(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f +-(.)h(.)f(.)h(.)g(.)f(.)h(.)90 b(83)606 914 y(6.8.3)k(darcs)26 ++(.)h(.)f(.)h(.)g(.)f(.)h(.)90 b(83)606 715 y(6.8.3)k(darcs)26 + b(c)n(hec)n(k)58 b(.)42 b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f + (.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)90 +-b(84)606 1013 y(6.8.4)k(darcs)26 b(optimize)76 b(.)41 ++b(84)606 814 y(6.8.4)k(darcs)26 b(optimize)76 b(.)41 + b(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h +-(.)f(.)h(.)g(.)f(.)h(.)90 b(85)415 1113 y(6.9)84 b(Undoing,)28 ++(.)f(.)h(.)g(.)f(.)h(.)90 b(85)415 914 y(6.9)84 b(Undoing,)28 + b(redoing)e(and)h(running)h(in)f(circles)70 b(.)42 b(.)f(.)h(.)g(.)f(.) +-h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)90 b(87)606 1213 y(6.9.1)k(darcs)26 ++h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)90 b(87)606 1013 y(6.9.1)k(darcs)26 + b(amend-record)82 b(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f +-(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)90 b(87)606 1312 y(6.9.2)k(darcs)26 ++(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)90 b(87)606 1113 y(6.9.2)k(darcs)26 + b(rollbac)n(k)32 b(.)42 b(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h + (.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)90 +-b(88)606 1412 y(6.9.3)k(darcs)26 b(unrecord)65 b(.)41 ++b(88)606 1213 y(6.9.3)k(darcs)26 b(unrecord)65 b(.)41 + b(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h +-(.)f(.)h(.)g(.)f(.)h(.)90 b(89)606 1512 y(6.9.4)k(darcs)26 ++(.)f(.)h(.)g(.)f(.)h(.)90 b(89)606 1312 y(6.9.4)k(darcs)26 + b(obliterate)38 b(.)j(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h + (.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)90 b(90)606 +-1611 y(6.9.5)k(darcs)26 b(rev)n(ert)41 b(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.) ++1412 y(6.9.5)k(darcs)26 b(rev)n(ert)41 b(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.) + h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h +-(.)90 b(91)606 1711 y(6.9.6)k(darcs)26 b(unrev)n(ert)79 ++(.)90 b(92)606 1512 y(6.9.6)k(darcs)26 b(unrev)n(ert)79 + b(.)41 b(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.) +-f(.)h(.)f(.)h(.)g(.)f(.)h(.)90 b(92)415 1810 y(6.10)42 ++f(.)h(.)f(.)h(.)g(.)f(.)h(.)90 b(92)415 1611 y(6.10)42 + b(Adv)-5 b(anced)28 b(examination)f(of)g(the)h(rep)r(ository)53 + b(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)90 +-b(92)606 1910 y(6.10.1)52 b(darcs)26 b(di\013)74 b(.)41 ++b(93)606 1711 y(6.10.1)52 b(darcs)26 b(di\013)74 b(.)41 + b(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f +-(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)90 b(92)606 2010 y(6.10.2)52 ++(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)90 b(93)606 1810 y(6.10.2)52 + b(darcs)26 b(annotate)66 b(.)41 b(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f + (.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)90 +-b(94)606 2109 y(6.10.3)52 b(darcs)26 b(sho)n(w)76 b(.)42 ++b(94)606 1910 y(6.10.3)52 b(darcs)26 b(sho)n(w)76 b(.)42 + b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h +-(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)90 b(95)606 2209 y(6.10.4)52 +-b(darcs)26 b(sho)n(w)h(con)n(ten)n(ts)71 b(.)42 b(.)f(.)h(.)g(.)f(.)h +-(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)90 +-b(96)415 2309 y(6.11)42 b(Rarely)27 b(needed)g(and)h(obscure)e +-(commands)60 b(.)41 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f +-(.)h(.)90 b(97)606 2408 y(6.11.1)52 b(darcs)26 b(con)n(v)n(ert)53 ++(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)90 b(95)415 2010 y(6.11)42 ++b(Rarely)27 b(needed)g(and)h(obscure)e(commands)60 b(.)41 ++b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)90 ++b(98)606 2109 y(6.11.1)52 b(darcs)26 b(con)n(v)n(ert)53 + b(.)42 b(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.) +-h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)90 b(97)606 2508 y(6.11.2)52 ++h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)90 b(98)606 2209 y(6.11.2)52 + b(darcs)26 b(mark-con\015icts)66 b(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h + (.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)90 +-b(98)606 2607 y(6.11.3)52 b(darcs)26 b(dist)57 b(.)41 ++b(98)606 2309 y(6.11.3)52 b(darcs)26 b(dist)57 b(.)41 + b(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f +-(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)90 b(98)606 2707 y(6.11.4)52 ++(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)90 b(98)606 2408 y(6.11.4)52 + b(darcs)26 b(trac)n(kdo)n(wn)71 b(.)42 b(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.) + f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)90 +-b(98)606 2807 y(6.11.5)52 b(darcs)26 b(repair)41 b(.)h(.)g(.)f(.)h(.)f ++b(99)606 2508 y(6.11.5)52 b(darcs)26 b(repair)41 b(.)h(.)g(.)f(.)h(.)f + (.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.) +-g(.)f(.)h(.)48 b(100)291 2989 y Fv(A)k(Theory)33 b(of)e(patc)m(hes)1846 +-b(101)415 3089 y Fx(A.1)64 b(Bac)n(kground)45 b(.)d(.)f(.)h(.)f(.)h(.)g ++g(.)f(.)h(.)48 b(100)291 2690 y Fv(A)k(Theory)33 b(of)e(patc)m(hes)1846 ++b(101)415 2790 y Fx(A.1)64 b(Bac)n(kground)45 b(.)d(.)f(.)h(.)f(.)h(.)g + (.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.) +-h(.)f(.)h(.)g(.)f(.)h(.)48 b(101)415 3189 y(A.2)64 b(In)n(tro)r ++h(.)f(.)h(.)g(.)f(.)h(.)48 b(101)415 2890 y(A.2)64 b(In)n(tro)r + (duction)25 b(.)42 b(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.) + f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)48 +-b(101)415 3288 y(A.3)64 b(Applying)28 b(patc)n(hes)43 ++b(101)415 2989 y(A.3)64 b(Applying)28 b(patc)n(hes)43 + b(.)e(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g +-(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)48 b(102)606 3388 ++(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)48 b(102)606 3089 + y(A.3.1)74 b(Hunk)28 b(patc)n(hes)40 b(.)i(.)f(.)h(.)f(.)h(.)f(.)h(.)g + (.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)48 +-b(102)606 3487 y(A.3.2)74 b(T)-7 b(ok)n(en)26 b(replace)h(patc)n(hes)61 ++b(102)606 3189 y(A.3.2)74 b(T)-7 b(ok)n(en)26 b(replace)h(patc)n(hes)61 + b(.)41 b(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.) +-g(.)f(.)h(.)48 b(102)415 3587 y(A.4)64 b(P)n(atc)n(h)26 ++g(.)f(.)h(.)48 b(102)415 3288 y(A.4)64 b(P)n(atc)n(h)26 + b(relationships)43 b(.)f(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.) + h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)48 +-b(103)415 3687 y(A.5)64 b(Comm)n(uting)27 b(patc)n(hes)78 ++b(103)415 3388 y(A.5)64 b(Comm)n(uting)27 b(patc)n(hes)78 + b(.)42 b(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.) +-h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)48 b(103)606 3786 y(A.5.1)74 ++h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)48 b(103)606 3487 y(A.5.1)74 + b(Comp)r(osite)27 b(patc)n(hes)47 b(.)41 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f + (.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)48 +-b(103)606 3886 y(A.5.2)74 b(Ho)n(w)27 b(merges)f(are)h(actually)g(p)r ++b(103)606 3587 y(A.5.2)74 b(Ho)n(w)27 b(merges)f(are)h(actually)g(p)r + (erformed)21 b(.)41 b(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)48 +-b(105)415 3986 y(A.6)64 b(Con\015icts)32 b(.)42 b(.)f(.)h(.)f(.)h(.)f ++b(105)415 3687 y(A.6)64 b(Con\015icts)32 b(.)42 b(.)f(.)h(.)f(.)h(.)f + (.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.) +-h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)48 b(107)415 4085 y(A.7)64 ++h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)48 b(107)415 3786 y(A.7)64 + b(P)n(atc)n(h)26 b(string)h(formatting)74 b(.)42 b(.)f(.)h(.)f(.)h(.)g + (.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)48 +-b(108)291 4268 y Fv(B)56 b(DarcsRep)s(o)32 b(format)1828 +-b(109)291 4451 y(C)55 b(The)32 b(GNU)g(General)g(Public)g(License)1183 +-b(111)415 4550 y Fx(C.1)66 b(App)r(endix:)38 b(Ho)n(w)27 ++b(108)291 3969 y Fv(B)56 b(DarcsRep)s(o)32 b(format)1828 ++b(109)291 4152 y(C)55 b(The)32 b(GNU)g(General)g(Public)g(License)1183 ++b(111)415 4251 y Fx(C.1)66 b(App)r(endix:)38 b(Ho)n(w)27 + b(to)g(Apply)i(These)e(T)-7 b(erms)27 b(to)g(Y)-7 b(our)28 + b(New)f(Programs)66 b(.)48 b(117)p eop end + %%Page: 6 6 +@@ -6273,32 +6256,32 @@ + 3427 y(piler.)36 b(Y)-7 b(ou)28 b(should)f(ha)n(v)n(e)g(at)g(the)h(v)n + (ery)f(minim)n(um)h(v)n(ersion)e(6.4.)415 3552 y(It)k(is)g(a)g(go)r(o)r + (d)f(idea)g(\(but)i(not)f(required\))f(to)h(ha)n(v)n(e)f(soft)n(w)n +-(are)f(installed)i(that)g(pro)n(vide)291 3652 y(darcs)d(net)n(w)n(ork)g +-(access.)38 b(The)29 b Fr(libwww-dev)p Fx(,)c Fr(libwww-ssl-dev)d +-Fx(or)28 b Fr(libcurl)e Fx(pac)n(k)-5 b(ages)291 3751 +-y(new)n(er)27 b(than)i(than)f(7.18.0)f(are)g(recommended)h(b)r(ecause)g +-(they)g(pro)n(vide)f(pip)r(elining)i(sup-)291 3851 y(p)r(ort)18 +-b(sp)r(eed)g(up)h(HTTP)f(access.)33 b(They)18 b(ha)n(v)n(e)f(to)h +-(explicitly)h(c)n(hosen)e(with)i Fr(--with-libwww)291 +-3951 y Fx(or)26 b Fr(--with-curl-pipe)o(lin)o(in)o(g)p +-Fx(.)31 b(Otherwise,)c(darcs)f(will)h(automatically)g(lo)r(ok)f(for)h +-(one)291 4050 y(of)f(lib)r(curl,)h Fr(curl)e Fx(or)h +-Fr(wget)p Fx(.)34 b(Y)-7 b(ou)27 b(also)e(migh)n(t)i(w)n(an)n(t)f(to)g +-(ha)n(v)n(e)f(scp)i(a)n(v)-5 b(ailable)25 b(if)i(y)n(ou)f(w)n(an)n(t) +-291 4150 y(to)h(grab)f(y)n(our)h(rep)r(os)f(o)n(v)n(er)g(ssh.)14 +-b(.)g(.)415 4275 y(T)-7 b(o)29 b(use)f(the)i Fr(diff)d +-Fx(command)h(of)h(darcs,)f(a)h Fr(diff)e Fx(program)g(supp)r(orting)h +-(options)h Fr(-r)291 4375 y Fx(\(recursiv)n(e)i(di\013)6 +-b(\))34 b(and)e Fr(-N)g Fx(\(sho)n(w)g(new)h(\014les)g(as)f +-(di\013erences)g(against)g(an)g(empt)n(y)h(\014le\))g(is)291 +-4475 y(required.)41 b(The)29 b Fr(configure)d Fx(script)j(will)g(lo)r +-(ok)g(for)g Fr(gdiff)p Fx(,)f Fr(gnudiff)e Fx(and)j Fr(diff)f +-Fx(in)i(this)291 4574 y(order.)i(Y)-7 b(ou)19 b(can)f(force)g(the)h +-(use)g(of)f(another)g(program)f(b)n(y)h(setting)h(the)g +-Fr(DIFF)e Fx(en)n(vironmen)n(t)291 4674 y(v)-5 b(ariable)26 +-b(b)r(efore)h(running)h Fr(configure)p Fx(.)415 4799 +-y(T)-7 b(o)38 b(rebuild)h(the)g(do)r(cumen)n(tation)f(\(whic)n(h)h +-(should)g(not)f(b)r(e)i(necessary)c(since)j(it)g(is)291 ++(are)f(installed)i(that)g(pro)n(vide)291 3652 y(darcs)39 ++b(net)n(w)n(ork)g(access.)73 b(The)40 b Fr(libwww-dev)p ++Fx(,)g Fr(libwww-ssl-dev)34 b Fx(or)40 b Fr(libcurl)d ++Fx(pac)n(k-)291 3751 y(ages)e(new)n(er)h(than)h(than)f(7.18.0)f(are)h ++(recommended)g(b)r(ecause)g(they)h(pro)n(vide)e(pip)r(elin-)291 ++3851 y(ing)g(supp)r(ort)h(sp)r(eed)h(up)f(HTTP)g(access.)61 ++b(They)36 b(ha)n(v)n(e)f(to)h(b)r(e)g(explicitly)g(c)n(hosen)f(with)291 ++3951 y Fr(--with-libwww)25 b Fx(or)30 b Fr(--with-curl-pipel)o(in)o(in) ++o(g)p Fx(.)41 b(Otherwise,)31 b(darcs)f(will)h(automat-)291 ++4050 y(ically)g(lo)r(ok)h(for)g(one)g(of)h(lib)r(curl,)g ++Fr(curl)e Fx(or)h Fr(wget)p Fx(.)50 b(Y)-7 b(ou)32 b(also)f(migh)n(t)i ++(w)n(an)n(t)f(to)g(ha)n(v)n(e)f(scp)291 4150 y(a)n(v)-5 ++b(ailable)26 b(if)i(y)n(ou)f(w)n(an)n(t)g(to)g(grab)g(y)n(our)f(rep)r ++(os)h(o)n(v)n(er)e(ssh.)14 b(.)g(.)415 4275 y(T)-7 b(o)29 ++b(use)f(the)i Fr(diff)d Fx(command)h(of)h(darcs,)f(a)h ++Fr(diff)e Fx(program)g(supp)r(orting)h(options)h Fr(-r)291 ++4375 y Fx(\(recursiv)n(e)i(di\013)6 b(\))34 b(and)e Fr(-N)g ++Fx(\(sho)n(w)g(new)h(\014les)g(as)f(di\013erences)g(against)g(an)g ++(empt)n(y)h(\014le\))g(is)291 4475 y(required.)41 b(The)29 ++b Fr(configure)d Fx(script)j(will)g(lo)r(ok)g(for)g Fr(gdiff)p ++Fx(,)f Fr(gnudiff)e Fx(and)j Fr(diff)f Fx(in)i(this)291 ++4574 y(order.)i(Y)-7 b(ou)19 b(can)f(force)g(the)h(use)g(of)f(another)g ++(program)f(b)n(y)h(setting)h(the)g Fr(DIFF)e Fx(en)n(vironmen)n(t)291 ++4674 y(v)-5 b(ariable)26 b(b)r(efore)h(running)h Fr(configure)p ++Fx(.)415 4799 y(T)-7 b(o)38 b(rebuild)h(the)g(do)r(cumen)n(tation)f ++(\(whic)n(h)h(should)g(not)f(b)r(e)i(necessary)c(since)j(it)g(is)291 + 4899 y(included)29 b(in)h(h)n(tml)f(form)g(with)h(the)g(tarballs\),)f + (y)n(ou)f(will)i(need)f(to)g(ha)n(v)n(e)f(latex)h(installed,)291 + 4998 y(as)e(w)n(ell)g(as)g(latex2h)n(tml)g(if)h(y)n(ou)f(w)n(an)n(t)g +@@ -6368,29 +6351,29 @@ + 2212 y Fq(2.5)135 b(Building)45 b(darcs)g(from)g(the)g(rep)t(ository) + 291 2409 y Fx(T)-7 b(o)26 b(build)i(the)g(latest)f(darcs)f(from)h(its)g + (rep)r(ository)-7 b(,)26 b(y)n(ou)g(will)h(\014rst)g(need)h(a)e(w)n +-(orking)g(cop)n(y)291 2508 y(of)h(darcs.)36 b(Y)-7 b(ou)28 +-b(can)f(get)g(darcs)g(using:)291 2708 y Fr(\045)43 b(darcs)e(get)i(-v)f +-(http://darcs.net/)o(rep)o(os)o(/s)o(tab)o(le)291 2898 +-y Fx(and)27 b(once)g(y)n(ou)g(ha)n(v)n(e)f(the)i(darcs)f(rep)r(ository) +-f(y)n(ou)h(can)g(bring)g(it)h(up)g(to)f(date)h(with)g(a)291 +-3098 y Fr(\045)43 b(darcs)e(pull)415 3288 y Fx(The)25 +-b(rep)r(ository)d(do)r(esn't)j(hold)f(automatically)g(generated)f +-(\014les,)i(whic)n(h)g(include)g(the)291 3388 y(con\014gure)30 +-b(script)i(and)g(the)g(HTML)h(do)r(cumen)n(tation,)g(so)e(y)n(ou)g +-(need)h(to)g(run)g Fr(autoconf)291 3488 y Fx(\014rst.)415 +-3596 y(Y)-7 b(ou'll)37 b(need)g Fr(autoconf)d Fx(2.50)h(or)h(higher.)64 +-b(Some)36 b(systems)h(ha)n(v)n(e)e(more)h(than)h(one)291 +-3695 y(v)n(ersion)e(of)j Fr(autoconf)c Fx(installed.)66 +-b(F)-7 b(or)37 b(example,)j Fr(autoconf)34 b Fx(ma)n(y)j(p)r(oin)n(t)g +-(to)g(v)n(ersion)291 3795 y(2.13,)26 b(while)i Fr(autoconf259)23 +-b Fx(runs)k(v)n(ersion)f(2.59.)415 3903 y(Also)k(note)g(that)h +-Fr(make)e Fx(is)h(really)g("GNU)g(mak)n(e".)44 b(On)30 +-b(some)g(systems,)h(suc)n(h)f(as)g(the)291 4002 y(*BSDs,)d(y)n(ou)g(ma) +-n(y)g(need)g(to)h(t)n(yp)r(e)g Fr(gmake)d Fx(instead)j(of)f(mak)n(e)g +-(for)g(this)h(to)f(w)n(ork.)415 4110 y(If)k(y)n(ou)f(w)n(an)n(t)g(to)h +-(create)e(readable)h(do)r(cumen)n(tation)g(y)n(ou'll)g(need)h(to)f(ha)n +-(v)n(e)g(latex)g(in-)291 4210 y(stalled.)291 4409 y Fr(\045)43 +-b(autoconf)291 4509 y(\045)g(./configure)291 4608 y(\045)g(make)291 ++(orking)g(cop)n(y)291 2508 y(of)h(Darcs)g(2.)36 b(Y)-7 ++b(ou)28 b(can)f(get)h(darcs)e(using:)291 2708 y Fr(\045)43 ++b(darcs)e(get)i(-v)f(http://darcs.net/)291 2898 y Fx(and)27 ++b(once)g(y)n(ou)g(ha)n(v)n(e)f(the)i(darcs)f(rep)r(ository)f(y)n(ou)h ++(can)g(bring)g(it)h(up)g(to)f(date)h(with)g(a)291 3098 ++y Fr(\045)43 b(darcs)e(pull)415 3288 y Fx(The)25 b(rep)r(ository)d(do)r ++(esn't)j(hold)f(automatically)g(generated)f(\014les,)i(whic)n(h)g ++(include)g(the)291 3388 y(con\014gure)30 b(script)i(and)g(the)g(HTML)h ++(do)r(cumen)n(tation,)g(so)e(y)n(ou)g(need)h(to)g(run)g ++Fr(autoconf)291 3488 y Fx(\014rst.)415 3596 y(Y)-7 b(ou'll)37 ++b(need)g Fr(autoconf)d Fx(2.50)h(or)h(higher.)64 b(Some)36 ++b(systems)h(ha)n(v)n(e)e(more)h(than)h(one)291 3695 y(v)n(ersion)e(of)j ++Fr(autoconf)c Fx(installed.)66 b(F)-7 b(or)37 b(example,)j ++Fr(autoconf)34 b Fx(ma)n(y)j(p)r(oin)n(t)g(to)g(v)n(ersion)291 ++3795 y(2.13,)26 b(while)i Fr(autoconf259)23 b Fx(runs)k(v)n(ersion)f ++(2.59.)415 3903 y(Also)k(note)g(that)h Fr(make)e Fx(is)h(really)g("GNU) ++g(mak)n(e".)44 b(On)30 b(some)g(systems,)h(suc)n(h)f(as)g(the)291 ++4002 y(*BSDs,)d(y)n(ou)g(ma)n(y)g(need)g(to)h(t)n(yp)r(e)g ++Fr(gmake)d Fx(instead)j(of)f(mak)n(e)g(for)g(this)h(to)f(w)n(ork.)415 ++4110 y(If)k(y)n(ou)f(w)n(an)n(t)g(to)h(create)e(readable)h(do)r(cumen)n ++(tation)g(y)n(ou'll)g(need)h(to)f(ha)n(v)n(e)g(latex)g(in-)291 ++4210 y(stalled.)291 4409 y Fr(\045)43 b(autoconf)291 ++4509 y(\045)g(./configure)291 4608 y(\045)g(make)291 + 4708 y(\045)g(make)f(install)415 4899 y Fx(If)27 b(y)n(ou)g(w)n(an)n(t) + f(to)h(t)n(w)n(eak)f(the)h(con\014gure)f(options,)g(y)n(ou'll)h(need)g + (to)g(run)f Fr(./configure)291 4998 y Fx(y)n(ourself)g(after)h(the)h +@@ -6399,47 +6382,33 @@ + %%Page: 18 18 + TeXDict begin 18 17 bop 739 282 a Fx(18)1465 b Fu(CHAPTER)27 + b(2.)64 b(BUILDING)29 b(D)n(AR)n(CS)739 515 y Fq(2.6)135 +-b(Building)45 b(darcs)g(with)g(git)739 697 y Fx(T)-7 +-b(o)37 b(enable)g(git)g(supp)r(ort,)j(y)n(ou)d(\014rst)g(need)h(to)f +-(grab)f(a)h(cop)n(y)g(of)g(the)h(git)f(source)f(co)r(de;)739 +-797 y(since)28 b(darcs)g(do)r(esn't)g(y)n(et)g(ha)n(v)n(e)g(the)h +-(capabilit)n(y)e(of)i(accessing)e(remote)g(git)i(rep)r(ositories,)739 +-896 y(y)n(ou'll)23 b(ha)n(v)n(e)g(to)g(either)h(do)n(wnload)e(a)i +-(tarball)e(or)h(use)h(git)g(itself)g(to)f(clone)h(a)f(git)h(rep)r +-(ository)-7 b(.)739 996 y(Compile)20 b(git)g(\(no)g(need)h(to)f +-(install\);)j(this)d(will)g(create)g(a)f(\014le)i(\\)p +-Fr(libgit.a)p Fx(".)30 b(Then)20 b(create)g(a)739 1096 +-y(symlink)25 b(to)g(the)g(git)g(source)f(directory)g(named)h(\\)p +-Fr(git)p Fx(")e(in)i(y)n(our)f(darcs)g(source)f(directory)-7 +-b(,)739 1195 y(con\014gure)26 b(darcs)h(using)g(the)h(\\)p +-Fr(--enable-git)p Fx(")22 b(option,)27 b(and)g(build)i(darcs)d(as)h +-(usual.)739 1470 y Fq(2.7)135 b(Submitting)46 b(patc)l(hes)f(to)g +-(darcs)739 1652 y Fx(I)26 b(kno)n(w,)g(this)h(do)r(esn't)g(really)e(b)r +-(elong)h(in)h(this)g(c)n(hapter,)f(but)h(if)g(y)n(ou're)e(using)h(the)h +-(rep)r(os-)739 1751 y(itory)k(v)n(ersion)f(of)h(darcs)g(it's)h(really)e +-(easy)h(to)g(submit)i(patc)n(hes)e(to)g(me)h(using)f(darcs.)48 +-b(In)739 1851 y(fact,)35 b(ev)n(en)e(if)g(y)n(ou)g(don't)g(kno)n(w)g +-(an)n(y)f(Hask)n(ell,)i(y)n(ou)e(could)h(submit)h(\014xes)f(or)g +-(additions)739 1951 y(to)e(this)h(do)r(cumen)n(t)g(\(b)n(y)f(editing)h ++b(Submitting)46 b(patc)l(hes)f(to)g(darcs)739 697 y Fx(I)26 ++b(kno)n(w,)g(this)h(do)r(esn't)g(really)e(b)r(elong)h(in)h(this)g(c)n ++(hapter,)f(but)h(if)g(y)n(ou're)e(using)h(the)h(rep)r(os-)739 ++797 y(itory)k(v)n(ersion)f(of)h(darcs)g(it's)h(really)e(easy)h(to)g ++(submit)i(patc)n(hes)e(to)g(me)h(using)f(darcs.)48 b(In)739 ++896 y(fact,)35 b(ev)n(en)e(if)g(y)n(ou)g(don't)g(kno)n(w)g(an)n(y)f ++(Hask)n(ell,)i(y)n(ou)e(could)h(submit)h(\014xes)f(or)g(additions)739 ++996 y(to)e(this)h(do)r(cumen)n(t)g(\(b)n(y)f(editing)h + Fr(building_darcs.t)o(ex)o Fx(\))26 b(based)31 b(on)g(y)n(our)g(exp)r +-(erience)739 2050 y(building)d(darcs.)12 b(.)i(.)863 +-2150 y(T)-7 b(o)24 b(do)h(so,)f(just)h(record)e(y)n(our)g(c)n(hanges)g ++(erience)739 1096 y(building)d(darcs.)12 b(.)i(.)863 ++1195 y(T)-7 b(o)24 b(do)h(so,)f(just)h(record)e(y)n(our)g(c)n(hanges)g + (\(whic)n(h)i(y)n(ou)f(made)g(in)g(the)h(darcs)f(rep)r(ository\))739 +-2316 y Fr(\045)43 b(darcs)f(record)f(--no-test)739 2482 ++1361 y Fr(\045)43 b(darcs)f(record)f(--no-test)739 1527 + y Fx(making)c(sure)f(to)i(giv)n(e)e(the)i(patc)n(h)f(a)g(nice)g + (descriptiv)n(e)g(name.)66 b(The)37 b Fr(--no-test)d +-Fx(op-)739 2582 y(tions)d(k)n(eeps)f(darcs)g(from)g(trying)g(to)h(run)g ++Fx(op-)739 1627 y(tions)d(k)n(eeps)f(darcs)g(from)g(trying)g(to)h(run)g + (the)g(unit)h(tests,)g(whic)n(h)e(can)h(b)r(e)g(rather)f(time-)739 +-2681 y(consuming.)66 b(Then)38 b(y)n(ou)e(can)h(send)h(the)g(patc)n(h)f ++1727 y(consuming.)66 b(Then)38 b(y)n(ou)e(can)h(send)h(the)g(patc)n(h)f + (to)g(the)h(darcs-dev)n(el)e(mailing)h(list)h(b)n(y)739 +-2781 y(email)27 b(b)n(y)739 2947 y Fr(\045)43 b(darcs)f(send)g(-u)739 +-3113 y Fx(The)30 b(darcs)f(rep)r(ository)f(stores)g(the)j(email)e ++1826 y(email)27 b(b)n(y)739 1992 y Fr(\045)43 b(darcs)f(send)g(-u)739 ++2158 y Fx(The)30 b(darcs)f(rep)r(ository)f(stores)g(the)j(email)e + (address)g(to)h(whic)n(h)f(patc)n(hes)h(should)f(b)r(e)h(sen)n(t)739 +-3212 y(b)n(y)38 b(default.)70 b(The)38 b(email)h(address)e(y)n(ou)h ++2258 y(b)n(y)38 b(default.)70 b(The)38 b(email)h(address)e(y)n(ou)h + (see)g(is)g(actually)g(m)n(y)g(o)n(wn,)j(but)e(when)f(darcs)739 +-3312 y(notices)24 b(that)i(y)n(ou)e(ha)n(v)n(en't)g(signed)h(the)g ++2358 y(notices)24 b(that)i(y)n(ou)e(ha)n(v)n(en't)g(signed)h(the)g + (patc)n(h)g(with)g(m)n(y)g(GPG)g(k)n(ey)-7 b(,)25 b(it)g(will)h(forw)n +-(ard)d(the)739 3412 y(message)j(to)i(darcs-dev)n(el.)p ++(ard)d(the)739 2457 y(message)j(to)i(darcs-dev)n(el.)p + eop end + %%Page: 19 19 + TeXDict begin 19 18 bop 291 1139 a Ft(Chapter)64 b(3)291 +@@ -6456,8 +6425,8 @@ + 2752 y(revision)28 b(information.)41 b(This)29 b(is)g(done)g(b)n(y)g + (simply)g(calling)f(from)h(the)h(ro)r(ot)e(directory)g(of)291 + 2851 y(y)n(our)e(pro)5 b(ject:)291 3022 y Fr(\045)43 +-b(cd)g(my_project/)291 3122 y(\045)g(darcs)e(initialize)291 +-3291 y Fx(This)f(creates)g(the)h Fr(_darcs)e Fx(directory)h(and)g(p)r ++b(cd)g(my_project/)291 3122 y(\045)g(darcs)e(initialize)f(--darcs-2)291 ++3291 y Fx(This)g(creates)g(the)h Fr(_darcs)e Fx(directory)h(and)g(p)r + (opulates)h(it)g(with)h(whatev)n(er)d(\014les)i(and)291 + 3391 y(directories)23 b(are)h(needed)h(to)g(describ)r(e)g(an)f(empt)n + (y)h(pro)5 b(ject.)36 b(Y)-7 b(ou)25 b(no)n(w)f(need)h(to)g(tell)g +@@ -6911,12 +6880,11 @@ + r(ository)f(b)n(y)291 4603 y(p)r(oin)n(ting)j Fr(darcs)42 + b(changes)24 b Fx(at)k(a)f(remote)g(rep)r(ository:)291 + 4751 y Fr(darcs)41 b(changes)g(--last=10)f(--repo=http://d)o(arc)o(s.)o +-(net)o(/r)o(ep)o(os/)o(st)o(abl)o(e)415 4899 y Fx(That)23 +-b(sho)n(ws)e(y)n(ou)h(the)g(last)g(10)g(c)n(hanges)f(in)i(the)g(remote) +-e(rep)r(ository)-7 b(.)34 b(Y)-7 b(ou)23 b(can)f(adjust)291 +-4998 y(the)28 b(options)f(giv)n(en)f(to)i Fr(changes)d +-Fx(if)j(a)f(more)g(adv)-5 b(anced)27 b(query)g(is)g(needed.)p +-eop end ++(net)o(/)415 4899 y Fx(That)23 b(sho)n(ws)e(y)n(ou)h(the)g(last)g(10)g ++(c)n(hanges)f(in)i(the)g(remote)e(rep)r(ository)-7 b(.)34 ++b(Y)-7 b(ou)23 b(can)f(adjust)291 4998 y(the)28 b(options)f(giv)n(en)f ++(to)i Fr(changes)d Fx(if)j(a)f(more)g(adv)-5 b(anced)27 ++b(query)g(is)g(needed.)p eop end + %%Page: 26 26 + TeXDict begin 26 25 bop 739 282 a Fx(26)1383 b Fu(CHAPTER)27 + b(3.)64 b(GETTING)28 b(ST)-7 b(AR)g(TED)739 515 y Fq(3.6)135 +@@ -6965,7 +6933,7 @@ + Fx(.)57 b(This)34 b(is)739 3080 y(done)24 b(with)g Fr(darcs)42 + b(optimize)e(--relink)p Fx(,)22 b(with)i({the)g Fr(--sibling)d + Fx(\015ag)i(sp)r(ecifying)h(the)739 3180 y(sibling.)826 +-3347 y Fr($)43 b(cd)g(/var/repos/darcs)o(-un)o(st)o(ab)o(le)826 ++3347 y Fr($)43 b(cd)g(/var/repos/darcs)o(.ne)o(t)826 + 3447 y($)g(darcs)f(optimize)e(--relink)g(--sibling)g(/var/repos/darcs) + 739 3614 y Fx(The)33 b Fr(--sibling)d Fx(\015ag)i(can)h(b)r(e)g(rep)r + (eated)g(m)n(ultiple)h(times,)h(in)e(whic)n(h)g(case)g(Darcs)f(will)739 +@@ -7206,19 +7174,20 @@ + b Fr(_darcs/prefs/bina)o(ri)o(es)26 b Fx(\014le)32 b(ma)n(y)g(con)n + (tain)f(a)h(list)h(of)f(regular)e(ex-)291 4401 y(pressions)25 + b(describing)h(\014les)h(that)g(should)g(b)r(e)h(treated)e(as)g(binary) +-h(\014les)g(rather)e(than)j(text)291 4500 y(\014les.)58 +-b(Darcs)34 b(automatically)g(treats)g(\014les)g(con)n(taining)g +-Fr(^Z\\)g Fx(or)g Fr('\\0')f Fx(as)h(binary)-7 b(.)58 +-b(Y)-7 b(ou)291 4600 y(probably)31 b(will)i(w)n(an)n(t)f(to)h(ha)n(v)n +-(e)e(the)i(binaries)f(\014le)h(under)f(v)n(ersion)f(con)n(trol.)51 +-b(T)-7 b(o)32 b(do)h(this)291 4700 y(y)n(ou)i(can)g(use)h(darcs)e +-(setpref)i(to)g(set)f(the)h(v)-5 b(alue)36 b(\\binaries\014le")e(to)i +-(the)g(name)f(of)h(y)n(our)291 4799 y(desired)d(binaries)h(\014le)g +-(\(e.g.)g Fr(darcs)42 b(setpref)e(binariesfile)f(./.binaries)p +-Fx(,)31 b(where)291 4899 y Fr(.binaries)23 b Fx(is)k(a)g(\014le)h(that) +-g(has)e(b)r(een)i(darcs)e(added)i(to)f(y)n(our)f(rep)r(ository\).)35 +-b(As)28 b(with)g(the)291 4998 y(b)r(oring)e(\014le,)i(y)n(ou)f(can)g +-(also)g(set)g(up)h(a)f Fr(~/.darcs/binaries)21 b Fx(\014le)28 ++h(\014les)g(rather)e(than)j(text)291 4500 y(\014les.)33 ++b(Darcs)18 b(automatically)g(treats)g(\014les)h(con)n(taining)f ++Fr(^Z\\)f Fx(or)h Fr('\\0')g Fx(within)h(the)g(\014rst)g(4096)291 ++4600 y(b)n(ytes)g(as)g(b)r(eing)h(binary)f(\014les.)34 ++b(Y)-7 b(ou)20 b(probably)f(will)h(w)n(an)n(t)f(to)g(ha)n(v)n(e)g(the)h ++(binaries)f(\014le)h(under)291 4700 y(v)n(ersion)25 b(con)n(trol.)35 ++b(T)-7 b(o)27 b(do)f(this)i(y)n(ou)e(can)g(use)h(darcs)f(setpref)h(to)g ++(set)f(the)i(v)-5 b(alue)27 b(\\binaries-)291 4799 y(\014le")18 ++b(to)g(the)h(name)f(of)g(y)n(our)f(desired)h(binaries)g(\014le)g ++(\(e.g.)g Fr(darcs)42 b(setpref)f(binariesfile)d(./.binaries)p ++Fx(,)291 4899 y(where)33 b Fr(.binaries)c Fx(is)34 b(a)f(\014le)h(that) ++f(has)g(b)r(een)h(darcs)f(added)g(to)g(y)n(our)g(rep)r(ository\).)53 ++b(As)291 4998 y(with)28 b(the)g(b)r(oring)e(\014le,)i(y)n(ou)f(can)g ++(also)g(set)g(up)h(a)g Fr(~/.darcs/binari)o(es)21 b Fx(\014le)28 + b(if)g(y)n(ou)f(lik)n(e.)p eop end + %%Page: 32 32 + TeXDict begin 32 31 bop 739 282 a Fx(32)1272 b Fu(CHAPTER)27 +@@ -7327,309 +7296,317 @@ + 465 2212 a(D)n(AR)n(CS)p 758 2212 25 4 v 30 w(AL)e(W)g(A)i(YS)p + 1132 2212 V 31 w(COLOR)p 2250 2242 4 100 v 1038 w(4.5)p + 2653 2242 V 413 2342 V 465 2312 a(D)n(AR)n(CS)p 758 2312 +-25 4 v 30 w(DONT)p 1038 2312 V 30 w(COLOR)p 2250 2342 +-4 100 v 1133 w(4.5)p 2653 2342 V 413 2441 V 465 2412 +-a(D)n(AR)n(CS)p 758 2412 25 4 v 30 w(DONT)p 1038 2412 +-V 30 w(ESCAPE)p 1407 2412 V 29 w(TRAILING)p 1858 2412 +-V 30 w(CR)p 2250 2441 4 100 v 495 w(4.5)p 2653 2441 V +-413 2541 V 465 2511 a(D)n(AR)n(CS)p 758 2511 25 4 v 30 +-w(DONT)p 1038 2511 V 30 w(ESCAPE)p 1407 2511 V 29 w(TRAILING)p +-1858 2511 V 30 w(SP)g(A)n(CES)p 2250 2541 4 100 v 297 +-w(4.5)p 2653 2541 V 413 2641 V 465 2611 a(D)n(AR)n(CS)p +-758 2611 25 4 v 30 w(DONT)p 1038 2611 V 30 w(ESCAPE)p +-1407 2611 V 29 w(8BIT)p 2250 2641 4 100 v 877 w(4.6)p +-2653 2641 V 413 2740 V 465 2710 a(D)n(AR)n(CS)p 758 2710 +-25 4 v 30 w(DONT)p 1038 2710 V 30 w(ESCAPE)p 1407 2710 +-V 29 w(ANYTHING)p 2250 2740 4 100 v 603 w(4.6)p 2653 +-2740 V 413 2840 V 465 2810 a(D)n(AR)n(CS)p 758 2810 25 +-4 v 30 w(DONT)p 1038 2810 V 30 w(ESCAPE)p 1407 2810 V +-29 w(ISPRINT)p 2250 2840 4 100 v 722 w(4.6)p 2653 2840 +-V 413 2940 V 465 2910 a(D)n(AR)n(CS)p 758 2910 25 4 v +-30 w(ESCAPE)p 1127 2910 V 29 w(EXTRA)p 2250 2940 4 100 +-v 1046 w(4.6)p 2653 2940 V 413 3039 V 465 3009 a(D)n(AR)n(CS)p +-758 3009 25 4 v 30 w(DONT)p 1038 3009 V 30 w(ESCAPE)p +-1407 3009 V 29 w(EXTRA)p 2250 3039 4 100 v 766 w(4.6)p +-2653 3039 V 415 3042 2240 4 v 291 3267 a Fq(4.3)135 b(General-purp)t +-(ose)45 b(v)-7 b(ariables)291 3452 y Fv(D)m(AR)m(CS)p +-630 3452 29 4 v 35 w(EDITOR)83 b Fx(When)28 b(pulling)f(up)h(an)f +-(editor)g(\(for)g(example,)h(when)f(adding)g(a)291 3552 +-y(long)32 b(commen)n(t)h(in)g(record\),)g(darcs)f(uses)g(the)h(con)n +-(ten)n(ts)g(of)g(D)n(AR)n(CS)p 2536 3552 25 4 v 30 w(EDITOR)f(if)i(it)f +-(is)291 3652 y(de\014ned.)55 b(If)34 b(not,)h(it)f(tries)g(the)g(con)n +-(ten)n(ts)f(of)g(VISUAL,)i(and)e(if)i(that)e(isn't)h(de\014ned)h(\(or) +-291 3751 y(fails)26 b(for)g(some)g(reason\),)g(it)h(tries)g(EDITOR.)36 ++25 4 v 30 w(DO)p 916 2312 V 30 w(COLOR)p 1249 2312 V ++29 w(LINES)p 2250 2342 4 100 v 979 w(4.5)p 2653 2342 ++V 413 2441 V 465 2412 a(D)n(AR)n(CS)p 758 2412 25 4 v ++30 w(DONT)p 1038 2412 V 30 w(COLOR)p 2250 2441 4 100 ++v 1133 w(4.5)p 2653 2441 V 413 2541 V 465 2511 a(D)n(AR)n(CS)p ++758 2511 25 4 v 30 w(DONT)p 1038 2511 V 30 w(ESCAPE)p ++1407 2511 V 29 w(TRAILING)p 1858 2511 V 30 w(CR)p 2250 ++2541 4 100 v 495 w(4.5)p 2653 2541 V 413 2641 V 465 2611 ++a(D)n(AR)n(CS)p 758 2611 25 4 v 30 w(DONT)p 1038 2611 ++V 30 w(ESCAPE)p 1407 2611 V 29 w(TRAILING)p 1858 2611 ++V 30 w(SP)g(A)n(CES)p 2250 2641 4 100 v 297 w(4.5)p 2653 ++2641 V 413 2740 V 465 2710 a(D)n(AR)n(CS)p 758 2710 25 ++4 v 30 w(DONT)p 1038 2710 V 30 w(ESCAPE)p 1407 2710 V ++29 w(8BIT)p 2250 2740 4 100 v 877 w(4.6)p 2653 2740 V ++413 2840 V 465 2810 a(D)n(AR)n(CS)p 758 2810 25 4 v 30 ++w(DONT)p 1038 2810 V 30 w(ESCAPE)p 1407 2810 V 29 w(ANYTHING)p ++2250 2840 4 100 v 603 w(4.6)p 2653 2840 V 413 2940 V ++465 2910 a(D)n(AR)n(CS)p 758 2910 25 4 v 30 w(DONT)p ++1038 2910 V 30 w(ESCAPE)p 1407 2910 V 29 w(ISPRINT)p ++2250 2940 4 100 v 722 w(4.6)p 2653 2940 V 413 3039 V ++465 3009 a(D)n(AR)n(CS)p 758 3009 25 4 v 30 w(ESCAPE)p ++1127 3009 V 29 w(EXTRA)p 2250 3039 4 100 v 1046 w(4.6)p ++2653 3039 V 413 3139 V 465 3109 a(D)n(AR)n(CS)p 758 3109 ++25 4 v 30 w(DONT)p 1038 3109 V 30 w(ESCAPE)p 1407 3109 ++V 29 w(EXTRA)p 2250 3139 4 100 v 766 w(4.6)p 2653 3139 ++V 415 3142 2240 4 v 291 3397 a Fq(4.3)135 b(General-purp)t(ose)45 ++b(v)-7 b(ariables)291 3593 y Fv(D)m(AR)m(CS)p 630 3593 ++29 4 v 35 w(EDITOR)83 b Fx(When)28 b(pulling)f(up)h(an)f(editor)g ++(\(for)g(example,)h(when)f(adding)g(a)291 3692 y(long)32 ++b(commen)n(t)h(in)g(record\),)g(darcs)f(uses)g(the)h(con)n(ten)n(ts)g ++(of)g(D)n(AR)n(CS)p 2536 3692 25 4 v 30 w(EDITOR)f(if)i(it)f(is)291 ++3792 y(de\014ned.)55 b(If)34 b(not,)h(it)f(tries)g(the)g(con)n(ten)n ++(ts)f(of)g(VISUAL,)i(and)e(if)i(that)e(isn't)h(de\014ned)h(\(or)291 ++3892 y(fails)26 b(for)g(some)g(reason\),)g(it)h(tries)g(EDITOR.)36 + b(If)27 b(none)f(of)h(those)f(en)n(vironmen)n(t)g(v)-5 +-b(ariables)291 3851 y(are)26 b(de\014ned,)i(darcs)f(tries)g ++b(ariables)291 3991 y(are)26 b(de\014ned,)i(darcs)f(tries)g + Fr(vi)p Fx(,)g Fr(emacs)p Fx(,)e Fr(emacs)42 b(-nw)26 +-b Fx(and)i Fr(nano)e Fx(in)i(that)g(order.)291 4075 y +-Fv(D)m(AR)m(CS)p 630 4075 29 4 v 35 w(P)-8 b(A)m(GER)83 ++b Fx(and)i Fr(nano)e Fx(in)i(that)g(order.)291 4246 y ++Fv(D)m(AR)m(CS)p 630 4246 29 4 v 35 w(P)-8 b(A)m(GER)83 + b Fx(When)25 b(using)g(a)f(pager)g(for)g(displa)n(ying)g(a)g(patc)n(h,) +-h(darcs)f(uses)h(the)291 4175 y(con)n(ten)n(ts)39 b(of)g(D)n(AR)n(CS)p +-1030 4175 25 4 v 30 w(P)-7 b(A)n(GER)39 b(if)h(it)g(is)g(de\014ned.)73 ++h(darcs)f(uses)h(the)291 4345 y(con)n(ten)n(ts)39 b(of)g(D)n(AR)n(CS)p ++1030 4345 25 4 v 30 w(P)-7 b(A)n(GER)39 b(if)h(it)g(is)g(de\014ned.)73 + b(If)40 b(not,)j(it)d(tries)f(the)h(con)n(ten)n(ts)f(of)291 +-4274 y(P)-7 b(A)n(GER)27 b(and)g(then)h Fr(more)p Fx(.)291 +-4499 y Fv(D)m(AR)m(CS)p 630 4499 29 4 v 35 w(TMPDIR)83 ++4445 y(P)-7 b(A)n(GER)27 b(and)g(then)h Fr(more)p Fx(.)291 ++4700 y Fv(D)m(AR)m(CS)p 630 4700 29 4 v 35 w(TMPDIR)83 + b Fx(If)19 b(the)g(en)n(vironmen)n(t)e(v)-5 b(ariable)17 +-b(D)n(AR)n(CS)p 2416 4499 25 4 v 30 w(TMPDIR)i(is)f(de\014ned,)291 +-4598 y(darcs)i(will)j(use)f(that)g(directory)f(for)g(its)h(temp)r ++b(D)n(AR)n(CS)p 2416 4700 25 4 v 30 w(TMPDIR)i(is)f(de\014ned,)291 ++4799 y(darcs)i(will)j(use)f(that)g(directory)f(for)g(its)h(temp)r + (oraries.)34 b(Otherwise)21 b(it)i(will)f(use)g(TMPDIR,)291 +-4698 y(if)30 b(that)g(is)f(de\014ned,)i(and)f(if)g(not)g(that)g(then)g ++4899 y(if)30 b(that)g(is)f(de\014ned,)i(and)f(if)g(not)g(that)g(then)g + Fr(/tmp)e Fx(and)i(if)g Fr(/tmp)e Fx(do)r(esn't)i(exist,)g(it'll)g(put) +-291 4798 y(the)e(temp)r(oraries)e(in)i Fr(_darcs)p Fx(.)415 +-4899 y(This)e(is)g(v)n(ery)f(helpful,)j(for)d(example,)i(when)f +-(recording)e(with)j(a)f(test)g(suite)h(that)f(uses)291 +-4998 y(MPI,)k(in)h(whic)n(h)g(case)f(using)g Fr(/tmp)f +-Fx(to)i(hold)f(the)h(test)g(cop)n(y)f(is)h(no)f(go)r(o)r(d,)h(as)f +-Fr(/tmp)g Fx(isn't)p eop end ++291 4998 y(the)e(temp)r(oraries)e(in)i Fr(_darcs)p Fx(.)p ++eop end + %%Page: 34 34 + TeXDict begin 34 33 bop 739 282 a Fx(34)1272 b Fu(CHAPTER)27 +-b(4.)64 b(CONFIGURING)29 b(D)n(AR)n(CS)739 515 y Fx(shared)21 +-b(o)n(v)n(er)g(NFS)i(and)g(th)n(us)f(the)h Fr(mpirun)d +-Fx(call)j(will)f(fail,)i(since)e(the)h(binary)f(isn't)h(presen)n(t)739 +-615 y(on)k(the)h(compute)g(no)r(des.)739 836 y Fv(HOME)82 +-b Fx(HOME)30 b(is)h(used)g(to)f(\014nd)i(the)f(p)r(er-user)f(prefs)g +-(directory)-7 b(,)31 b(whic)n(h)g(is)g(lo)r(cated)739 +-936 y(at)c Fr($HOME/.darcs)p Fx(.)739 1158 y Fv(TERM)82 ++b(4.)64 b(CONFIGURING)29 b(D)n(AR)n(CS)863 515 y Fx(This)e(is)f(v)n ++(ery)f(helpful,)i(for)f(example,)g(when)g(recording)f(with)h(a)g(test)h ++(suite)f(that)h(uses)739 615 y(MPI,)j(in)h(whic)n(h)g(case)f(using)g ++Fr(/tmp)f Fx(to)i(hold)g(the)g(test)g(cop)n(y)f(is)g(no)h(go)r(o)r(d,)g ++(as)f Fr(/tmp)f Fx(isn't)739 715 y(shared)21 b(o)n(v)n(er)g(NFS)i(and)g ++(th)n(us)f(the)h Fr(mpirun)d Fx(call)j(will)f(fail,)i(since)e(the)h ++(binary)f(isn't)h(presen)n(t)739 814 y(on)k(the)h(compute)g(no)r(des.) ++739 1036 y Fv(HOME)82 b Fx(HOME)30 b(is)h(used)g(to)f(\014nd)i(the)f(p) ++r(er-user)f(prefs)g(directory)-7 b(,)31 b(whic)n(h)g(is)g(lo)r(cated) ++739 1135 y(at)c Fr($HOME/.darcs)p Fx(.)739 1357 y Fv(TERM)82 + b Fx(If)26 b(darcs)e(is)h(compiled)g(with)g(lib)r(curses)g(supp)r(ort)g +-(and)g(supp)r(ort)f(for)h(color)f(out-)739 1257 y(put,)31 ++(and)g(supp)r(ort)f(for)h(color)f(out-)739 1456 y(put,)31 + b(it)g(uses)f(the)g(en)n(vironmen)n(t)g(v)-5 b(ariable)29 + b(TERM)h(to)g(decide)g(whether)g(or)f(not)i(color)d(is)739 +-1357 y(supp)r(orted)f(on)h(the)g(output)g(terminal.)739 +-1637 y Fq(4.4)135 b(Remote)47 b(rep)t(ositories)739 1821 +-y Fv(SSH)p 926 1821 29 4 v 34 w(POR)-8 b(T)83 b Fx(When)31 +-b(using)f(ssh,)i(if)f(the)g(SSH)p 2320 1821 25 4 v 30 ++1556 y(supp)r(orted)f(on)h(the)g(output)g(terminal.)739 ++1836 y Fq(4.4)135 b(Remote)47 b(rep)t(ositories)739 2020 ++y Fv(SSH)p 926 2020 29 4 v 34 w(POR)-8 b(T)83 b Fx(When)31 ++b(using)f(ssh,)i(if)f(the)g(SSH)p 2320 2020 25 4 v 30 + w(POR)-7 b(T)30 b(en)n(vironmen)n(t)f(v)-5 b(ariable)30 +-b(is)g(de-)739 1921 y(\014ned,)e(darcs)e(will)i(use)g(that)g(p)r(ort)f ++b(is)g(de-)739 2120 y(\014ned,)e(darcs)e(will)i(use)g(that)g(p)r(ort)f + (rather)f(than)i(the)g(default)g(ssh)g(p)r(ort)f(\(whic)n(h)h(is)f +-(22\).)739 2142 y Fv(D)m(AR)m(CS)p 1078 2142 29 4 v 35 +-w(SSH)83 b Fx(The)28 b(D)n(AR)n(CS)p 1835 2142 25 4 v ++(22\).)739 2341 y Fv(D)m(AR)m(CS)p 1078 2341 29 4 v 35 ++w(SSH)83 b Fx(The)28 b(D)n(AR)n(CS)p 1835 2341 25 4 v + 31 w(SSH)h(en)n(vironmen)n(t)e(v)-5 b(ariable)28 b(de\014nes)h(the)g +-(command)739 2242 y(that)34 b(darcs)f(will)h(use)g(when)g(ask)n(ed)f ++(command)739 2441 y(that)34 b(darcs)f(will)h(use)g(when)g(ask)n(ed)f + (to)h(run)f(ssh.)56 b(This)34 b(command)f(is)h Fs(not)42 +-b Fx(in)n(terpreted)739 2341 y(b)n(y)35 b(a)g(shell,)i(so)e(y)n(ou)f ++b Fx(in)n(terpreted)739 2541 y(b)n(y)35 b(a)g(shell,)i(so)e(y)n(ou)f + (cannot)h(use)g(shell)g(metac)n(haracters,)g(and)g(the)h(\014rst)f(w)n +-(ord)f(in)i(the)739 2441 y(command)27 b(m)n(ust)h(b)r(e)g(the)g(name)f ++(ord)f(in)i(the)739 2640 y(command)27 b(m)n(ust)h(b)r(e)g(the)g(name)f + (of)h(an)f(executable)g(lo)r(cated)h(in)f(y)n(our)g(path.)739 +-2663 y Fv(D)m(AR)m(CS)p 1078 2663 29 4 v 35 w(SCP)37 +-b(and)g(D)m(AR)m(CS)p 1859 2663 V 35 w(SFTP)84 b Fx(The)31 +-b(D)n(AR)n(CS)p 2683 2663 25 4 v 30 w(SCP)h(and)f(D)n(AR)n(CS)p +-3361 2663 V 30 w(SFTP)739 2762 y(en)n(vironmen)n(t)f(v)-5 ++2862 y Fv(D)m(AR)m(CS)p 1078 2862 29 4 v 35 w(SCP)37 ++b(and)g(D)m(AR)m(CS)p 1859 2862 V 35 w(SFTP)84 b Fx(The)31 ++b(D)n(AR)n(CS)p 2683 2862 25 4 v 30 w(SCP)h(and)f(D)n(AR)n(CS)p ++3361 2862 V 30 w(SFTP)739 2961 y(en)n(vironmen)n(t)f(v)-5 + b(ariables)29 b(de\014ne)i(the)g(commands)f(that)h(darcs)f(will)g(use)h +-(when)g(ask)n(ed)e(to)739 2862 y(run)k(scp)g(or)g(sftp.)55 ++(when)g(ask)n(ed)e(to)739 3061 y(run)k(scp)g(or)g(sftp.)55 + b(Darcs)33 b(uses)g(scp)g(and)g(sftp)h(to)g(access)e(rep)r(ositories)g +-(whose)g(address)739 2961 y(is)e(of)g(the)g(form)g Fr(user@foo.org:foo) ++(whose)g(address)739 3161 y(is)e(of)g(the)g(form)g Fr(user@foo.org:foo) + 24 b Fx(or)29 b Fr(foo.org:foo)p Fx(.)40 b(Darcs)29 b(will)h(use)g(scp) +-g(to)g(cop)n(y)739 3061 y(single)c(\014les)h(\(e.g.)g(rep)r(ository)f ++g(to)g(cop)n(y)739 3260 y(single)c(\014les)h(\(e.g.)g(rep)r(ository)f + (meta-information\),)g(and)h(sftp)h(to)f(cop)n(y)f(m)n(ultiple)i +-(\014les)f(in)739 3161 y(batc)n(hes)h(\(e.g.)h(patc)n(hes\).)42 ++(\014les)f(in)739 3360 y(batc)n(hes)h(\(e.g.)h(patc)n(hes\).)42 + b(These)28 b(commands)h(are)f Fs(not)37 b Fx(in)n(terpreted)28 +-b(b)n(y)h(a)g(shell,)h(so)e(y)n(ou)739 3260 y(cannot)21 ++b(b)n(y)h(a)g(shell,)h(so)e(y)n(ou)739 3460 y(cannot)21 + b(use)h(shell)g(metac)n(haracters,)f(and)h(the)g(\014rst)g(w)n(ord)e +-(in)j(the)f(command)f(m)n(ust)i(b)r(e)f(the)739 3360 ++(in)j(the)f(command)f(m)n(ust)i(b)r(e)f(the)739 3559 + y(name)h(of)h(an)f(executable)g(lo)r(cated)g(in)h(y)n(our)e(path.)36 + b(By)23 b(default,)i Fr(scp)d Fx(and)i Fr(sftp)e Fx(are)g(used.)739 +-3460 y(When)31 b(y)n(ou)g(can)f(use)h(sftp,)h(but)g(not)f(scp)f(\(e.g.) ++3659 y(When)31 b(y)n(ou)g(can)f(use)h(sftp,)h(but)g(not)f(scp)f(\(e.g.) + h(some)g(ISP)f(w)n(eb)h(sites\),)h(it)f(w)n(orks)e(to)i(set)739 +-3559 y(D)n(AR)n(CS)p 1032 3559 V 30 w(SCP)26 b(to)h(`sftp'.)37 ++3758 y(D)n(AR)n(CS)p 1032 3758 V 30 w(SCP)26 b(to)h(`sftp'.)37 + b(The)27 b(other)f(w)n(a)n(y)f(around)h(do)r(es)g(not)h(w)n(ork,)f +-(i.e.)g(D)n(AR)n(CS)p 3407 3559 V 30 w(FTP)739 3659 y(m)n(ust)i +-(reference)e(an)i(sftp)g(program,)d(not)j(scp.)739 3880 +-y Fv(D)m(AR)m(CS)p 1078 3880 29 4 v 35 w(PR)m(O)m(XYUSERPWD)84 ++(i.e.)g(D)n(AR)n(CS)p 3407 3758 V 30 w(FTP)739 3858 y(m)n(ust)i ++(reference)e(an)i(sftp)g(program,)d(not)j(scp.)739 4080 ++y Fv(D)m(AR)m(CS)p 1078 4080 29 4 v 35 w(PR)m(O)m(XYUSERPWD)84 + b Fx(This)41 b(en)n(vironmen)n(t)e(v)-5 b(ariable)40 +-b(allo)n(ws)g(D)n(AR)n(CS)739 3980 y(and)23 b(lib)r(curl)g(to)g(access) ++b(allo)n(ws)g(D)n(AR)n(CS)739 4179 y(and)23 b(lib)r(curl)g(to)g(access) + f(remote)h(rep)r(ositories)e(via)i(a)f(passw)n(ord-protected)f(HTTP)i +-(pro)n(xy)-7 b(.)739 4080 y(The)38 b(pro)n(xy)e(itself)i(is)g(sp)r ++(pro)n(xy)-7 b(.)739 4279 y(The)38 b(pro)n(xy)e(itself)i(is)g(sp)r + (eci\014ed)g(with)g(the)g(standard)f(en)n(vironmen)n(t)g(v)-5 +-b(ariable)37 b(for)g(this)739 4179 y(purp)r(ose,)e(namely)e('h)n(ttp)p +-1558 4179 25 4 v 31 w(pro)n(xy'.)54 b(The)34 b(D)n(AR)n(CS)p +-2361 4179 V 30 w(PR)n(O)n(XYUSERPWD)f(en)n(vironmen)n(t)739 +-4279 y(v)-5 b(ariable)33 b(sp)r(eci\014es)i(the)f(pro)n(xy)f(username)h ++b(ariable)37 b(for)g(this)739 4378 y(purp)r(ose,)e(namely)e('h)n(ttp)p ++1558 4378 25 4 v 31 w(pro)n(xy'.)54 b(The)34 b(D)n(AR)n(CS)p ++2361 4378 V 30 w(PR)n(O)n(XYUSERPWD)f(en)n(vironmen)n(t)739 ++4478 y(v)-5 b(ariable)33 b(sp)r(eci\014es)i(the)f(pro)n(xy)f(username)h + (and)g(passw)n(ord.)55 b(It)35 b(m)n(ust)g(b)r(e)g(giv)n(en)e(in)i(the) +-739 4378 y(form)27 b Fs(username:p)l(asswor)l(d)p Fx(.)739 +-4600 y Fv(D)m(AR)m(CS)p 1078 4600 29 4 v 35 w(GET)p 1317 +-4600 V 35 w(F)m(OO,)20 b(D)m(AR)m(CS)p 1933 4600 V 35 +-w(MGET)p 2263 4600 V 34 w(F)m(OO)i(and)f(D)m(AR)m(CS)p +-3026 4600 V 35 w(APPL)-8 b(Y)p 3384 4600 V 36 w(F)m(OO)739 +-4700 y Fx(When)27 b(trying)f(to)g(access)f(a)h(rep)r(ository)f(with)i ++739 4578 y(form)27 b Fs(username:p)l(asswor)l(d)p Fx(.)739 ++4799 y Fv(D)m(AR)m(CS)p 1078 4799 29 4 v 35 w(GET)p 1317 ++4799 V 35 w(F)m(OO,)20 b(D)m(AR)m(CS)p 1933 4799 V 35 ++w(MGET)p 2263 4799 V 34 w(F)m(OO)i(and)f(D)m(AR)m(CS)p ++3026 4799 V 35 w(APPL)-8 b(Y)p 3384 4799 V 36 w(F)m(OO)739 ++4899 y Fx(When)27 b(trying)f(to)g(access)f(a)h(rep)r(ository)f(with)i + (a)f(URL)h(b)r(eginning)g(fo)r(o://,)e(darcs)h(will)g(in-)739 +-4799 y(v)n(ok)n(e)g(the)i(program)d(sp)r(eci\014ed)j(b)n(y)f(the)g(D)n +-(AR)n(CS)p 2288 4799 25 4 v 31 w(GET)p 2501 4799 V 29 +-w(F)n(OO)g(en)n(vironmen)n(t)f(v)-5 b(ariable)26 b(\(if)739 +-4899 y(de\014ned\))19 b(to)f(do)n(wnload)f(eac)n(h)h(\014le,)i(and)e +-(the)h(command)f(sp)r(eci\014ed)h(b)n(y)f(the)h(D)n(AR)n(CS)p +-3343 4899 V 30 w(APPL)-7 b(Y)p 3656 4899 V 29 w(F)n(OO)739 +-4998 y(en)n(vironmen)n(t)27 b(v)-5 b(ariable)26 b(\(if)i(de\014ned\))h +-(when)e(pushing)h(to)f(a)h(fo)r(o://)e(URL.)p eop end ++4998 y(v)n(ok)n(e)g(the)i(program)d(sp)r(eci\014ed)j(b)n(y)f(the)g(D)n ++(AR)n(CS)p 2288 4998 25 4 v 31 w(GET)p 2501 4998 V 29 ++w(F)n(OO)g(en)n(vironmen)n(t)f(v)-5 b(ariable)26 b(\(if)p ++eop end + %%Page: 35 35 +-TeXDict begin 35 34 bop 291 282 a Fu(4.5.)63 b(HIGHLIGHTED)29 +-b(OUTPUT)1585 b Fx(35)415 515 y(This)28 b(metho)r(d)g(o)n(v)n(errides)d +-(all)i(other)g(w)n(a)n(ys)f(of)i(getting)f Fr(foo://xxx)d +-Fx(URLs.)415 615 y(Note)29 b(that)h(eac)n(h)f(command)f(should)i(b)r(e) +-f(constructed)g(so)g(that)g(it)h(sends)f(the)h(do)n(wn-)291 +-715 y(loaded)f(con)n(ten)n(t)h(to)g(STDOUT,)g(and)g(the)h(next)f +-(argumen)n(t)f(to)h(it)h(should)e(b)r(e)i(the)g(URL.)291 +-814 y(Here)c(are)f(some)h(examples)g(that)h(should)g(w)n(ork)e(for)h(D) +-n(AR)n(CS)p 2258 814 25 4 v 30 w(GET)p 2470 814 V 30 +-w(HTTP:)291 977 y Fr(fetch)41 b(-q)i(-o)g(-)291 1077 +-y(curl)f(-s)g(-f)291 1177 y(lynx)g(-source)291 1276 y(wget)g(-q)g(-O)h +-(-)415 1439 y Fx(If)33 b(set,)i(D)n(AR)n(CS)p 956 1439 +-V 30 w(MGET)p 1244 1439 V 29 w(F)n(OO)d(will)h(b)r(e)h(used)f(to)f ++TeXDict begin 35 34 bop 291 282 a Fu(4.4.)63 b(REMOTE)27 ++b(REPOSITORIES)1550 b Fx(35)291 515 y(de\014ned\))19 ++b(to)f(do)n(wnload)f(eac)n(h)g(\014le,)k(and)d(the)h(command)f(sp)r ++(eci\014ed)h(b)n(y)f(the)g(D)n(AR)n(CS)p 2894 515 25 ++4 v 31 w(APPL)-7 b(Y)p 3208 515 V 29 w(F)n(OO)291 615 ++y(en)n(vironmen)n(t)26 b(v)-5 b(ariable)27 b(\(if)h(de\014ned\))g(when) ++g(pushing)g(to)f(a)g(fo)r(o://)g(URL.)415 721 y(This)h(metho)r(d)g(o)n ++(v)n(errides)d(all)i(other)g(w)n(a)n(ys)f(of)i(getting)f ++Fr(foo://xxx)d Fx(URLs.)415 827 y(Note)29 b(that)h(eac)n(h)f(command)f ++(should)i(b)r(e)f(constructed)g(so)g(that)g(it)h(sends)f(the)h(do)n ++(wn-)291 927 y(loaded)f(con)n(ten)n(t)h(to)g(STDOUT,)g(and)g(the)h ++(next)f(argumen)n(t)f(to)h(it)h(should)e(b)r(e)i(the)g(URL.)291 ++1027 y(Here)c(are)f(some)h(examples)g(that)h(should)g(w)n(ork)e(for)h ++(D)n(AR)n(CS)p 2258 1027 V 30 w(GET)p 2470 1027 V 30 ++w(HTTP:)291 1242 y Fr(fetch)41 b(-q)i(-o)g(-)291 1342 ++y(curl)f(-s)g(-f)291 1442 y(lynx)g(-source)291 1541 y(wget)g(-q)g(-O)h ++(-)415 1750 y Fx(If)33 b(set,)i(D)n(AR)n(CS)p 956 1750 ++V 30 w(MGET)p 1244 1750 V 29 w(F)n(OO)d(will)h(b)r(e)h(used)f(to)f + (fetc)n(h)h(man)n(y)g(\014les)f(from)h(a)f(single)291 +-1539 y(rep)r(ository)21 b(sim)n(ultaneously)-7 b(.)34 ++1850 y(rep)r(ository)21 b(sim)n(ultaneously)-7 b(.)34 + b(Replace)23 b(F)n(OO)f(and)g(fo)r(o)h(as)f(appropriate)f(to)i(handle)f +-(other)291 1639 y(URL)31 b(sc)n(hemes.)45 b(These)30 ++(other)291 1950 y(URL)31 b(sc)n(hemes.)45 b(These)30 + b(commands)g(are)f Fs(not)39 b Fx(in)n(terpreted)30 b(b)n(y)g(a)g +-(shell,)i(so)e(y)n(ou)f(cannot)291 1738 y(use)c(shell)h(metac)n ++(shell,)i(so)e(y)n(ou)f(cannot)291 2049 y(use)c(shell)h(metac)n + (haracters,)e(and)i(the)g(\014rst)g(w)n(ord)f(in)h(the)g(command)g(m)n +-(ust)g(b)r(e)g(the)g(name)291 1838 y(of)j(an)f(executable)h(lo)r(cated) ++(ust)g(b)r(e)g(the)g(name)291 2149 y(of)j(an)f(executable)h(lo)r(cated) + g(in)g(y)n(our)f(path.)41 b(The)29 b(GET)g(command)f(will)h(b)r(e)h +-(called)e(with)291 1937 y(a)k(URL)h(for)e(eac)n(h)h(\014le.)52 ++(called)e(with)291 2249 y(a)k(URL)h(for)e(eac)n(h)h(\014le.)52 + b(The)33 b(MGET)f(command)g(will)h(b)r(e)g(in)n(v)n(ok)n(ed)e(with)i(a) +-f(n)n(um)n(b)r(er)g(of)291 2037 y(URLs)26 b(and)f(is)h(exp)r(ected)h ++f(n)n(um)n(b)r(er)g(of)291 2348 y(URLs)26 b(and)f(is)h(exp)r(ected)h + (to)e(do)n(wnload)g(the)h(\014les)g(to)g(the)g(curren)n(t)f(directory) +--7 b(,)26 b(preserving)291 2137 y(the)34 b(\014le)g(name)g(but)h(not)f ++-7 b(,)26 b(preserving)291 2448 y(the)34 b(\014le)g(name)g(but)h(not)f + (the)g(path.)56 b(The)34 b(APPL)-7 b(Y)34 b(command)g(will)g(b)r(e)g +-(called)g(with)g(a)291 2236 y(darcs)26 b(patc)n(h\014le)h(pip)r(ed)i ++(called)g(with)g(a)291 2547 y(darcs)26 b(patc)n(h\014le)h(pip)r(ed)i + (in)n(to)e(its)h(standard)e(input.)38 b(Example:)291 +-2400 y Fr(wget)k(-q)291 2612 y Fv(D)m(AR)m(CS)p 630 2612 ++2763 y Fr(wget)k(-q)291 3014 y Fv(D)m(AR)m(CS)p 630 3014 + 29 4 v 35 w(MGETMAX)83 b Fx(When)41 b(in)n(v)n(oking)e(a)h(D)n(AR)n(CS) +-p 2247 2612 25 4 v 30 w(MGET)p 2535 2612 V 30 w(F)n(OO)f(command,)291 +-2712 y(darcs)26 b(will)h(limit)h(the)g(n)n(um)n(b)r(er)f(of)g(URLs)h ++p 2247 3014 25 4 v 30 w(MGET)p 2535 3014 V 30 w(F)n(OO)f(command,)291 ++3114 y(darcs)26 b(will)h(limit)h(the)g(n)n(um)n(b)r(er)f(of)g(URLs)h + (presen)n(ted)e(to)h(the)h(command)f(to)g(the)h(v)-5 +-b(alue)27 b(of)291 2811 y(this)g(v)-5 b(ariable,)27 b(if)h(set,)g(or)f +-(200.)291 3024 y Fv(D)m(AR)m(CS)p 630 3024 29 4 v 35 ++b(alue)27 b(of)291 3213 y(this)g(v)-5 b(ariable,)27 b(if)h(set,)g(or)f ++(200.)291 3464 y Fv(D)m(AR)m(CS)p 630 3464 29 4 v 35 + w(W)m(GET)83 b Fx(This)29 b(is)f(a)h(v)n(ery)f(old)g(option)h(that)g +-(is)g(only)f(used)h(if)g(lib)r(curl)g(is)g(not)291 3123 ++(is)g(only)f(used)h(if)g(lib)r(curl)g(is)g(not)291 3564 + y(compiled)e(in)i(and)e(one)h(of)g(the)g(D)n(AR)n(CS)p +-1584 3123 25 4 v 30 w(GET)p 1796 3123 V 30 w(F)n(OO)f(is)g(not)h(used.) +-38 b(Using)28 b(one)f(of)h(those)291 3223 y(is)f(recommended)g +-(instead.)415 3323 y(The)i(D)n(AR)n(CS)p 880 3323 V 30 ++1584 3564 25 4 v 30 w(GET)p 1796 3564 V 30 w(F)n(OO)f(is)g(not)h(used.) ++38 b(Using)28 b(one)f(of)h(those)291 3664 y(is)f(recommended)g ++(instead.)415 3770 y(The)i(D)n(AR)n(CS)p 880 3770 V 30 + w(W)n(GET)f(en)n(vironmen)n(t)f(v)-5 b(ariable)27 b(de\014nes)i(the)f +-(command)g(that)h(darcs)291 3422 y(will)19 b(use)h(to)f(fetc)n(h)h(all) ++(command)g(that)h(darcs)291 3870 y(will)19 b(use)h(to)f(fetc)n(h)h(all) + f(URLs)h(for)f(remote)g(rep)r(ositories.)32 b(The)20 +-b(\014rst)f(w)n(ord)g(in)g(the)h(command)291 3522 y(m)n(ust)27 ++b(\014rst)f(w)n(ord)g(in)g(the)h(command)291 3969 y(m)n(ust)27 + b(b)r(e)h(the)g(name)g(of)f(an)g(executable)g(lo)r(cated)h(in)g(y)n +-(our)e(path.)37 b(Extra)26 b(argumen)n(ts)g(can)291 3621 ++(our)e(path.)37 b(Extra)26 b(argumen)n(ts)g(can)291 4069 + y(b)r(e)i(included)g(as)f(w)n(ell,)g(suc)n(h)g(as:)291 +-3785 y Fr(wget)42 b(-q)415 3948 y Fx(Darcs)26 b(will)i(app)r(end)f ++4285 y Fr(wget)42 b(-q)415 4494 y Fx(Darcs)26 b(will)i(app)r(end)f + Fr(-i)g Fx(to)g(the)g(argumen)n(t)g(list,)g(whic)n(h)g(it)h(uses)f(to)g +-(pro)n(vide)f(a)h(list)g(of)291 4047 y(URLS)d(to)f(do)n(wnload.)34 ++(pro)n(vide)f(a)h(list)g(of)291 4593 y(URLS)d(to)f(do)n(wnload.)34 + b(This)24 b(allo)n(ws)e(wget)h(to)h(do)n(wnload)e(m)n(ultiple)i(patc)n +-(hes)f(at)h(the)f(same)291 4147 y(time.)36 b(It's)25 ++(hes)f(at)h(the)f(same)291 4693 y(time.)36 b(It's)25 + b(p)r(ossible)f(to)h(use)f(another)g(command)g(b)r(esides)h +-Fr(wget)e Fx(with)i(this)g(en)n(vironmen)n(t)291 4247 ++Fr(wget)e Fx(with)i(this)g(en)n(vironmen)n(t)291 4793 + y(v)-5 b(ariable,)26 b(but)i(it)g(m)n(ust)g(supp)r(ort)g(the)g + Fr(-i)e Fx(option)i(in)g(the)g(same)f(w)n(a)n(y)-7 b(.)415 +-4346 y(These)39 b(commands)f(are)g Fs(not)46 b Fx(in)n(terpreted)38 ++4899 y(These)39 b(commands)f(are)g Fs(not)46 b Fx(in)n(terpreted)38 + b(b)n(y)h(a)f(shell,)k(so)c(y)n(ou)g(cannot)g(use)h(shell)291 +-4446 y(meta-c)n(haracters.)291 4717 y Fq(4.5)135 b(Highligh)l(ted)47 +-b(output)291 4899 y Fx(If)33 b(the)g(terminal)f(understands)g(ANSI)h +-(color)f(escap)r(e)g(sequences,)h(darcs)e(will)i(highligh)n(t)291 +-4998 y(certain)27 b(k)n(eyw)n(ords)f(and)i(delimiters)g(when)g(prin)n +-(ting)g(patc)n(hes.)37 b(This)29 b(can)e(b)r(e)i(turned)f(o\013)p +-eop end ++4998 y(meta-c)n(haracters.)p eop end + %%Page: 36 36 + TeXDict begin 36 35 bop 739 282 a Fx(36)1272 b Fu(CHAPTER)27 +-b(4.)64 b(CONFIGURING)29 b(D)n(AR)n(CS)739 515 y Fx(b)n(y)j(setting)g +-(the)h(en)n(vironmen)n(t)f(v)-5 b(ariable)31 b(D)n(AR)n(CS)p +-2376 515 25 4 v 30 w(DONT)p 2656 515 V 30 w(COLOR)h(to)g(1.)51 +-b(If)33 b(y)n(ou)e(use)739 615 y(a)i(pager)g(that)h(happ)r(ens)g(to)g +-(understand)f(ANSI)i(colors,)f(lik)n(e)f Fr(less)42 b(-R)p +-Fx(,)34 b(darcs)e(can)i(b)r(e)739 715 y(forced)27 b(alw)n(a)n(ys)f(to)i +-(highligh)n(t)f(the)i(output)f(b)n(y)g(setting)f(D)n(AR)n(CS)p +-2799 715 V 31 w(AL)-9 b(W)g(A)i(YS)p 3174 715 V 30 w(COLOR)27 +-b(to)739 814 y(1.)48 b(If)32 b(y)n(ou)f(can't)h(see)f(colors)f(y)n(ou)g +-(can)i(set)f(D)n(AR)n(CS)p 2433 814 V 30 w(AL)-7 b(TERNA)g(TIVE)p +-3074 814 V 30 w(COLOR)31 b(to)h(1,)739 914 y(and)27 b(darcs)g(will)h +-(use)f(ANSI)h(co)r(des)g(for)f(b)r(old)g(and)h(rev)n(erse)d(video)j +-(instead)f(of)h(colors.)863 1020 y(By)20 b(default)h(darcs)d(will)j +-(escap)r(e)e(\(b)n(y)h(highligh)n(ting)f(if)i(p)r(ossible\))f(an)n(y)f +-(kind)h(of)g(spaces)f(at)739 1120 y(the)g(end)g(of)f(lines)h(when)g +-(sho)n(wing)e(patc)n(h)h(con)n(ten)n(ts.)34 b(If)19 b(y)n(ou)e(don't)i +-(w)n(an)n(t)f(this)h(y)n(ou)f(can)g(turn)739 1220 y(it)25 +-b(o\013)f(b)n(y)g(setting)g(D)n(AR)n(CS)p 1607 1220 V +-30 w(DONT)p 1887 1220 V 31 w(ESCAPE)p 2257 1220 V 28 +-w(TRAILING)p 2707 1220 V 31 w(SP)-7 b(A)n(CES)23 b(to)i(1.)35 +-b(A)25 b(sp)r(ecial)739 1319 y(case)18 b(exists)h(for)g(only)g +-(carriage)e(returns:)32 b(D)n(AR)n(CS)p 2334 1319 V 30 +-w(DONT)p 2614 1319 V 30 w(ESCAPE)p 2983 1319 V 29 w(TRAILING)p +-3434 1319 V 30 w(CR.)739 1631 y Fq(4.6)135 b(Character)52 +-b(escaping)g(and)e(non-ASCI)t(I)g(c)l(harac-)1045 1780 +-y(ter)c(enco)t(dings)739 1975 y Fx(Darcs)39 b(needs)h(to)g(escap)r(e)f +-(certain)g(c)n(haracters)f(when)i(prin)n(ting)g(patc)n(h)f(con)n(ten)n +-(ts)h(to)g(a)739 2075 y(terminal.)h(Characters)27 b(lik)n(e)h +-Fs(b)l(acksp)l(ac)l(e)37 b Fx(can)29 b(otherwise)f(hide)h(patc)n(h)g +-(con)n(ten)n(t)f(from)h(the)739 2174 y(user,)e(and)h(other)g(c)n +-(haracter)e(sequences)h(can)g(ev)n(en)h(in)g(some)g(cases)f(redirect)g +-(commands)739 2274 y(to)g(the)h(shell)g(if)g(the)g(terminal)f(allo)n +-(ws)g(it.)863 2380 y(By)g(default)g(darcs)e(will)i(only)f(allo)n(w)g +-(prin)n(table)g(7-bit)g(ASCI)r(I)h(c)n(haracters)e(\(including)739 +-2480 y(space\),)f(and)h(the)f(t)n(w)n(o)g(con)n(trol)f(c)n(haracters)f ++b(4.)64 b(CONFIGURING)29 b(D)n(AR)n(CS)739 515 y Fq(4.5)135 ++b(Highligh)l(ted)47 b(output)739 712 y Fx(If)33 b(the)g(terminal)f ++(understands)g(ANSI)i(color)d(escap)r(e)h(sequences,)h(darcs)f(will)h ++(highligh)n(t)739 811 y(certain)27 b(k)n(eyw)n(ords)f(and)i(delimiters) ++g(when)g(prin)n(ting)g(patc)n(hes.)38 b(This)28 b(can)g(b)r(e)g(turned) ++g(o\013)739 911 y(b)n(y)k(setting)g(the)h(en)n(vironmen)n(t)f(v)-5 ++b(ariable)31 b(D)n(AR)n(CS)p 2376 911 25 4 v 30 w(DONT)p ++2656 911 V 30 w(COLOR)h(to)g(1.)51 b(If)33 b(y)n(ou)e(use)739 ++1010 y(a)i(pager)g(that)h(happ)r(ens)g(to)g(understand)f(ANSI)i ++(colors,)f(lik)n(e)f Fr(less)42 b(-R)p Fx(,)34 b(darcs)e(can)i(b)r(e) ++739 1110 y(forced)27 b(alw)n(a)n(ys)f(to)i(highligh)n(t)f(the)i(output) ++f(b)n(y)g(setting)f(D)n(AR)n(CS)p 2799 1110 V 31 w(AL)-9 ++b(W)g(A)i(YS)p 3174 1110 V 30 w(COLOR)27 b(to)739 1210 ++y(1.)48 b(If)32 b(y)n(ou)f(can't)h(see)f(colors)f(y)n(ou)g(can)i(set)f ++(D)n(AR)n(CS)p 2433 1210 V 30 w(AL)-7 b(TERNA)g(TIVE)p ++3074 1210 V 30 w(COLOR)31 b(to)h(1,)739 1309 y(and)e(darcs)e(will)i ++(use)g(ANSI)g(co)r(des)g(for)f(b)r(old)h(and)g(rev)n(erse)e(video)h ++(instead)g(of)h(colors.)42 b(In)739 1409 y(addition,)23 ++b(there)g(is)f(an)h(extra-colorful)d(mo)r(de,)k(whic)n(h)e(is)h(not)f ++(enabled)h(b)n(y)f(default,)i(whic)n(h)739 1509 y(can)j(b)r(e)h(activ) ++-5 b(ated)28 b(with)g(D)n(AR)n(CS)p 1844 1509 V 30 w(DO)p ++2002 1509 V 30 w(COLOR)p 2335 1509 V 29 w(LINES.)863 ++1616 y(By)20 b(default)h(darcs)d(will)j(escap)r(e)e(\(b)n(y)h(highligh) ++n(ting)f(if)i(p)r(ossible\))f(an)n(y)f(kind)h(of)g(spaces)f(at)739 ++1716 y(the)g(end)g(of)f(lines)h(when)g(sho)n(wing)e(patc)n(h)h(con)n ++(ten)n(ts.)34 b(If)19 b(y)n(ou)e(don't)i(w)n(an)n(t)f(this)h(y)n(ou)f ++(can)g(turn)739 1815 y(it)25 b(o\013)f(b)n(y)g(setting)g(D)n(AR)n(CS)p ++1607 1815 V 30 w(DONT)p 1887 1815 V 31 w(ESCAPE)p 2257 ++1815 V 28 w(TRAILING)p 2707 1815 V 31 w(SP)-7 b(A)n(CES)23 ++b(to)i(1.)35 b(A)25 b(sp)r(ecial)739 1915 y(case)18 b(exists)h(for)g ++(only)g(carriage)e(returns:)32 b(D)n(AR)n(CS)p 2334 1915 ++V 30 w(DONT)p 2614 1915 V 30 w(ESCAPE)p 2983 1915 V 29 ++w(TRAILING)p 3434 1915 V 30 w(CR.)739 2231 y Fq(4.6)135 ++b(Character)52 b(escaping)g(and)e(non-ASCI)t(I)g(c)l(harac-)1045 ++2380 y(ter)c(enco)t(dings)739 2576 y Fx(Darcs)39 b(needs)h(to)g(escap)r ++(e)f(certain)g(c)n(haracters)f(when)i(prin)n(ting)g(patc)n(h)f(con)n ++(ten)n(ts)h(to)g(a)739 2676 y(terminal.)h(Characters)27 ++b(lik)n(e)h Fs(b)l(acksp)l(ac)l(e)37 b Fx(can)29 b(otherwise)f(hide)h ++(patc)n(h)g(con)n(ten)n(t)f(from)h(the)739 2776 y(user,)e(and)h(other)g ++(c)n(haracter)e(sequences)h(can)g(ev)n(en)h(in)g(some)g(cases)f ++(redirect)g(commands)739 2875 y(to)g(the)h(shell)g(if)g(the)g(terminal) ++f(allo)n(ws)g(it.)863 2983 y(By)g(default)g(darcs)e(will)i(only)f(allo) ++n(w)g(prin)n(table)g(7-bit)g(ASCI)r(I)h(c)n(haracters)e(\(including)739 ++3082 y(space\),)f(and)h(the)f(t)n(w)n(o)g(con)n(trol)f(c)n(haracters)f + Fs(tab)30 b Fx(and)24 b Fs(new)t(line)p Fx(.)36 b(\(See)25 +-b(the)g(last)f(paragraph)739 2580 y(in)j(this)f(section)g(for)g(a)g(w)n ++b(the)g(last)f(paragraph)739 3182 y(in)j(this)f(section)g(for)g(a)g(w)n + (a)n(y)f(to)i(tailor)e(this)i(b)r(eha)n(vior.\))35 b(All)27 +-b(other)f(o)r(ctets)g(are)g(prin)n(ted)g(in)739 2679 ++b(other)f(o)r(ctets)g(are)g(prin)n(ted)g(in)739 3282 + y(quoted)h(form)h(\(as)f Fr(^)24 +-b Fx(or)j Fr(\\)p Fx(\).)863 2786 y(Darcs)24 ++b Fx(or)j Fr(\\)p Fx(\).)863 3389 y(Darcs)24 + b(has)g(some)g(limited)h(supp)r(ort)f(for)g(lo)r(cales.)35 + b(If)25 b(the)g(system's)f(lo)r(cale)g(is)g(a)g(single-)739 +-2885 y(b)n(yte)j(c)n(haracter)e(enco)r(ding,)h(lik)n(e)h(the)g(Latin)g ++3489 y(b)n(yte)j(c)n(haracter)e(enco)r(ding,)h(lik)n(e)h(the)g(Latin)g + (enco)r(dings,)f(y)n(ou)h(can)f(set)h(the)g(en)n(vironmen)n(t)739 +-2985 y(v)-5 b(ariable)26 b(D)n(AR)n(CS)p 1343 2985 V +-30 w(DONT)p 1623 2985 V 30 w(ESCAPE)p 1992 2985 V 29 ++3588 y(v)-5 b(ariable)26 b(D)n(AR)n(CS)p 1343 3588 V ++30 w(DONT)p 1623 3588 V 30 w(ESCAPE)p 1992 3588 V 29 + w(ISPRINT)h(to)g(1)f(and)h(darcs)f(will)h(displa)n(y)f(all)h(the)739 +-3085 y(prin)n(tables)h(in)g(the)h(curren)n(t)f(system)g(lo)r(cale)g ++3688 y(prin)n(tables)h(in)g(the)h(curren)n(t)f(system)g(lo)r(cale)g + (instead)g(of)g(just)h(the)g(ASCI)r(I)g(ones.)39 b(NOTE:)739 +-3184 y(This)e(curen)n(tly)f(do)r(es)g(not)h(w)n(ork)e(on)h(some)h(arc)n +-(hitectures)e(if)i(darcs)f(is)g(compiled)h(with)739 3284 ++3787 y(This)e(curen)n(tly)f(do)r(es)g(not)h(w)n(ork)e(on)h(some)h(arc)n ++(hitectures)e(if)i(darcs)f(is)g(compiled)h(with)739 3887 + y(GHC)21 b(6.4.)33 b(Some)20 b(non-ASCI)r(I)g(con)n(trol)f(c)n + (haracters)f(migh)n(t)i(b)r(e)h(prin)n(ted)f(and)g(can)g(p)r(ossibly) +-739 3384 y(sp)r(o)r(of)27 b(the)h(terminal.)863 3490 ++739 3987 y(sp)r(o)r(of)27 b(the)h(terminal.)863 4094 + y(F)-7 b(or)24 b(m)n(ulti-b)n(yte)h(c)n(haracter)d(enco)r(dings)i + (things)h(are)e(less)h(smo)r(oth.)36 b(UTF-8)24 b(will)h(w)n(ork)739 +-3590 y(if)30 b(y)n(ou)g(set)g(D)n(AR)n(CS)p 1402 3590 +-V 30 w(DONT)p 1682 3590 V 30 w(ESCAPE)p 2051 3590 V 29 ++4194 y(if)30 b(y)n(ou)g(set)g(D)n(AR)n(CS)p 1402 4194 ++V 30 w(DONT)p 1682 4194 V 30 w(ESCAPE)p 2051 4194 V 29 + w(8BIT)f(to)h(1,)h(but)f(non-prin)n(tables)f(outside)h(the)739 +-3689 y(7-bit)22 b(ASCI)r(I)h(range)e(are)h(no)g(longer)f(escap)r(ed.)35 ++4293 y(7-bit)22 b(ASCI)r(I)h(range)e(are)h(no)g(longer)f(escap)r(ed.)35 + b(E.g.,)23 b(the)g(extra)e(con)n(trol)g(c)n(haracters)g(from)739 +-3789 y(Latin-1)33 b(migh)n(t)g(lea)n(v)n(e)f(y)n(our)g(terminal)i(at)f ++4393 y(Latin-1)33 b(migh)n(t)g(lea)n(v)n(e)f(y)n(our)g(terminal)i(at)f + (the)h(mercy)f(of)g(the)h(patc)n(h)g(con)n(ten)n(ts.)54 +-b(Space)739 3889 y(c)n(haracters)26 b(outside)i(the)h(7-bit)f(ASCI)r(I) ++b(Space)739 4493 y(c)n(haracters)26 b(outside)i(the)h(7-bit)f(ASCI)r(I) + h(range)e(are)g(no)h(longer)g(recognized)e(and)j(will)f(not)739 +-3988 y(b)r(e)g(prop)r(erly)e(escap)r(ed)i(at)f(line)h(endings.)863 +-4095 y(As)38 b(a)f(last)g(resort)g(y)n(ou)f(can)i(set)f(D)n(AR)n(CS)p +-2250 4095 V 30 w(DONT)p 2530 4095 V 30 w(ESCAPE)p 2899 +-4095 V 29 w(ANYTHING)i(to)f(1.)739 4195 y(Then)23 b(ev)n(erything)g ++4592 y(b)r(e)g(prop)r(erly)e(escap)r(ed)i(at)f(line)h(endings.)863 ++4700 y(As)38 b(a)f(last)g(resort)g(y)n(ou)f(can)i(set)f(D)n(AR)n(CS)p ++2250 4700 V 30 w(DONT)p 2530 4700 V 30 w(ESCAPE)p 2899 ++4700 V 29 w(ANYTHING)i(to)f(1.)739 4799 y(Then)23 b(ev)n(erything)g + (that)g(do)r(esn't)h(\015ip)f(co)r(de)h(sets)f(should)g(w)n(ork,)g(and) +-g(so)g(will)g(all)g(the)h(b)r(ells)739 4294 y(and)29 ++g(so)g(will)g(all)g(the)h(b)r(ells)739 4899 y(and)29 + b(whistles)h(in)g(y)n(our)e(terminal.)42 b(This)30 b(en)n(vironmen)n(t) + e(v)-5 b(ariable)29 b(can)g(also)f(b)r(e)i(handy)g(if)739 +-4394 y(y)n(ou)f(pip)r(e)i(the)f(output)g(to)g(a)g(pager)e(or)h +-(external)g(\014lter)h(that)g(kno)n(ws)f(b)r(etter)h(than)g(darcs)739 +-4493 y(ho)n(w)38 b(to)g(handle)h(y)n(our)e(enco)r(ding.)70 +-b(Note)38 b(that)h Fs(al)t(l)48 b Fx(escaping,)41 b(including)e(the)g +-(sp)r(ecial)739 4593 y(escaping)26 b(of)i(an)n(y)f(line)h(ending)f +-(spaces,)g(will)h(b)r(e)g(turned)f(o\013)h(b)n(y)f(this)h(setting.)863 +-4700 y(There)k(are)e(t)n(w)n(o)h(en)n(vironmen)n(t)g(v)-5 +-b(ariables)30 b(y)n(ou)h(can)g(set)h(to)f(explicitly)h(tell)g(darcs)e +-(to)739 4799 y(not)h(escap)r(e)g(or)f(escap)r(e)g(o)r(ctets.)48 +-b(They)31 b(are)f(D)n(AR)n(CS)p 2463 4799 V 30 w(DONT)p +-2743 4799 V 30 w(ESCAPE)p 3112 4799 V 29 w(EXTRA)h(and)739 +-4899 y(D)n(AR)n(CS)p 1032 4899 V 30 w(ESCAPE)p 1401 4899 +-V 29 w(EXTRA.)22 b(Their)f(v)-5 b(alues)21 b(should)h(b)r(e)g(strings)f +-(consisting)g(of)g(the)i(v)n(er-)739 4998 y(batim)e(o)r(ctets)h(in)f +-(question.)35 b(The)21 b(do-escap)r(es)f(tak)n(e)h(precedence)f(o)n(v)n +-(er)g(the)i(don)n(t-escap)r(es.)p eop end ++4998 y(y)n(ou)f(pip)r(e)i(the)f(output)g(to)g(a)g(pager)e(or)h ++(external)g(\014lter)h(that)g(kno)n(ws)f(b)r(etter)h(than)g(darcs)p ++eop end + %%Page: 37 37 + TeXDict begin 37 36 bop 291 282 a Fu(4.6.)51 b(CHARA)n(CTER)19 + b(ESCAPING)f(AND)h(NON-ASCI)r(I)g(CHARA)n(CTER)g(ENCODINGS)p +-Fx(37)291 515 y(Space)28 b(c)n(haracters)f(are)h(still)h(escap)r(ed)f +-(at)h(line)g(endings)g(though.)41 b(The)29 b(sp)r(ecial)f(en)n(viron-) +-291 615 y(men)n(t)34 b(v)-5 b(ariable)34 b(D)n(AR)n(CS)p +-1119 615 25 4 v 30 w(DONT)p 1399 615 V 30 w(ESCAPE)p +-1768 615 V 29 w(TRAILING)p 2219 615 V 30 w(CR)h(turns)f(o\013)h +-(escaping)e(of)291 715 y(carriage)25 b(return)i(last)g(on)g(the)h(line) +-g(\(DOS)g(st)n(yle\).)p eop end ++Fx(37)291 515 y(ho)n(w)38 b(to)g(handle)g(y)n(our)g(enco)r(ding.)69 ++b(Note)39 b(that)g Fs(al)t(l)48 b Fx(escaping,)41 b(including)d(the)h ++(sp)r(ecial)291 615 y(escaping)26 b(of)i(an)n(y)e(line)i(ending)g ++(spaces,)e(will)i(b)r(e)g(turned)g(o\013)g(b)n(y)f(this)h(setting.)415 ++715 y(There)j(are)g(t)n(w)n(o)g(en)n(vironmen)n(t)f(v)-5 ++b(ariables)31 b(y)n(ou)f(can)i(set)f(to)h(explicitly)g(tell)g(darcs)e ++(to)291 814 y(not)h(escap)r(e)f(or)h(escap)r(e)f(o)r(ctets.)48 ++b(They)31 b(are)f(D)n(AR)n(CS)p 2015 814 25 4 v 30 w(DONT)p ++2295 814 V 30 w(ESCAPE)p 2664 814 V 29 w(EXTRA)h(and)291 ++914 y(D)n(AR)n(CS)p 584 914 V 30 w(ESCAPE)p 953 914 V ++28 w(EXTRA.)22 b(Their)g(v)-5 b(alues)21 b(should)h(b)r(e)g(strings)f ++(consisting)f(of)i(the)g(v)n(er-)291 1013 y(batim)f(o)r(ctets)g(in)h ++(question.)34 b(The)22 b(do-escap)r(es)e(tak)n(e)g(precedence)h(o)n(v)n ++(er)f(the)h(don)n(t-escap)r(es.)291 1113 y(Space)28 b(c)n(haracters)f ++(are)h(still)h(escap)r(ed)f(at)h(line)g(endings)g(though.)41 ++b(The)29 b(sp)r(ecial)f(en)n(viron-)291 1213 y(men)n(t)34 ++b(v)-5 b(ariable)34 b(D)n(AR)n(CS)p 1119 1213 V 30 w(DONT)p ++1399 1213 V 30 w(ESCAPE)p 1768 1213 V 29 w(TRAILING)p ++2219 1213 V 30 w(CR)h(turns)f(o\013)h(escaping)e(of)291 ++1312 y(carriage)25 b(return)i(last)g(on)g(the)h(line)g(\(DOS)g(st)n ++(yle\).)p eop end + %%Page: 38 38 + TeXDict begin 38 37 bop 739 282 a Fx(38)1272 b Fu(CHAPTER)27 + b(4.)64 b(CONFIGURING)29 b(D)n(AR)n(CS)p eop end +@@ -8028,17 +8005,16 @@ + (ositories.)40 b(Same)29 b(line)g(do)r(es)g Fs(not)37 + b Fx(mean)29 b(the)g(same)g(line)g(n)n(um)n(b)r(er)g(and)739 + 1067 y(\014le)f(name,)f(but)h(the)g(same)f(line)h(added)g(b)n(y)f(a)g +-(common)g(dep)r(ended-up)r(on)h(patc)n(h.)863 1167 y(Con)n(trary)34 +-b(to)i(man)n(y)g(other)f(merging)g(to)r(ols,)j(darcs)d(considers)f(t)n +-(w)n(o)i(patc)n(hes)f(mak-)739 1266 y(ing)42 b(the)i +-Fs(same)49 b Fx(c)n(hange)42 b(to)g(b)r(e)h(a)g(con\015ict.)82 +-b(In)43 b(fact,)k(darcs)41 b(do)r(esn't)i(ev)n(en)f(lo)r(ok)g(at)739 +-1366 y(the)36 b(con)n(ten)n(ts)f(of)h(the)h(con\015icting)e(lines.)62 +-b(If)36 b(y)n(ou)g(think)g(this)g(is)g(wrong,)h(think)f(ab)r(out)739 +-1466 y(t)n(w)n(o)g(di\013eren)n(t)g(patc)n(hes)g(eac)n(h)g(adding)g(a)g +-(new)h(k)n(eyw)n(ord)d(and)j(also)e(c)n(hanging)g(the)i(line)739 +-1565 y(\\)p Fr(#define)j(NUM_OF_KEYWORDS)d(17)p Fx(")27 +-b(to)g(\\)p Fr(#define)41 b(NUM_OF_KEYWORDS)c(18)p Fx(".)863 ++(common)g(dep)r(ended-up)r(on)h(patc)n(h.)863 1167 y(If)e(y)n(ou)d(are) ++h(using)h(a)f(darcs-2)f(rep)r(ository)g(\(Section)i(6.4.1\),)f(darcs)g ++(do)r(es)g Fs(not)32 b Fx(consider)739 1266 y(t)n(w)n(o)24 ++b(patc)n(hes)g(making)g(the)h Fs(same)31 b Fx(c)n(hange)24 ++b(to)g(b)r(e)i(a)e(con\015ict,)h(m)n(uc)n(h)g(in)g(the)g(same)f ++(fashion)739 1366 y(as)j(other)f(v)n(ersion)g(con)n(trol)g(systems.)37 ++b(\(The)28 b(ca)n(v)n(eat)d(here)i(is)h(t)n(w)n(o)e(non-iden)n(tical)h ++(patc)n(hes)739 1466 y(with)h(some)g(iden)n(tical)g(c)n(hanges)f(ma)n ++(y)g(con\015ict.)38 b(F)-7 b(or)28 b(the)g(most)g(part,)g(darcs)f ++(should)h(just)739 1565 y(do)f(what)h(y)n(ou)f(exp)r(ect\).)863 + 1665 y(A)22 b(con\015ict)g Fs(happ)l(ens)30 b Fx(when)22 + b(t)n(w)n(o)f(con\015icting)g(patc)n(hes)g(meet)h(in)g(the)h(same)e + (rep)r(ository)-7 b(.)739 1764 y(This)25 b(is)g(no)g(problem)g(for)g +@@ -8471,624 +8447,632 @@ + 615 y(additional)38 b(output)h(that)g(ma)n(y)f(b)r(e)h(useful)g(for)g + (debugging)e(its)i(b)r(eha)n(vior,)i(but)e(whic)n(h)291 + 715 y(otherwise)26 b(w)n(ould)h(not)h(b)r(e)g(in)n(teresting.)p +-527 909 2392 4 v 527 984 a Fr(--repodir)p 527 1039 V +-291 1233 a Fx(Another)i(common)f(option)h(is)h(the)f ++527 895 2392 4 v 527 969 a Fr(--repodir)p 527 1024 V ++291 1205 a Fx(Another)i(common)f(option)h(is)h(the)f + Fr(--repodir)d Fx(option,)k(whic)n(h)f(allo)n(ws)f(y)n(ou)g(to)i(sp)r +-(ecify)291 1333 y(the)e(directory)e(of)h(the)h(rep)r(ository)e(in)i ++(ecify)291 1304 y(the)e(directory)e(of)h(the)h(rep)r(ository)e(in)i + (whic)n(h)g(to)f(p)r(erform)g(the)h(command.)40 b(This)28 +-b(option)291 1432 y(is)e(used)g(with)h(commands,)f(suc)n(h)g(as)g ++b(option)291 1404 y(is)e(used)g(with)h(commands,)f(suc)n(h)g(as)g + (whatsnew,)g(that)h(ordinarily)e(w)n(ould)h(b)r(e)g(p)r(erformed)291 +-1532 y(within)33 b(a)f(rep)r(ository)f(directory)-7 b(,)32 ++1503 y(within)33 b(a)f(rep)r(ository)f(directory)-7 b(,)32 + b(and)g(allo)n(ws)f(y)n(ou)h(to)g(use)h(those)f(commands)f(without)291 +-1632 y(actually)g(b)r(eing)h(in)h(the)g(rep)r(ository)d(directory)h ++1603 y(actually)g(b)r(eing)h(in)h(the)g(rep)r(ository)d(directory)h + (when)h(calling)g(the)h(command.)50 b(This)32 b(is)291 +-1731 y(useful)27 b(when)h(running)f(darcs)f(in)i(a)f(pip)r(e,)h(as)e ++1703 y(useful)27 b(when)h(running)f(darcs)f(in)i(a)f(pip)r(e,)h(as)e + (migh)n(t)h(b)r(e)h(the)g(case)e(when)i(running)f Fr(apply)291 +-1831 y Fx(from)g(a)g(mailer.)291 2062 y Fv(Selecting)g(patc)m(hes)83 +-b Fx(Man)n(y)24 b(commands)g(op)r(erate)f(on)h(a)g(patc)n(h)g(or)g +-(patc)n(hes)f(that)i(ha)n(v)n(e)291 2162 y(already)18 +-b(b)r(een)h(recorded.)33 b(There)19 b(are)f(a)h(n)n(um)n(b)r(er)h(of)f +-(options)g(that)g(sp)r(ecify)h(whic)n(h)g(patc)n(hes)291 +-2262 y(are)34 b(selected)i(for)f(these)h(op)r(erations:)52 +-b Fr(--patch)p Fx(,)35 b Fr(--match)p Fx(,)g Fr(--tag)p +-Fx(,)h(and)g(v)-5 b(arian)n(ts)34 b(on)291 2361 y(these,)25 +-b(whic)n(h)f(for)g Fr(--patch)e Fx(are)h Fr(--patches)p +-Fx(,)f Fr(--from-patch)p Fx(,)e(and)k Fr(--to-patch)p +-Fx(.)32 b(The)291 2461 y Fr(--patch)f Fx(and)k Fr(--tag)e +-Fx(forms)h(simply)h(tak)n(e)e(\(POSIX)i(extended,)i(ak)-5 +-b(a)34 b Fr(egrep)p Fx(\))f(regular)291 2560 y(expressions)26 ++1802 y Fx(from)g(a)g(mailer.)p 527 1983 V 527 2057 a ++Fr(--remote-repo)p 527 2112 V 415 2292 a Fx(Some)j(commands,)g(suc)n(h) ++g(as)g Fr(pull)f Fx(require)g(a)h(remote)f(rep)r(ository)g(to)h(b)r(e)h ++(sp)r(eci\014ed,)291 2392 y(either)k(from)g(the)h(command)g(line)g(or)e ++(as)h(a)h(default.)61 b(The)36 b Fr(--remote-repo)30 ++b Fx(pro)n(vides)291 2492 y(an)38 b(alternativ)n(e)g(w)n(a)n(y)f(to)i ++(supply)g(this)g(remote)f(rep)r(ository)f(path.)70 b(This)39 ++b(\015ag)f(can)h(b)r(e)291 2591 y(seen)d(as)g(temp)r(orarily)g ++(\\replacing")f(the)i(default)h(rep)r(ository)-7 b(.)63 ++b(Setting)37 b(it)h(causes)e(the)291 2691 y(command)25 ++b(to)g(ignore)g(the)h(default)g(rep)r(ository)e(\(it)j(also)d(do)r(es)i ++(not)f(a\013ect,)i(i.e.)36 b(o)n(v)n(erwrite)291 2791 ++y(the)21 b(default)g(rep)r(ository\).)33 b(On)21 b(the)g(other)g(hand,) ++h(if)f(an)n(y)f(other)h(rep)r(ositories)e(are)h(supplied)291 ++2890 y(as)h(command)h(line)g(argumen)n(ts,)g(this)g(\015ag)g(will)g(b)r ++(e)g(ignored)f(\(and)i(the)f(default)h(rep)r(ository)291 ++2990 y(ma)n(y)j(b)r(e)i(o)n(v)n(erwritten\).)291 3205 ++y Fv(Selecting)f(patc)m(hes)83 b Fx(Man)n(y)24 b(commands)g(op)r(erate) ++f(on)h(a)g(patc)n(h)g(or)g(patc)n(hes)f(that)i(ha)n(v)n(e)291 ++3305 y(already)18 b(b)r(een)h(recorded.)33 b(There)19 ++b(are)f(a)h(n)n(um)n(b)r(er)h(of)f(options)g(that)g(sp)r(ecify)h(whic)n ++(h)g(patc)n(hes)291 3404 y(are)34 b(selected)i(for)f(these)h(op)r ++(erations:)52 b Fr(--patch)p Fx(,)35 b Fr(--match)p Fx(,)g ++Fr(--tag)p Fx(,)h(and)g(v)-5 b(arian)n(ts)34 b(on)291 ++3504 y(these,)25 b(whic)n(h)f(for)g Fr(--patch)e Fx(are)h ++Fr(--patches)p Fx(,)f Fr(--from-patch)p Fx(,)e(and)k ++Fr(--to-patch)p Fx(.)32 b(The)291 3604 y Fr(--patch)f ++Fx(and)k Fr(--tag)e Fx(forms)h(simply)h(tak)n(e)e(\(POSIX)i(extended,)i ++(ak)-5 b(a)34 b Fr(egrep)p Fx(\))f(regular)291 3703 y(expressions)26 + b(and)i(matc)n(h)g(them)g(against)f(tag)g(and)h(patc)n(h)g(names.)38 +-b Fr(--match)p Fx(,)25 b(describ)r(ed)291 2660 y(b)r(elo)n(w,)i(allo)n +-(ws)f(more)h(p)r(o)n(w)n(erful)g(patterns.)415 2763 y(The)i(plural)e ++b Fr(--match)p Fx(,)25 b(describ)r(ed)291 3803 y(b)r(elo)n(w,)i(allo)n ++(ws)f(more)h(p)r(o)n(w)n(erful)g(patterns.)415 3903 y(The)i(plural)e + (forms)h(of)h(these)f(options)g(select)g(all)g(matc)n(hing)g(patc)n +-(hes.)39 b(The)28 b(singular)291 2862 y(forms)36 b(select)i(the)f(last) ++(hes.)39 b(The)28 b(singular)291 4002 y(forms)36 b(select)i(the)f(last) + h(matc)n(hing)e(patc)n(h.)67 b(The)37 b(range)f(\(from)h(and)h(to\))f +-(forms)g(select)291 2962 y(patc)n(hes)27 b(after)g(or)f(up)i(to)g(\(b)r ++(forms)g(select)291 4102 y(patc)n(hes)27 b(after)g(or)f(up)i(to)g(\(b)r + (oth)g(inclusiv)n(e\))g(the)g(last)f(matc)n(hing)g(patc)n(h.)415 +-3065 y(These)g(options)g(use)g(the)g(curren)n(t)g(order)f(of)h(patc)n ++4201 y(These)g(options)g(use)g(the)g(curren)n(t)g(order)f(of)h(patc)n + (hes)f(in)i(the)f(rep)r(ository)-7 b(.)36 b(darcs)26 +-b(ma)n(y)291 3164 y(reorder)i(patc)n(hes,)j(so)f(this)h(is)g(not)f ++b(ma)n(y)291 4301 y(reorder)i(patc)n(hes,)j(so)f(this)h(is)g(not)f + (necessarily)f(the)i(order)e(of)i(creation)f(or)f(the)i(order)f(in)291 +-3264 y(whic)n(h)25 b(patc)n(hes)g(w)n(ere)g(applied.)36 ++4401 y(whic)n(h)25 b(patc)n(hes)g(w)n(ere)g(applied.)36 + b(Ho)n(w)n(ev)n(er,)24 b(as)h(long)g(as)g(y)n(ou)g(are)f(just)j +-(recording)d(patc)n(hes)291 3363 y(in)j(y)n(our)g(o)n(wn)g(rep)r ++(recording)d(patc)n(hes)291 4500 y(in)j(y)n(our)g(o)n(wn)g(rep)r + (ository)-7 b(,)26 b(they)i(will)f(remain)g(in)h(order.)415 +-3466 y(When)h(a)f(patc)n(h)g(or)f(a)h(group)f(of)h(patc)n(hes)g(is)g ++4600 y(When)h(a)f(patc)n(h)g(or)f(a)h(group)f(of)h(patc)n(hes)g(is)g + (selected,)g(all)g(patc)n(hes)g(they)g(dep)r(end)h(on)291 +-3566 y(get)f(silen)n(tly)h(selected)g(to)r(o.)41 b(F)-7 ++4700 y(get)f(silen)n(tly)h(selected)g(to)r(o.)41 b(F)-7 + b(or)29 b(example:)39 b Fr(darcs)j(pull)g(--patches)e(bugfix)26 +-b Fx(means)291 3665 y(\\pull)31 b(all)g(the)h(patc)n(hes)e(with)i ++b Fx(means)291 4799 y(\\pull)31 b(all)g(the)h(patc)n(hes)e(with)i + (`bug\014x')f(in)h(their)f(name,)h(along)f(with)g(an)n(y)g(patc)n(hes)g +-(they)291 3765 y(require.")i(If)23 b(y)n(ou)f(really)g(only)g(w)n(an)n ++(they)291 4899 y(require.")i(If)23 b(y)n(ou)f(really)g(only)g(w)n(an)n + (t)g(patc)n(hes)g(with)h(`bug\014x')g(in)g(their)g(name,)g(y)n(ou)f +-(should)291 3864 y(use)38 b(the)h Fr(--no-deps)c Fx(option,)41 ++(should)291 4998 y(use)38 b(the)h Fr(--no-deps)c Fx(option,)41 + b(whic)n(h)e(mak)n(es)e(darcs)h(exclude)g(an)n(y)g(matc)n(hed)h(patc)n +-(hes)291 3964 y(from)31 b(the)i(selection)e(whic)n(h)h(ha)n(v)n(e)f +-(dep)r(endencies)h(that)g(are)f(themselv)n(es)h(not)g(explicitly)291 +-4064 y(matc)n(hed)27 b(b)n(y)g(the)h(selection.)415 4166 +-y(F)-7 b(or)22 b Fr(unrecord)p Fx(,)e Fr(unpull)g Fx(and)i +-Fr(obliterate)p Fx(,)d(patc)n(hes)i(that)i(dep)r(end)g(on)e(the)i +-(selected)291 4266 y(patc)n(hes)40 b(are)f(silen)n(tly)i(included,)j +-(or)c(if)h Fr(--no-deps)c Fx(is)j(used)h(selected)f(patc)n(hes)g(with) +-291 4366 y(dep)r(endencies)27 b(on)h(not)f(selected)h(patc)n(hes)f(are) +-f(excluded)i(from)f(the)h(selection.)291 4597 y Fv(Matc)m(h)84 +-b Fx(Curren)n(tly)24 b Fr(--match)e Fx(accepts)i(\014v)n(e)h(primitiv)n +-(e)g(matc)n(h)f(t)n(yp)r(es,)i(although)e(there)291 4697 +-y(are)31 b(plans)h(to)g(expand)g(it)g(to)g(matc)n(h)h(more)e(patterns.) +-50 b(Also,)33 b(note)g(that)f(the)h(syn)n(tax)e(is)291 +-4796 y(still)c(preliminary)g(and)g(sub)5 b(ject)28 b(to)g(c)n(hange.) +-415 4899 y(The)36 b(\014rst)f(matc)n(h)h(t)n(yp)r(e)f(accepts)g(a)h +-(literal)f(string)g(whic)n(h)g(is)h(c)n(hec)n(k)n(ed)e(against)h(the) +-291 4998 y(patc)n(h)27 b(name.)37 b(The)27 b(syn)n(tax)g(is)p +-eop end ++(hes)p eop end + %%Page: 52 52 + TeXDict begin 52 51 bop 739 282 a Fx(52)1378 b Fu(CHAPTER)27 +-b(6.)64 b(D)n(AR)n(CS)28 b(COMMANDS)739 515 y Fr(darcs)41 +-b(annotate)g(--summary)f(--match)g('exact)h(foo+bar')739 +-670 y Fx(This)27 b(is)g(useful)g(for)g(situations)f(where)h(a)g(patc)n +-(h)f(name)h(con)n(tains)f(c)n(haracters)f(that)i(could)739 +-770 y(b)r(e)h(considered)e(sp)r(ecial)i(for)f(regular)f(expressions.) +-863 870 y(In)f(this)g(and)f(the)h(other)f(matc)n(h)h(t)n(yp)r(es,)g +-(the)g(argumen)n(t)e(m)n(ust)i(b)r(e)g(enclosed)f(in)g(double)739 +-969 y(quotes)39 b(if)h(it)g(con)n(tains)e(spaces.)71 ++b(6.)64 b(D)n(AR)n(CS)28 b(COMMANDS)739 515 y Fx(from)k(the)g ++(selection)f(whic)n(h)h(ha)n(v)n(e)f(dep)r(endencies)h(that)h(are)e ++(themselv)n(es)g(not)h(explicitly)739 615 y(matc)n(hed)27 ++b(b)n(y)h(the)g(selection.)863 715 y(F)-7 b(or)22 b Fr(unrecord)p ++Fx(,)e Fr(unpull)g Fx(and)i Fr(obliterate)p Fx(,)d(patc)n(hes)j(that)g ++(dep)r(end)h(on)f(the)g(selected)739 814 y(patc)n(hes)40 ++b(are)f(silen)n(tly)i(included,)j(or)c(if)h Fr(--no-deps)c ++Fx(is)k(used)f(selected)h(patc)n(hes)f(with)739 914 y(dep)r(endencies) ++28 b(on)f(not)h(selected)f(patc)n(hes)g(are)g(excluded)g(from)h(the)g ++(selection.)739 1128 y Fv(Matc)m(h)84 b Fx(Curren)n(tly)24 ++b Fr(--match)e Fx(accepts)j(\014v)n(e)f(primitiv)n(e)h(matc)n(h)g(t)n ++(yp)r(es,)g(although)f(there)739 1228 y(are)31 b(plans)h(to)g(expand)g ++(it)h(to)f(matc)n(h)g(more)f(patterns.)51 b(Also,)33 ++b(note)f(that)g(the)h(syn)n(tax)e(is)739 1328 y(still)d(preliminary)e ++(and)i(sub)5 b(ject)28 b(to)f(c)n(hange.)863 1427 y(The)36 ++b(\014rst)f(matc)n(h)h(t)n(yp)r(e)g(accepts)f(a)g(literal)g(string)g ++(whic)n(h)g(is)h(c)n(hec)n(k)n(ed)e(against)h(the)739 ++1527 y(patc)n(h)27 b(name.)37 b(The)28 b(syn)n(tax)e(is)739 ++1687 y Fr(darcs)41 b(annotate)g(--summary)f(--match)g('exact)h ++(foo+bar')739 1847 y Fx(This)27 b(is)g(useful)g(for)g(situations)f ++(where)h(a)g(patc)n(h)f(name)h(con)n(tains)f(c)n(haracters)f(that)i ++(could)739 1946 y(b)r(e)h(considered)e(sp)r(ecial)i(for)f(regular)f ++(expressions.)863 2046 y(In)f(this)g(and)f(the)h(other)f(matc)n(h)h(t)n ++(yp)r(es,)g(the)g(argumen)n(t)e(m)n(ust)i(b)r(e)g(enclosed)f(in)g ++(double)739 2146 y(quotes)39 b(if)h(it)g(con)n(tains)e(spaces.)71 + b(Y)-7 b(ou)40 b(can)f(escap)r(e)g(a)g(quote)g(in)h(the)f(argumen)n(t)g +-(with)739 1069 y(a)31 b(bac)n(kslash;)g(bac)n(kslash)e(escap)r(es)i ++(with)739 2245 y(a)31 b(bac)n(kslash;)g(bac)n(kslash)e(escap)r(es)i + (itself,)h(but)g(it)g(is)f(treated)g(literally)f(if)i(follo)n(w)n(ed)e +-(b)n(y)h(a)739 1168 y(c)n(haracter)20 b(other)i(than)h(a)f(double)h ++(b)n(y)h(a)739 2345 y(c)n(haracter)20 b(other)i(than)h(a)f(double)h + (quote)f(or)g(bac)n(kslash,)g(so)g(it)h(is)f(t)n(ypically)g(not)h +-(necessary)739 1268 y(to)35 b(escap)r(e)g(a)h(bac)n(kslash.)59 ++(necessary)739 2445 y(to)35 b(escap)r(e)g(a)h(bac)n(kslash.)59 + b(No)35 b(suc)n(h)h(escaping)e(is)i(necessary)d(unless)j(the)g(argumen) +-n(t)e(is)739 1368 y(enclosed)27 b(in)h(double)f(quotes.)863 +-1467 y(The)22 b(second)g(matc)n(h)f(t)n(yp)r(e)h(accepts)f(a)h(regular) ++n(t)e(is)739 2544 y(enclosed)27 b(in)h(double)f(quotes.)863 ++2644 y(The)22 b(second)g(matc)n(h)f(t)n(yp)r(e)h(accepts)f(a)h(regular) + e(expression)g(whic)n(h)i(is)g(c)n(hec)n(k)n(ed)e(against)739 +-1567 y(the)28 b(patc)n(h)f(name.)37 b(The)28 b(syn)n(tax)e(is)739 +-1722 y Fr(darcs)41 b(annotate)g(--summary)f(--match)g('name)i(foo')739 +-1877 y Fx(Note)34 b(that)g(to)g(matc)n(h)g(regexp)f(metac)n(haracters,) ++2743 y(the)28 b(patc)n(h)f(name.)37 b(The)28 b(syn)n(tax)e(is)739 ++2903 y Fr(darcs)41 b(annotate)g(--summary)f(--match)g('name)i(foo')739 ++3063 y Fx(Note)34 b(that)g(to)g(matc)n(h)g(regexp)f(metac)n(haracters,) + h(suc)n(h)f(as)h Fr(\()p Fx(,)h(literally)-7 b(,)35 b(they)g(m)n(ust)f +-(b)r(e)739 1976 y(escap)r(ed)e(with)h(bac)n(kslash)e(along)g(with)i(an) ++(b)r(e)739 3163 y(escap)r(ed)e(with)h(bac)n(kslash)e(along)g(with)i(an) + n(y)e(em)n(b)r(edded)i(double)g(quotes.)50 b(T)-7 b(o)32 +-b(matc)n(h)h(a)739 2076 y(literal)j(bac)n(kslash)f(it)h(m)n(ust)h(b)r ++b(matc)n(h)h(a)739 3263 y(literal)j(bac)n(kslash)f(it)h(m)n(ust)h(b)r + (e)g(written)g(quadrupled)e(in)i(general,)g(but)h(often)e(it)h(need)739 +-2176 y(not)i(b)r(e)h(escap)r(ed,)i(since)d(bac)n(kslash)f(is)h(only)g ++3362 y(not)i(b)r(e)h(escap)r(ed,)i(since)d(bac)n(kslash)f(is)h(only)g + (sp)r(ecial)g(in)h(regexps)e(when)h(follo)n(w)n(ed)g(b)n(y)739 +-2275 y(a)e(metac)n(haracter.)63 b(In)37 b(the)h(follo)n(wing)e(example) ++3462 y(a)e(metac)n(haracter.)63 b(In)37 b(the)h(follo)n(wing)e(example) + h(pairs,)h(the)g(\014rst)f(literal)f(is)h(matc)n(hed)739 +-2375 y(b)n(y)30 b(the)h(second)f(sequence)g(in)h(the)g(matc)n(h)f ++3562 y(b)n(y)30 b(the)h(second)f(sequence)g(in)h(the)g(matc)n(h)f + (name:)43 b(\\)p Fr(")p Fx(":\\)p Fr(\\")p Fx(",)28 b(\\)p + Fr(\\)p Fx(":\\)p Fr(\\\\\\\\)p Fx(",)g(\\)p Fr(\\x)p +-Fx(":\\)p Fr(\\x)p Fx(",)739 2475 y(\\)p Fr(\()p Fx(":\\)p +-Fr(\\\()p Fx(".)863 2574 y(The)g(third)g(matc)n(h)f(t)n(yp)r(e)h(matc)n ++Fx(":\\)p Fr(\\x)p Fx(",)739 3661 y(\\)p Fr(\()p Fx(":\\)p ++Fr(\\\()p Fx(".)863 3761 y(The)g(third)g(matc)n(h)f(t)n(yp)r(e)h(matc)n + (hes)f(the)h(darcs)f(hash)g(for)g(eac)n(h)g(patc)n(h:)739 +-2729 y Fr(darcs)41 b(annotate)g(--summary)f(--match)g(\\)826 +-2829 y('hash)i(20040403105958-)o(53a)o(90)o(-c)o(719)o(56)o(7e9)o(2c)o ++3921 y Fr(darcs)41 b(annotate)g(--summary)f(--match)g(\\)826 ++4020 y('hash)i(20040403105958-)o(53a)o(90)o(-c)o(719)o(56)o(7e9)o(2c)o + (3b0)o(ab)o(9e)o(ddd)o(52)o(90b)o(70)o(57)o(12b)o(8b)o(918)o(ef)o(')739 +-2984 y Fx(Note)36 b(y)n(ou)g(need)h(to)f(pro)n(vide)f(the)i(full)h ++4180 y Fx(Note)36 b(y)n(ou)g(need)h(to)f(pro)n(vide)f(the)i(full)h + (hash)e(string)g(as)f(ab)r(o)n(v)n(e.)63 b(This)36 b(is)g(in)n(tended)h +-(to)739 3083 y(b)r(e)27 b(used,)g(for)g(example,)f(b)n(y)h(programs)d ++(to)739 4280 y(b)r(e)27 b(used,)g(for)g(example,)f(b)n(y)h(programs)d + (allo)n(wing)i(y)n(ou)g(to)h(view)f(darcs)g(rep)r(ositories)f(\(e.g.) +-739 3183 y(CGI)j(scripts)f(lik)n(e)g(viewCVS\).)863 3283 ++739 4380 y(CGI)j(scripts)f(lik)n(e)g(viewCVS\).)863 4479 + y(The)d(fourth)f(matc)n(h)g(t)n(yp)r(e)h(accepts)f(a)f(regular)g + (expression)g(whic)n(h)h(is)g(c)n(hec)n(k)n(ed)f(against)739 +-3382 y(the)28 b(patc)n(h)f(author.)36 b(The)28 b(syn)n(tax)f(is)739 +-3537 y Fr(darcs)41 b(annotate)g(--summary)f(--match)g('author)h(foo') +-863 3692 y Fx(There)31 b(is)g(also)f(supp)r(ort)h(for)g(matc)n(hing)f ++4579 y(the)28 b(patc)n(h)f(author.)36 b(The)28 b(syn)n(tax)f(is)739 ++4739 y Fr(darcs)41 b(annotate)g(--summary)f(--match)g('author)h(foo') ++863 4899 y Fx(There)31 b(is)g(also)f(supp)r(ort)h(for)g(matc)n(hing)f + (b)n(y)h(date.)47 b(This)31 b(is)g(done)g(using)g(commands)739 +-3792 y(suc)n(h)c(as)739 3947 y Fr(darcs)41 b(annotate)g(--summary)f +-(--match)g('date)i("last)f(week"')739 4046 y(darcs)g(annotate)g +-(--summary)f(--match)g('date)i(yesterday')739 4146 y(darcs)f(annotate)g +-(--summary)f(--match)g('date)i("today)f(14:00"')739 4246 +-y(darcs)g(annotate)g(--summary)f(--match)g('date)i("tea)g(time)g +-(yesterday"')739 4345 y(darcs)f(annotate)g(--summary)f(--match)g('date) +-i("3)h(days)e(before)h(last)f(year)h(at)h(17:00"')739 +-4445 y(darcs)e(changes)g(--from-match)e('date)i("Sat)h(Jun)86 +-b(30)43 b(11:31:30)d(EDT)i(2004"')863 4600 y Fx(Notes:)57 +-b(when)38 b(matc)n(hing)f(on)g(the)h(ISO)f(format,)i(a)e(partial)g +-(date)g(is)h(treated)f(as)g(a)739 4700 y(range.)61 b(English)35 +-b(dates)h(can)f(either)h(refer)g(to)g(a)f(sp)r(eci\014c)h(da)n(y)g +-(\(\\6)f(mon)n(ths)h(ago',\\da)n(y)739 4799 y(b)r(efore)26 +-b(y)n(esterda)n(y"\),)e(or)h(to)h(an)f(in)n(terv)-5 b(al)26 +-b(from)f(some)g(past)h(date)g(\(\\last)f(mon)n(th"\))h(to)g(the)739 +-4899 y(presen)n(t.)51 b(Putting)32 b(this)h(all)f(together,)h(if)g(to)r +-(da)n(y)e(is)i(\\2004-07-24")27 b(then)32 b(the)h(follo)n(wing)739 +-4998 y(matc)n(hes)27 b(should)g(w)n(ork:)p eop end ++4998 y(suc)n(h)c(as)p eop end + %%Page: 53 53 + TeXDict begin 53 52 bop 291 282 a Fu(6.1.)63 b(COMMON)28 +-b(OPTIONS)e(TO)h(D)n(AR)n(CS)h(COMMANDS)767 b Fx(53)p +-415 436 2706 4 v 413 535 4 100 v 465 505 a Fv(date)412 +-b(patc)m(hes)32 b(selected)p 3119 535 V 415 539 2706 +-4 v 413 638 4 100 v 465 608 a Fx(2004)424 b(from)27 b(2004-01-01)c(up) +-28 b(to)f(and)h(including)g(2004-12-31)p 3119 638 V 413 +-738 V 465 708 a(2004-01)312 b(from)27 b(2004-01-01)c(up)28 +-b(to)f(and)h(including)g(2004-01-31)p 3119 738 V 413 +-837 V 465 808 a(2004-01-01)200 b(during)27 b(2004-01-01)p +-3119 837 V 415 841 2706 4 v 413 940 4 100 v 465 910 a(to)r(da)n(y)386 +-b(during)27 b(2004-07-24)c(\(starting)k(midnigh)n(t)h(in)g(y)n(our)e +-(timezone\))p 3119 940 V 413 1040 V 465 1010 a(y)n(esterda)n(y)248 +-b(during)27 b(2004-07-23)p 3119 1040 V 413 1140 V 465 +-1110 a(6)g(mon)n(ths)g(ago)104 b(during)27 b(2004-01-23)p +-3119 1140 V 415 1143 2706 4 v 413 1243 4 100 v 465 1213 ++b(OPTIONS)e(TO)h(D)n(AR)n(CS)h(COMMANDS)767 b Fx(53)291 ++515 y Fr(darcs)41 b(annotate)f(--summary)g(--match)h('date)g("last)h ++(week"')291 615 y(darcs)f(annotate)f(--summary)g(--match)h('date)g ++(yesterday')291 715 y(darcs)g(annotate)f(--summary)g(--match)h('date)g ++("today)h(14:00"')291 814 y(darcs)f(annotate)f(--summary)g(--match)h ++('date)g("tea)h(time)g(yesterday"')291 914 y(darcs)f(annotate)f ++(--summary)g(--match)h('date)g("3)i(days)f(before)f(last)h(year)g(at)h ++(17:00"')291 1013 y(darcs)e(changes)g(--from-match)d('date)k("Sat)g ++(Jun)86 b(30)43 b(11:31:30)d(EDT)i(2004"')415 1195 y ++Fx(Notes:)57 b(when)37 b(matc)n(hing)g(on)g(the)h(ISO)f(format,)j(a)d ++(partial)g(date)g(is)g(treated)h(as)e(a)291 1295 y(range.)60 ++b(English)36 b(dates)f(can)h(either)g(refer)f(to)h(a)g(sp)r(eci\014c)g ++(da)n(y)f(\(\\6)h(mon)n(ths)g(ago',\\da)n(y)291 1395 ++y(b)r(efore)25 b(y)n(esterda)n(y"\),)f(or)h(to)h(an)g(in)n(terv)-5 ++b(al)25 b(from)h(some)f(past)h(date)g(\(\\last)f(mon)n(th"\))h(to)g ++(the)291 1494 y(presen)n(t.)50 b(Putting)33 b(this)f(all)h(together,)f ++(if)h(to)r(da)n(y)f(is)g(\\2004-07-24")27 b(then)33 b(the)g(follo)n ++(wing)291 1594 y(matc)n(hes)27 b(should)g(w)n(ork:)p ++415 1611 2706 4 v 413 1710 4 100 v 465 1680 a Fv(date)412 ++b(patc)m(hes)32 b(selected)p 3119 1710 V 415 1714 2706 ++4 v 413 1813 4 100 v 465 1783 a Fx(2004)424 b(from)27 ++b(2004-01-01)c(up)28 b(to)f(and)h(including)g(2004-12-31)p ++3119 1813 V 413 1913 V 465 1883 a(2004-01)312 b(from)27 ++b(2004-01-01)c(up)28 b(to)f(and)h(including)g(2004-01-31)p ++3119 1913 V 413 2013 V 465 1983 a(2004-01-01)200 b(during)27 ++b(2004-01-01)p 3119 2013 V 415 2016 2706 4 v 413 2116 ++4 100 v 465 2086 a(to)r(da)n(y)386 b(during)27 b(2004-07-24)c ++(\(starting)k(midnigh)n(t)h(in)g(y)n(our)e(timezone\))p ++3119 2116 V 413 2215 V 465 2185 a(y)n(esterda)n(y)248 ++b(during)27 b(2004-07-23)p 3119 2215 V 413 2315 V 465 ++2285 a(6)g(mon)n(ths)g(ago)104 b(during)27 b(2004-01-23)p ++3119 2315 V 415 2318 2706 4 v 413 2418 4 100 v 465 2388 + a(last)g(6)g(mon)n(ths)100 b(since)27 b(2004-01-23)p +-3119 1243 V 413 1342 V 465 1312 a(last)g(mon)n(th)202 ++3119 2418 V 413 2517 V 465 2487 a(last)g(mon)n(th)202 + b(since)27 b(2004-06-23)c(\(not)28 b(2004-06-01!\))p +-3119 1342 V 413 1442 V 465 1412 a(last)f(w)n(eek)259 +-b(since)27 b(2004-07-16)p 3119 1442 V 415 1445 2706 4 +-v 415 1512 a(F)-7 b(or)40 b(more)h(precise)f(con)n(trol,)j(y)n(ou)d(ma) ++3119 2517 V 413 2617 V 465 2587 a(last)f(w)n(eek)259 ++b(since)27 b(2004-07-16)p 3119 2617 V 415 2620 2706 4 ++v 415 2692 a(F)-7 b(or)40 b(more)h(precise)f(con)n(trol,)j(y)n(ou)d(ma) + n(y)g(sp)r(ecify)h(an)g(in)n(terv)-5 b(al,)44 b(either)d(in)g(a)f +-(small)291 1612 y(subset)31 b(of)h(English)f(or)f(of)i(the)g(ISO)g ++(small)291 2791 y(subset)31 b(of)h(English)f(or)f(of)i(the)g(ISO)g + (8601)d(format.)49 b(If)32 b(y)n(ou)f(use)g(the)h(ISO)g(format,)g(note) +-291 1712 y(that)k(durations,)h(when)f(sp)r(eci\014ed)h(alone,)g(are)e ++291 2891 y(that)k(durations,)h(when)f(sp)r(eci\014ed)h(alone,)g(are)e + (in)n(terpreted)g(as)h(b)r(eing)g(relativ)n(e)f(to)h(the)291 +-1811 y(curren)n(t)26 b(date)i(and)f(time.)291 1982 y ++2990 y(curren)n(t)26 b(date)i(and)f(time.)291 3178 y + Fr(darcs)41 b(annotate)f(--summary)g(--match)h('date)g("between)g +-(2004-03-12)e(and)k(last)e(week"')291 2082 y(darcs)g(annotate)f +-(--summary)g(--match)h('date)g("after)h(2005"')291 2182 ++(2004-03-12)e(and)k(last)e(week"')291 3277 y(darcs)g(annotate)f ++(--summary)g(--match)h('date)g("after)h(2005"')291 3377 + y(darcs)f(annotate)f(--summary)g(--match)h('date)g("in)i(the)f(last)g +-(3)h(weeks"')291 2281 y(darcs)e(annotate)f(--summary)g(--match)h('date) +-g("P3M/2006-03-17"')291 2381 y(darcs)g(annotate)f(--summary)g(--match)h +-('date)g("2004-01-02/2006-)o(03-)o(17)o("')291 2480 y(darcs)g(annotate) +-f(--summary)g(--match)h('date)g("P2M6D"')415 2650 y Fx(Y)-7 ++(3)h(weeks"')291 3476 y(darcs)e(annotate)f(--summary)g(--match)h('date) ++g("P3M/2006-03-17"')291 3576 y(darcs)g(annotate)f(--summary)g(--match)h ++('date)g("2004-01-02/2006-)o(03-)o(17)o("')291 3676 y(darcs)g(annotate) ++f(--summary)g(--match)h('date)g("P2M6D"')415 3858 y Fx(Y)-7 + b(ou)25 b(ma)n(y)f(also)g(prefer)g(to)g(com)n(bine)h(date)f(matc)n + (hing)h(with)g(a)f(more)g(sp)r(eci\014c)h(pattern.)291 +-2821 y Fr(darcs)41 b(annotate)f(--summary)g(--match)h('date)g("last)h +-(week")f(&&)i(name)f(foo')415 2991 y Fx(The)33 b Fr(--match)d ++4045 y Fr(darcs)41 b(annotate)f(--summary)g(--match)h('date)g("last)h ++(week")f(&&)i(name)f(foo')415 4227 y Fx(The)33 b Fr(--match)d + Fx(pattern)i(can)h(include)g(the)g(logical)e(op)r(erators)g + Fr(&&)p Fx(,)i Fr(||)f Fx(and)h Fr(not)p Fx(,)g(as)291 +-3091 y(w)n(ell)27 b(as)g(grouping)f(of)i(patterns)f(with)h(paren)n +-(theses.)35 b(F)-7 b(or)27 b(example)291 3262 y Fr(darcs)41 ++4326 y(w)n(ell)27 b(as)g(grouping)f(of)i(patterns)f(with)h(paren)n ++(theses.)35 b(F)-7 b(or)27 b(example)291 4514 y Fr(darcs)41 + b(annotate)f(--summary)g(--match)h('name)g(record)h(&&)g(not)h(name)f +-(overrode')p 527 3450 2392 4 v 527 3524 a(--ignore-times)p +-527 3579 V 291 3767 a Fx(Darcs)20 b(optimizes)g(its)h(op)r(erations)f +-(b)n(y)h(k)n(eeping)f(trac)n(k)f(of)i(the)h(mo)r(di\014cation)e(times)h +-(of)g(y)n(our)291 3867 y(\014les.)65 b(This)37 b(dramatically)e(sp)r +-(eeds)i(up)g(commands)g(suc)n(h)f(as)h Fr(whatsnew)c +-Fx(and)k Fr(record)291 3966 y Fx(whic)n(h)27 b(w)n(ould)g(otherwise)f +-(require)g(reading)h(ev)n(ery)f(\014le)h(in)h(the)g(rep)r(ository)d +-(and)i(compar-)291 4066 y(ing)k(it)i(with)f(a)g(reference)f(v)n +-(ersion.)48 b(Ho)n(w)n(ev)n(er,)31 b(there)h(are)f(times)h(when)g(this) +-g(can)g(cause)291 4166 y(problems,)h(suc)n(h)f(as)g(when)g(running)h(a) +-f(series)f(of)i(darcs)e(commands)h(from)g(a)g(script,)i(in)291 +-4265 y(whic)n(h)h(case)g(often)h(a)f(\014le)h(will)f(b)r(e)h(mo)r +-(di\014ed)g(t)n(wice)g(in)g(the)g(same)f(second,)i(whic)n(h)e(can)291 +-4365 y(lead)27 b(to)g(the)h(second)f(mo)r(di\014cation)g(going)f +-(unnoticed.)37 b(The)28 b(solution)f(to)g(suc)n(h)g(predica-)291 +-4465 y(men)n(ts)e(is)h(the)g Fr(--ignore-times)20 b Fx(option,)25 +-b(whic)n(h)h(instructs)f(darcs)g(not)h(to)f(trust)h(the)g(\014le)291 +-4564 y(mo)r(di\014cation)h(times,)h(but)g(instead)g(to)f(c)n(hec)n(k)g +-(eac)n(h)f(\014le's)i(con)n(ten)n(ts)f(explicitly)-7 +-b(.)p 527 4752 V 527 4827 a Fr(--author)p 527 4863 V +-291 4921 1146 4 v 383 4975 a Fp(3)418 4998 y Fo +-(http://www.w3.org/TR/NOTE)q(-da)q(teti)q(me)p eop end ++(overrode')p 527 4717 2392 4 v 527 4792 a(--ignore-times)p ++527 4847 V 291 4921 1146 4 v 383 4975 a Fp(3)418 4998 ++y Fo(http://www.w3.org/TR/NOTE)q(-da)q(teti)q(me)p eop ++end + %%Page: 54 54 + TeXDict begin 54 53 bop 739 282 a Fx(54)1378 b Fu(CHAPTER)27 +-b(6.)64 b(D)n(AR)n(CS)28 b(COMMANDS)739 515 y Fx(Sev)n(eral)c(commands) +-h(need)h(to)g(b)r(e)g(able)f(to)h(iden)n(tify)g(y)n(ou.)35 +-b(Con)n(v)n(en)n(tionally)-7 b(,)25 b(y)n(ou)f(pro)n(vide)739 +-615 y(an)18 b(email)g(address)f(for)h(this)h(purp)r(ose,)g(whic)n(h)g +-(can)f(include)h(commen)n(ts,)g(e.g.)f Fr(David)42 b(Roundy)f +-()p Fx(.)739 715 +-y(The)18 b(easiest)g(w)n(a)n(y)f(to)h(do)g(this)h(is)f(to)h(de\014ne)f +-(an)g(en)n(vironmen)n(t)g(v)-5 b(ariable)17 b Fr(EMAIL)f +-Fx(or)i Fr(DARCS_EMAIL)739 814 y Fx(\(with)36 b(the)g(latter)f(o)n(v)n +-(erriding)e(the)j(former\).)60 b(Y)-7 b(ou)35 b(can)g(also)g(o)n(v)n +-(erride)e(this)j(using)f(the)739 914 y Fr(--author)20 +-b Fx(\015ag)i(to)i(an)n(y)e(command.)35 b(Alternativ)n(ely)-7 +-b(,)24 b(y)n(ou)e(could)h(set)g(y)n(our)f(email)h(address)739 +-1013 y(on)f(a)f(p)r(er-rep)r(ository)f(basis)i(using)g(the)g +-(\\defaults")f(mec)n(hanism)h(for)g(\\ALL")f(commands,)739 +-1113 y(as)d(describ)r(ed)g(in)h(App)r(endix)h(B.)34 b(Or,)19 ++b(6.)64 b(D)n(AR)n(CS)28 b(COMMANDS)739 515 y Fx(Darcs)20 ++b(optimizes)h(its)g(op)r(erations)e(b)n(y)i(k)n(eeping)f(trac)n(k)g(of) ++h(the)g(mo)r(di\014cation)g(times)g(of)f(y)n(our)739 ++615 y(\014les.)65 b(This)37 b(dramatically)e(sp)r(eeds)i(up)h(commands) ++e(suc)n(h)h(as)f Fr(whatsnew)e Fx(and)j Fr(record)739 ++715 y Fx(whic)n(h)27 b(w)n(ould)g(otherwise)g(require)f(reading)g(ev)n ++(ery)g(\014le)h(in)h(the)g(rep)r(ository)e(and)h(compar-)739 ++814 y(ing)32 b(it)g(with)g(a)g(reference)f(v)n(ersion.)48 ++b(Ho)n(w)n(ev)n(er,)31 b(there)h(are)f(times)h(when)g(this)g(can)g ++(cause)739 914 y(problems,)h(suc)n(h)f(as)g(when)h(running)f(a)g ++(series)f(of)i(darcs)e(commands)h(from)g(a)g(script,)i(in)739 ++1013 y(whic)n(h)h(case)g(often)h(a)f(\014le)h(will)g(b)r(e)g(mo)r ++(di\014ed)g(t)n(wice)f(in)h(the)g(same)f(second,)i(whic)n(h)f(can)739 ++1113 y(lead)27 b(to)g(the)h(second)f(mo)r(di\014cation)g(going)f ++(unnoticed.)37 b(The)28 b(solution)f(to)g(suc)n(h)g(predica-)739 ++1213 y(men)n(ts)f(is)f(the)h Fr(--ignore-times)20 b Fx(option,)26 ++b(whic)n(h)f(instructs)h(darcs)e(not)i(to)f(trust)h(the)g(\014le)739 ++1312 y(mo)r(di\014cation)h(times,)h(but)g(instead)g(to)f(c)n(hec)n(k)g ++(eac)n(h)g(\014le's)g(con)n(ten)n(ts)g(explicitly)-7 ++b(.)p 975 1511 2392 4 v 975 1586 a Fr(--author)p 975 ++1622 V 739 1821 a Fx(Sev)n(eral)24 b(commands)h(need)h(to)g(b)r(e)g ++(able)f(to)h(iden)n(tify)g(y)n(ou.)35 b(Con)n(v)n(en)n(tionally)-7 ++b(,)25 b(y)n(ou)f(pro)n(vide)739 1920 y(an)18 b(email)g(address)f(for)h ++(this)h(purp)r(ose,)g(whic)n(h)g(can)f(include)h(commen)n(ts,)g(e.g.)f ++Fr(David)42 b(Roundy)f()p ++Fx(.)739 2020 y(The)18 b(easiest)g(w)n(a)n(y)f(to)h(do)g(this)h(is)f ++(to)h(de\014ne)f(an)g(en)n(vironmen)n(t)g(v)-5 b(ariable)17 ++b Fr(EMAIL)f Fx(or)i Fr(DARCS_EMAIL)739 2119 y Fx(\(with)36 ++b(the)g(latter)f(o)n(v)n(erriding)e(the)j(former\).)60 ++b(Y)-7 b(ou)35 b(can)g(also)g(o)n(v)n(erride)e(this)j(using)f(the)739 ++2219 y Fr(--author)20 b Fx(\015ag)i(to)i(an)n(y)e(command.)35 ++b(Alternativ)n(ely)-7 b(,)24 b(y)n(ou)e(could)h(set)g(y)n(our)f(email)h ++(address)739 2319 y(on)f(a)f(p)r(er-rep)r(ository)f(basis)i(using)g ++(the)g(\\defaults")f(mec)n(hanism)h(for)g(\\ALL")f(commands,)739 ++2418 y(as)d(describ)r(ed)g(in)h(App)r(endix)h(B.)34 b(Or,)19 + b(y)n(ou)f(could)h(sp)r(ecify)g(the)g(author)f(on)g(a)g(p)r(er-rep)r +-(ository)739 1213 y(basis)27 b(using)g(the)h Fr(_darcs/prefs/aut)o(hor) ++(ository)739 2518 y(basis)27 b(using)g(the)h Fr(_darcs/prefs/aut)o(hor) + 21 b Fx(\014le)28 b(as)e(describ)r(ed)i(in)g(section)f(4.1.)863 +-1312 y(Also,)37 b(a)d(global)f(author)h(\014le)h(can)f(b)r(e)h(created) +-f(in)h(y)n(our)e(home)h(directory)g(with)h(the)739 1412 ++2621 y(Also,)37 b(a)d(global)f(author)h(\014le)h(can)f(b)r(e)h(created) ++f(in)h(y)n(our)e(home)h(directory)g(with)h(the)739 2721 + y(name)27 b Fr(.darcs/author)p Fx(.)k(This)c(\014le)g(o)n(v)n(errides)d + (the)k(con)n(ten)n(ts)e(of)h(the)g(en)n(vironmen)n(t)f(v)-5 +-b(ari-)739 1512 y(ables,)27 b(but)h(a)f(rep)r(ository-sp)r(eci\014c)f ++b(ari-)739 2821 y(ables,)27 b(but)h(a)f(rep)r(ository-sp)r(eci\014c)f + (author)h(\014le)h(o)n(v)n(errides)d(the)j(global)e(author)h(\014le.)p +-975 1692 2392 4 v 975 1766 a Fr(--dont-compress,)37 b(--compress)p +-975 1821 V 739 2001 a Fx(By)26 b(default,)g(darcs)f(commands)h(that)g ++975 3019 V 975 3094 a Fr(--dont-compress,)37 b(--compress)p ++975 3149 V 739 3347 a Fx(By)26 b(default,)g(darcs)f(commands)h(that)g + (write)g(patc)n(hes)f(to)h(disk)g(will)g(compress)f(the)i(patc)n(h)739 +-2101 y(\014les.)35 b(If)22 b(y)n(ou)e(don't)i(w)n(an)n(t)f(this,)i(y)n ++3447 y(\014les.)35 b(If)22 b(y)n(ou)e(don't)i(w)n(an)n(t)f(this,)i(y)n + (ou)d(can)h(c)n(ho)r(ose)g(the)h Fr(--dont-compress)15 +-b Fx(option,)22 b(whic)n(h)739 2200 y(causes)k(darcs)h(not)h(to)f +-(compress)f(the)i(patc)n(h)g(\014le.)p 975 2380 V 975 +-2455 a Fr(--dry-run)p 975 2510 V 739 2690 a Fx(The)c ++b Fx(option,)22 b(whic)n(h)739 3547 y(causes)k(darcs)h(not)h(to)f ++(compress)f(the)i(patc)n(h)g(\014le.)p 975 3745 V 975 ++3820 a Fr(--dry-run)p 975 3875 V 739 4073 a Fx(The)c + Fr(--dry-run)c Fx(option)j(will)h(cause)e(darcs)h(not)h(to)f(actually)g +-(tak)n(e)g(the)h(sp)r(eci\014ed)g(action,)739 2790 y(but)c(only)e(prin) ++(tak)n(e)g(the)h(sp)r(eci\014ed)g(action,)739 4173 y(but)c(only)e(prin) + n(t)h(what)g(w)n(ould)g(ha)n(v)n(e)e(happ)r(ened.)35 + b(Not)19 b(all)g(commands)f(accept)h Fr(--dry-run)p Fx(,)739 +-2889 y(but)28 b(those)f(that)h(do)g(should)f(accept)g(the)h +-Fr(--summary)c Fx(option.)p 975 3069 V 975 3144 a Fr(--summary,)40 +-b(--no-summary)p 975 3199 V 739 3379 a Fx(The)30 b Fr(--summary)c ++4273 y(but)28 b(those)f(that)h(do)g(should)f(accept)g(the)h ++Fr(--summary)c Fx(option.)p 975 4471 V 975 4546 a Fr(--summary,)40 ++b(--no-summary)p 975 4601 V 739 4799 a Fx(The)30 b Fr(--summary)c + Fx(option)k(sho)n(ws)e(a)i(summary)f(of)h(the)g(patc)n(hes)f(that)i(w)n +-(ould)e(ha)n(v)n(e)g(b)r(een)739 3478 y(pulled/pushed/whatev)n(er.)j ++(ould)e(ha)n(v)n(e)g(b)r(een)739 4899 y(pulled/pushed/whatev)n(er.)j + (The)18 b(format)g(is)h(similar)e(to)h(the)h(output)g(format)f(of)g +-Fr(cvs)43 b(update)739 3578 y Fx(and)27 b(lo)r(oks)g(lik)n(e)g(this:) +-739 3758 y Fr(A)87 b(./added_but_not)o(_re)o(co)o(rde)o(d.)o(c)739 +-3858 y(A!)43 b(./added_but_not)o(_re)o(co)o(rde)o(d_)o(co)o(nfl)o(ic)o +-(ts.)o(c)739 3957 y(a)87 b(./would_be_adde)o(d_i)o(f_)o(loo)o(k_)o(fo)o +-(r_a)o(dd)o(s_o)o(pt)o(ion)o(_w)o(as)o(_us)o(ed)o(.h)739 +-4157 y(M)g(./modified.t)38 b(-1)43 b(+1)739 4256 y(M!)g +-(./modified_conf)o(lic)o(ts)o(.t)37 b(-1)43 b(+1)739 +-4455 y(R)87 b(./removed_but_n)o(ot_)o(re)o(cor)o(de)o(d.)o(c)739 +-4555 y(R!)43 b(./removed_but_n)o(ot_)o(re)o(cor)o(de)o(d_)o(con)o(fl)o +-(ict)o(s.)o(c)863 4835 y Fx(Y)-7 b(ou)28 b(can)f(probably)g(guess)f +-(what)i(the)g(\015ags)f(mean)g(from)g(the)h(clev)n(er)f(\014le)g +-(names.)780 4998 y Fr(A)h Fx(is)f(for)g(\014les)h(that)g(ha)n(v)n(e)e +-(b)r(een)i(added)f(but)i(not)e(recorded)f(y)n(et.)p eop +-end ++Fr(cvs)43 b(update)739 4998 y Fx(and)27 b(lo)r(oks)g(lik)n(e)g(this:)p ++eop end + %%Page: 55 55 + TeXDict begin 55 54 bop 291 282 a Fu(6.1.)63 b(COMMON)28 +-b(OPTIONS)e(TO)h(D)n(AR)n(CS)h(COMMANDS)767 b Fx(55)332 +-515 y Fr(a)30 b Fx(is)f(for)h(\014les)f(found)h(using)g(the)g ++b(OPTIONS)e(TO)h(D)n(AR)n(CS)h(COMMANDS)767 b Fx(55)291 ++515 y Fr(A)86 b(./added_but_not_r)o(ec)o(ord)o(ed)o(.c)291 ++615 y(A!)42 b(./added_but_not_r)o(ec)o(ord)o(ed)o(_co)o(nf)o(lic)o(ts)o ++(.c)291 715 y(a)86 b(./would_be_added_)o(if)o(_lo)o(ok)o(_fo)o(r_)o ++(add)o(s_)o(op)o(tio)o(n_)o(was)o(_u)o(se)o(d.h)291 914 ++y(M)g(./modified.t)39 b(-1)k(+1)291 1013 y(M!)f(./modified_confli)o(ct) ++o(s.t)37 b(-1)43 b(+1)291 1213 y(R)86 b(./removed_but_not)o(_r)o(eco)o ++(rd)o(ed.)o(c)291 1312 y(R!)42 b(./removed_but_not)o(_r)o(eco)o(rd)o ++(ed_)o(co)o(nfl)o(ic)o(ts)o(.c)415 1588 y Fx(Y)-7 b(ou)28 ++b(can)f(probably)f(guess)h(what)h(the)g(\015ags)e(mean)i(from)f(the)h ++(clev)n(er)e(\014le)i(names.)332 1749 y Fr(A)f Fx(is)h(for)f(\014les)g ++(that)h(ha)n(v)n(e)f(b)r(een)h(added)f(but)h(not)g(recorded)e(y)n(et.) ++332 1913 y Fr(a)k Fx(is)f(for)h(\014les)f(found)h(using)g(the)g + Fr(--look-for-adds)24 b Fx(option)29 b(a)n(v)-5 b(ailable)29 +-b(for)g Fr(whatsnew)498 615 y Fx(and)k Fr(record)p Fx(.)51 ++b(for)g Fr(whatsnew)498 2012 y Fx(and)k Fr(record)p Fx(.)51 + b(They)33 b(ha)n(v)n(e)f(not)h(b)r(een)g(added)g(y)n(et,)h(but)g(w)n +-(ould)e(b)r(e)i(added)f(auto-)498 715 y(matically)24 ++(ould)e(b)r(e)i(added)f(auto-)498 2112 y(matically)24 + b(if)i Fr(--look-for-adds)18 b Fx(w)n(ere)24 b(used)h(with)g(the)g +-(next)g Fr(record)d Fx(command.)332 880 y Fr(M)i Fx(is)g(for)g(\014les) +-g(that)g(ha)n(v)n(e)f(b)r(een)i(mo)r(di\014ed)f(in)h(the)f(w)n(orking)f +-(directory)f(but)j(not)f(recorded)498 979 y(y)n(et.)37 ++(next)g Fr(record)d Fx(command.)332 2275 y Fr(M)i Fx(is)g(for)g ++(\014les)g(that)g(ha)n(v)n(e)f(b)r(een)i(mo)r(di\014ed)f(in)h(the)f(w)n ++(orking)f(directory)f(but)j(not)f(recorded)498 2375 y(y)n(et.)37 + b(The)27 b(n)n(um)n(b)r(er)h(of)f(added)h(and)f(subtracted)g(lines)h +-(is)f(also)g(sho)n(wn.)332 1145 y Fr(R)g Fx(is)h(for)f(\014les)g(that)h ++(is)f(also)g(sho)n(wn.)332 2538 y Fr(R)g Fx(is)h(for)f(\014les)g(that)h + (ha)n(v)n(e)f(b)r(een)h(remo)n(v)n(ed,)e(but)i(the)g(remo)n(v)-5 +-b(al)26 b(is)i(not)f(recorded)f(y)n(et.)291 1309 y(An)i(exclamation)e ++b(al)26 b(is)i(not)f(recorded)f(y)n(et.)291 2699 y(An)i(exclamation)e + (mark)h(app)r(ears)f(next)i(to)g(an)n(y)e(option)i(that)g(has)f(a)g +-(con\015ict.)291 1525 y Fv(Resolution)f(of)i(con\015icts)83 ++(con\015ict.)291 2914 y Fv(Resolution)f(of)i(con\015icts)83 + b Fx(T)-7 b(o)24 b(resolv)n(e)f(con\015icts)i(using)f(an)g(external)g +-(to)r(ol,)h(y)n(ou)f(need)291 1624 y(to)j(sp)r(ecify)h(a)f(command)g +-(to)h(use,)f(e.g.)291 1789 y Fr(--external-merg)o(e)38 ++(to)r(ol,)h(y)n(ou)f(need)291 3014 y(to)j(sp)r(ecify)h(a)f(command)g ++(to)h(use,)f(e.g.)291 3175 y Fr(--external-merg)o(e)38 + b('opendiff)h(\0451)k(\0452)g(-ancestor)d(\045a)j(-merge)e(\045o')291 +-1954 y Fx(The)28 b Fr(\0451)f Fx(and)h Fr(\0452)f Fx(are)g(replaced)g ++3336 y Fx(The)28 b Fr(\0451)f Fx(and)h Fr(\0452)f Fx(are)g(replaced)g + (with)h(the)h(t)n(w)n(o)e(v)n(ersions)f(to)i(b)r(e)g(merged,)g +-Fr(\045a)f Fx(is)h(replaced)291 2053 y(with)23 b(the)g(common)f ++Fr(\045a)f Fx(is)h(replaced)291 3435 y(with)23 b(the)g(common)f + (ancestor)g(of)g(the)i(t)n(w)n(o)e(v)n(ersions.)33 b(Most)23 + b(imp)r(ortan)n(tly)-7 b(,)23 b Fr(\045o)f Fx(is)h(replaced)291 +-2153 y(with)32 b(the)g(name)g(of)g(the)g(output)h(\014le)f(that)g ++3535 y(with)32 b(the)g(name)g(of)g(the)g(output)h(\014le)f(that)g + (darcs)f(will)h(require)f(to)h(b)r(e)g(created)f(holding)291 +-2252 y(the)23 b(merged)f(v)n(ersion.)34 b(The)23 b(ab)r(o)n(v)n(e)e ++3634 y(the)23 b(merged)f(v)n(ersion.)34 b(The)23 b(ab)r(o)n(v)n(e)e + (example)h(w)n(orks)g(with)h(the)g(FileMerge.app)f(to)r(ol)h(that)291 +-2352 y(comes)j(with)j(Apple's)f(dev)n(elop)r(er)e(to)r(ols.)36 ++3734 y(comes)j(with)j(Apple's)f(dev)n(elop)r(er)e(to)r(ols.)36 + b(T)-7 b(o)28 b(use)f(xxdi\013,)h(y)n(ou)f(w)n(ould)g(use)291 +-2517 y Fr(--external-merg)o(e)38 b('xxdiff)i(-m)j(-O)g(-M)g(\045o)f +-(\0451)h(\045a)g(\0452')291 2681 y Fx(T)-7 b(o)27 b(use)g +-Fr(kdiff3)p Fx(,)f(y)n(ou)g(can)i(use)291 2846 y Fr(--external-merg)o ++3895 y Fr(--external-merg)o(e)38 b('xxdiff)i(-m)j(-O)g(-M)g(\045o)f ++(\0451)h(\045a)g(\0452')291 4056 y Fx(T)-7 b(o)27 b(use)g ++Fr(kdiff3)p Fx(,)f(y)n(ou)g(can)i(use)291 4217 y Fr(--external-merg)o + (e)38 b('kdiff3)i(--output)h(\045o)h(\045a)h(\0451)g(\0452')291 +-3010 y Fx(T)-7 b(o)27 b(use)g Fr(tortoiseMerge)p Fx(,)c(y)n(ou)j(can)i +-(use)291 3175 y Fr(--external-merg)o(e)38 b('tortoiseMerge)f ++4378 y Fx(T)-7 b(o)27 b(use)g Fr(tortoiseMerge)p Fx(,)c(y)n(ou)j(can)i ++(use)291 4539 y Fr(--external-merg)o(e)38 b('tortoiseMerge)f + (/base:"\045a")j(/mine:"\0451")f(/theirs:"\0452")g(/merged:"\045o"')291 +-3340 y Fx(\()p Fr(tortoiseMerge)25 b Fx(is)k(a)h(nice)g(merge)f(to)r ++4700 y Fx(\()p Fr(tortoiseMerge)25 b Fx(is)k(a)h(nice)g(merge)f(to)r + (ol)h(that)g(comes)f(with)i(T)-7 b(ortoiseSVN)29 b(and)h(w)n(orks)291 +-3439 y(w)n(ell)d(on)g(Windo)n(ws.\))415 3539 y(Note)e(that)g(the)g ++4799 y(w)n(ell)d(on)g(Windo)n(ws.\))415 4899 y(Note)e(that)g(the)g + (command)g(is)f(split)i(in)n(to)e(space-separated)e(w)n(ords)i(and)h +-(the)g(\014rst)f(one)291 3638 y(is)h Fr(exec)p Fx(ed)f(with)i(the)g ++(the)g(\014rst)f(one)291 4998 y(is)h Fr(exec)p Fx(ed)f(with)i(the)g + (rest)f(as)g(argumen)n(ts|it)f(is)i(not)f(a)g(shell)h(command.)35 +-b(In)26 b(particular,)291 3738 y(on)f(Windo)n(ws)g(this)h(means)f(that) +-h(the)g(\014rst)f(command)g(path)h(should)f(not)h(con)n(tain)f(spaces) +-291 3838 y(and)i(y)n(ou)g(should)g(mak)n(e)g(sure)g(the)h(command)f(is) +-h(in)f(y)n(our)g Fr(PATH)p Fx(.)415 3937 y(The)d(substitution)g(of)g +-(the)g Fr(\045)g Fx(escap)r(es)f(is)h(done)f(ev)n(erywhere.)34 +-b(If)24 b(y)n(ou)f(need)h(to)g(prev)n(en)n(t)291 4037 +-y(substitution)29 b(y)n(ou)g(can)g(use)g(a)f(double)h(p)r(ercen)n(tage) +-f(sign,)i(i.e.)41 b Fr(\045\045a)28 b Fx(is)h(substituted)h(with)291 +-4137 y Fr(\045a)p Fx(.)36 b(Here)27 b(is)g(an)h(example)f(script)g(to)h +-(use)f(the)h(Emacs')f(Edi\013)h(pac)n(k)-5 b(age)26 b(for)h(merging.) +-334 4301 y Fr(#!)43 b(/bin/sh)334 4401 y(#)g(External)e(merge)g +-(command)g(for)h(darcs,)f(using)h(Emacs)f(Ediff,)g(via)i(server)e(if)i +-(possible.)334 4500 y(#)g(It)g(needs)f(args)g(\0451)g(\0452)h(\045a)g +-(\045o,)f(i.e.)g(the)g(external)f(merge)g(command)g(is,)h(say,)334 +-4600 y(#)h(`emerge3)e(\0451)h(\0452)h(\045a)g(\045o'.)334 +-4700 y(test)f($#)h(-eq)f(4)h(||)g(exit)f(1)334 4799 y +-(form="\(ediff-merg)o(e-)o(fi)o(les)o(-w)o(ith)o(-a)o(nce)o(st)o(or)o +-(")334 4899 y(while)g(test)g($#)g(-gt)h(0;)f(do)509 4998 +-y(count=$count.)p eop end ++b(In)26 b(particular,)p eop end + %%Page: 56 56 + TeXDict begin 56 55 bop 739 282 a Fx(56)1378 b Fu(CHAPTER)27 +-b(6.)64 b(D)n(AR)n(CS)28 b(COMMANDS)957 515 y Fr(if)43 +-b([)g($count)e(=)i(....)f(];)h(then)1131 615 y(form=$form\\)c(nil)391 +-b(#)43 b(Lisp)f(STARTUP-HOOKS)d(arg)957 715 y(fi)957 +-814 y(case)j($1)h(in)783 b(#)43 b(Worry)f(about)f(quoting)g(--)i +-(escape)e(")i(and)g(\\)1131 914 y(*[\\"\\\\]*)d(\))k(form=$form\\)39 +-b(\\"$\(echo)h($1)j(|)g(sed)f(-e's/["\\\\]/\\\\\\0/g)o('\))o(\\")37 +-b(;;)1131 1013 y(*\))43 b(form=$form\\)c(\\"$1\\")i(;;)957 +-1113 y(esac)957 1213 y(shift)782 1312 y(done)782 1412 +-y(form=$form'\)')782 1512 y(\()j(emacsclient)39 b(--eval)i("$form")f +-(||)j(#)g(Emacs)f(22)h(server)870 1611 y(gnudoit)d("$form")h(||)522 +-b(#)43 b(XEmacs/Emacs)c(21)k(server)870 1711 y(emacs)e(--eval)g +-("$form")g(||)304 b(#)43 b(Relatively)d(slow)i(to)h(start)e(up)870 +-1810 y(xemacs)g(-eval)g("$form")433 b(#)43 b(Horribly)e(slow)h(to)g +-(start)g(up)782 1910 y(\))i(2>/dev/null)739 2082 y Fx(It)28 +-b(w)n(ould)f(b)r(e)h(in)n(v)n(ok)n(ed)e(lik)n(e:)739 +-2255 y Fr(--external-merge)37 b('emerge3)j(\0451)j(\0452)g(\045a)f +-(\045o')863 2427 y Fx(If)34 b(y)n(ou)f(\014gure)g(out)h(ho)n(w)f(to)g ++b(6.)64 b(D)n(AR)n(CS)28 b(COMMANDS)739 515 y Fx(on)d(Windo)n(ws)g ++(this)h(means)f(that)h(the)g(\014rst)g(command)f(path)g(should)h(not)f ++(con)n(tain)g(spaces)739 615 y(and)i(y)n(ou)g(should)h(mak)n(e)e(sure)h ++(the)h(command)f(is)h(in)g(y)n(our)e Fr(PATH)p Fx(.)863 ++715 y(The)e(substitution)h(of)e(the)i Fr(\045)e Fx(escap)r(es)g(is)h ++(done)f(ev)n(erywhere.)34 b(If)24 b(y)n(ou)f(need)h(to)g(prev)n(en)n(t) ++739 814 y(substitution)30 b(y)n(ou)e(can)h(use)g(a)g(double)g(p)r ++(ercen)n(tage)f(sign,)h(i.e.)42 b Fr(\045\045a)28 b Fx(is)h ++(substituted)h(with)739 914 y Fr(\045a)p Fx(.)36 b(Here)27 ++b(is)h(an)f(example)g(script)h(to)f(use)g(the)h(Emacs')f(Edi\013)h(pac) ++n(k)-5 b(age)26 b(for)h(merging.)782 1064 y Fr(#!)43 ++b(/bin/sh)782 1164 y(#)h(External)c(merge)h(command)g(for)h(darcs,)g ++(using)f(Emacs)h(Ediff,)f(via)h(server)f(if)i(possible.)782 ++1263 y(#)h(It)e(needs)g(args)g(\0451)h(\0452)f(\045a)h(\045o,)f(i.e.)g ++(the)h(external)d(merge)i(command)e(is,)j(say,)782 1363 ++y(#)h(`emerge3)c(\0451)j(\0452)f(\045a)h(\045o'.)782 ++1463 y(test)f($#)h(-eq)g(4)g(||)f(exit)g(1)782 1562 y ++(form="\(ediff-merg)o(e-f)o(il)o(es-)o(wi)o(th)o(-an)o(ce)o(sto)o(r") ++782 1662 y(while)g(test)g($#)h(-gt)f(0;)h(do)957 1761 ++y(count=$count.)957 1861 y(if)g([)g($count)e(=)i(....)f(];)h(then)1131 ++1961 y(form=$form\\)c(nil)391 b(#)43 b(Lisp)f(STARTUP-HOOKS)d(arg)957 ++2060 y(fi)957 2160 y(case)j($1)h(in)783 b(#)43 b(Worry)f(about)f ++(quoting)g(--)i(escape)e(")i(and)g(\\)1131 2260 y(*[\\"\\\\]*)d(\))k ++(form=$form\\)39 b(\\"$\(echo)h($1)j(|)g(sed)f(-e's/["\\\\]/\\\\\\0/g)o ++('\))o(\\")37 b(;;)1131 2359 y(*\))43 b(form=$form\\)c(\\"$1\\")i(;;) ++957 2459 y(esac)957 2558 y(shift)782 2658 y(done)782 ++2758 y(form=$form'\)')782 2857 y(\()j(emacsclient)39 ++b(--eval)i("$form")f(||)j(#)g(Emacs)f(22)h(server)870 ++2957 y(gnudoit)d("$form")h(||)522 b(#)43 b(XEmacs/Emacs)c(21)k(server) ++870 3057 y(emacs)e(--eval)g("$form")g(||)304 b(#)43 b(Relatively)d ++(slow)i(to)h(start)e(up)870 3156 y(xemacs)g(-eval)g("$form")433 ++b(#)43 b(Horribly)e(slow)h(to)g(start)g(up)782 3256 y(\))i(2>/dev/null) ++739 3406 y Fx(It)28 b(w)n(ould)f(b)r(e)h(in)n(v)n(ok)n(ed)e(lik)n(e:) ++739 3556 y Fr(--external-merge)37 b('emerge3)j(\0451)j(\0452)g(\045a)f ++(\045o')863 3706 y Fx(If)34 b(y)n(ou)f(\014gure)g(out)h(ho)n(w)f(to)g + (use)h(darcs)e(with)i(another)f(merge)f(to)r(ol,)j(please)e(let)h(me) +-739 2526 y(kno)n(w)27 b(what)g(\015ags)g(y)n(ou)g(used)g(so)g(I)h(can)f +-(men)n(tion)h(it)g(here.)863 2628 y(Note)34 b(that)g(if)g(y)n(ou)e(do)i ++739 3806 y(kno)n(w)27 b(what)g(\015ags)g(y)n(ou)g(used)g(so)g(I)h(can)f ++(men)n(tion)h(it)g(here.)863 3906 y(Note)34 b(that)g(if)g(y)n(ou)e(do)i + (use)f(an)g(external)g(merge)f(to)r(ol,)j(most)e(lik)n(ely)g(y)n(ou)g +-(will)h(w)n(an)n(t)739 2728 y(to)c(add)f(to)h(y)n(our)e(defaults)j ++(will)h(w)n(an)n(t)739 4005 y(to)c(add)f(to)h(y)n(our)e(defaults)j + (\014le)e(\()p Fr(_darcs/prefs/defau)o(lt)o(s)24 b Fx(or)29 +-b Fr(~/.darcs/prefs)p Fx(,)c(see)739 2827 y(4.1\))i(a)g(line)h(suc)n(h) +-f(as)739 3001 y Fr(ALL)42 b(external-merge)c(kdiff3)j(--output)f(\045o) +-j(\045a)g(\0451)g(\0452)739 3172 y Fx(or)739 3346 y Fr(ALL)f ++b Fr(~/.darcs/prefs)p Fx(,)c(see)739 4105 y(4.1\))i(a)g(line)h(suc)n(h) ++f(as)739 4255 y Fr(ALL)42 b(external-merge)c(kdiff3)j(--output)f(\045o) ++j(\045a)g(\0451)g(\0452)739 4405 y Fx(or)739 4556 y Fr(ALL)f + (external-merge)c(tortoiseMerge)g(/base:"\045a")i(/mine:"\0451")f +-(/theirs:"\0452")g(/merged:"\045o")863 3517 y Fx(Note)28 ++(/theirs:"\0452")g(/merged:"\045o")863 4706 y Fx(Note)28 + b(that)g(the)g(defaults)g(\014le)f(do)r(es)h(not)f(w)n(an)n(t)g(quotes) +-g(around)g(the)h(command.)p 975 3708 2392 4 v 975 3782 ++g(around)g(the)h(command.)p 975 4869 2392 4 v 975 4944 + a Fr(--posthook=COMMA)o(ND,)37 b(--no-posthook)p 975 +-3837 V 739 4027 a Fx(T)-7 b(o)34 b(pro)n(vide)g(a)g(command)h(that)g +-(should)f(b)r(e)h(run)g(whenev)n(er)f(a)g(darcs)g(command)g(com-)739 +-4127 y(pletes)29 b(successfully)-7 b(,)29 b(use)g Fr(--posthook)d +-Fx(to)j(sp)r(ecify)g(the)h(command.)41 b(This)29 b(is)g(useful)h(for) +-739 4227 y(p)r(eople)h(who)h(w)n(an)n(t)e(to)i(ha)n(v)n(e)e(a)h +-(command)g(run)h(whenev)n(er)e(a)h(patc)n(h)g(is)h(applied.)48 +-b(Using)739 4326 y Fr(--no-posthook)22 b Fx(will)28 b(disable)f +-(running)g(the)h(command.)p 975 4498 V 975 4573 a Fr(--prompt-posthoo)o +-(k,)37 b(--run-posthook)p 975 4628 V 739 4799 a Fx(These)18 +-b(options)g(con)n(trol)f(prompting)h(b)r(efore)g(running)g(the)h(p)r +-(ostho)r(ok.)33 b(Use)18 b Fr(--prompt-posthoo)o(k)739 +-4899 y Fx(to)j(force)f(prompting)h(b)r(efore)g(running)g(the)g(p)r +-(ostho)r(ok)g(command.)34 b(F)-7 b(or)21 b(securit)n(y)f(reasons,)739 +-4998 y(this)33 b(is)g(the)g(default.)53 b(When)34 b(de\014ning)e(a)h(p) +-r(ostho)r(ok)f(for)g(apply)-7 b(,)34 b(y)n(ou)f(will)g(need)g(to)f(use) +-p eop end ++4998 V eop end + %%Page: 57 57 + TeXDict begin 57 56 bop 291 282 a Fu(6.1.)63 b(COMMON)28 + b(OPTIONS)e(TO)h(D)n(AR)n(CS)h(COMMANDS)767 b Fx(57)291 +-515 y Fr(--run-posthook)30 b Fx(or)36 b(else)g(y)n(ou)f(will)i(get)f ++515 y(T)-7 b(o)34 b(pro)n(vide)g(a)g(command)g(that)h(should)g(b)r(e)g ++(run)f(whenev)n(er)g(a)h(darcs)e(command)i(com-)291 615 ++y(pletes)29 b(successfully)-7 b(,)29 b(use)g Fr(--posthook)c ++Fx(to)k(sp)r(ecify)h(the)f(command.)42 b(This)29 b(is)g(useful)g(for) ++291 715 y(p)r(eople)i(who)g(w)n(an)n(t)g(to)g(ha)n(v)n(e)g(a)g(command) ++g(run)g(whenev)n(er)g(a)g(patc)n(h)g(is)h(applied.)48 ++b(Using)291 814 y Fr(--no-posthook)22 b Fx(will)28 b(disable)f(running) ++g(the)h(command.)p 527 979 2392 4 v 527 1053 a Fr(--prompt-posthoo)o ++(k,)37 b(--run-posthook)p 527 1108 V 291 1273 a Fx(These)18 ++b(options)f(con)n(trol)h(prompting)f(b)r(efore)h(running)h(the)f(p)r ++(ostho)r(ok.)33 b(Use)19 b Fr(--prompt-posthoo)o(k)291 ++1373 y Fx(to)i(force)f(prompting)h(b)r(efore)g(running)f(the)i(p)r ++(ostho)r(ok)f(command.)34 b(F)-7 b(or)20 b(securit)n(y)h(reasons,)291 ++1472 y(this)33 b(is)f(the)i(default.)53 b(When)33 b(de\014ning)g(a)g(p) ++r(ostho)r(ok)f(for)g(apply)-7 b(,)34 b(y)n(ou)e(will)h(need)g(to)g(use) ++291 1572 y Fr(--run-posthook)d Fx(or)36 b(else)g(y)n(ou)f(will)i(get)f + (an)g(error,)h(b)r(ecause)f(the)h(subpro)r(cess)e(whic)n(h)291 +-615 y(runs)27 b(the)h(apply)f(command)g(cannot)g(prompt)h(the)g(user.) +-415 720 y(Some)e(darcs)f(commands)g(exp)r(ort)h(to)g(the)g(p)r(ostho)r +-(ok)g(command)g(information)f(ab)r(out)291 820 y(the)g(c)n(hanges)e(b)r +-(eing)h(made.)36 b(In)25 b(particular,)f(three)g(en)n(vironmen)n(t)g(v) +--5 b(ariables)23 b(are)g(de\014ned.)291 920 y Fr(DARCS_PATCHES)17 ++1671 y(runs)27 b(the)h(apply)f(command)g(cannot)g(prompt)h(the)g(user.) ++415 1771 y(Some)e(darcs)f(commands)g(exp)r(ort)h(to)g(the)g(p)r(ostho)r ++(ok)g(command)g(information)f(ab)r(out)291 1871 y(the)g(c)n(hanges)e(b) ++r(eing)h(made.)36 b(In)25 b(particular,)f(three)g(en)n(vironmen)n(t)g ++(v)-5 b(ariables)23 b(are)g(de\014ned.)291 1970 y Fr(DARCS_PATCHES)17 + b Fx(con)n(tains)k(a)h(h)n(uman-readable)e(summary)i(of)g(the)h(patc)n +-(hes)f(b)r(eing)g(acted)291 1019 y(up)r(on.)50 b(The)32 ++(hes)f(b)r(eing)g(acted)291 2070 y(up)r(on.)50 b(The)32 + b(format)f(is)h(the)g(same)g(as)f("darcs)f(c)n(hanges".)49 +-b Fr(DARCS_PATCHES_X)o(ML)26 b Fx(Con-)291 1119 y(tains)32 ++b Fr(DARCS_PATCHES_X)o(ML)26 b Fx(Con-)291 2170 y(tains)32 + b(the)h(same)g(details,)h(in)f(the)g(same)f(XML)h(format)g(as)f("darcs) +-f(c)n(hanges".)51 b(Finally)-7 b(,)291 1218 y Fr(DARCS_FILES)21 ++f(c)n(hanges".)51 b(Finally)-7 b(,)291 2269 y Fr(DARCS_FILES)21 + b Fx(con)n(tains)k(a)g(list)h(of)g(the)g(\014les)g(a\013ected,)g(one)g + (\014le)g(p)r(er)g(line.)36 b(If)26 b(y)n(our)f(rep)r(os-)291 +-1318 y(itory)h(has)h(\014lenames)f(including)i(newlines,)f(y)n(ou'll)f ++2369 y(itory)h(has)h(\014lenames)f(including)i(newlines,)f(y)n(ou'll)f + (just)i(ha)n(v)n(e)e(to)h(cop)r(e.)37 b(Note,)27 b(ho)n(w)n(ev)n(er,) +-291 1418 y(that)h Fs(none)34 b Fx(of)28 b(these)g(en)n(vironmen)n(t)f ++291 2468 y(that)h Fs(none)34 b Fx(of)28 b(these)g(en)n(vironmen)n(t)f + (v)-5 b(ariables)27 b(are)g(de\014ned)h(when)g(running)g(under)g(win-) +-291 1517 y(do)n(ws.)58 b(Note)36 b(also)e(that)h(w)n(e)g(refuse)g(to)g ++291 2568 y(do)n(ws.)58 b(Note)36 b(also)e(that)h(w)n(e)g(refuse)g(to)g + (pass)f(en)n(vironmen)n(t)g(v)-5 b(ariables)34 b(greater)g(in)h(size) +-291 1617 y(than)27 b(10k,)g(in)h(order)e(to)h(a)n(v)n(oid)g(triggering) +-e Fr(E2BIG)h Fx(errors.)p 527 1823 2392 4 v 527 1897 +-a Fr(--prehook=COMMAN)o(D,)37 b(--no-prehook)p 527 1952 +-V 291 2158 a Fx(T)-7 b(o)23 b(pro)n(vide)g(a)h(command)f(that)i(should) +-f(b)r(e)g(run)g(b)r(efore)g(a)f(darcs)g(command)h(is)g(executed,)291 +-2258 y(use)f Fr(--prehook)c Fx(to)k(sp)r(ecify)g(the)h(command.)35 ++291 2668 y(than)27 b(10k,)g(in)h(order)e(to)h(a)n(v)n(oid)g(triggering) ++e Fr(E2BIG)h Fx(errors.)p 527 2848 V 527 2923 a Fr(--prehook=COMMAN)o ++(D,)37 b(--no-prehook)p 527 2978 V 291 3159 a Fx(T)-7 ++b(o)23 b(pro)n(vide)g(a)h(command)f(that)i(should)f(b)r(e)g(run)g(b)r ++(efore)g(a)f(darcs)g(command)h(is)g(executed,)291 3258 ++y(use)f Fr(--prehook)c Fx(to)k(sp)r(ecify)g(the)h(command.)35 + b(An)23 b(example)g(use)g(is)g(for)g(p)r(eople)g(who)g(w)n(an)n(t)291 +-2357 y(to)i(ha)n(v)n(e)f(a)h(command)g(run)g(whenev)n(er)g(a)g(patc)n ++3358 y(to)i(ha)n(v)n(e)f(a)h(command)g(run)g(whenev)n(er)g(a)g(patc)n + (h)g(is)g(to)g(b)r(e)h(recorded,)e(suc)n(h)h(as)g(translating)291 +-2457 y(line)e(endings)g(b)r(efore)g(recording)e(patc)n(hes.)35 ++3458 y(line)e(endings)g(b)r(efore)g(recording)e(patc)n(hes.)35 + b(Using)23 b Fr(--no-prehook)18 b Fx(will)23 b(disable)g(running)291 +-2557 y(the)28 b(command.)p 527 2740 V 527 2815 a Fr(--prompt-prehook)o +-(,)37 b(--run-prehook)p 527 2870 V 291 3053 a Fx(These)18 ++3557 y(the)28 b(command.)p 527 3722 V 527 3797 a Fr(--prompt-prehook)o ++(,)37 b(--run-prehook)p 527 3852 V 291 4016 a Fx(These)18 + b(options)f(con)n(trol)h(prompting)f(b)r(efore)h(running)h(the)f(preho) +-r(ok.)33 b(Use)18 b Fr(--prompt-prehook)291 3153 y Fx(to)25 ++r(ok.)33 b(Use)18 b Fr(--prompt-prehook)291 4116 y Fx(to)25 + b(force)g(prompting)f(b)r(efore)i(running)f(the)g(preho)r(ok)g + (command.)35 b(F)-7 b(or)25 b(securit)n(y)g(reasons,)291 +-3252 y(this)i(is)h(the)g(default.)p 527 3458 V 527 3533 +-a Fr(--ssh-cm,)40 b(--no-ssh-cm)p 527 3581 V 415 3787 ++4215 y(this)i(is)h(the)g(default.)p 527 4396 V 527 4471 ++a Fr(--ssh-cm,)40 b(--no-ssh-cm)p 527 4519 V 415 4700 + a Fx(F)-7 b(or)28 b(commands)h(whic)n(h)g(in)n(v)n(ok)n(e)e(ssh,)i + (darcs)f(will)h(normally)f(m)n(ultiplex)i(ssh)e(sessions)291 +-3886 y(o)n(v)n(er)i(a)i(single)g(connection)h(as)e(long)h(as)g(y)n(our) ++4799 y(o)n(v)n(er)i(a)i(single)g(connection)h(as)e(long)h(as)g(y)n(our) + f(v)n(ersion)g(of)i(ssh)f(has)g(the)h(Con)n(trolMaster)291 +-3986 y(feature)j(from)g(Op)r(enSSH)i(v)n(ersions)d(3.9)h(and)g(ab)r(o)n ++4899 y(feature)j(from)g(Op)r(enSSH)i(v)n(ersions)d(3.9)h(and)g(ab)r(o)n + (v)n(e.)64 b(This)36 b(option)h(will)g(a)n(v)n(oid)e(darcs)291 +-4085 y(trying)27 b(to)g(use)g(this)h(feature)g(ev)n(en)f(if)h(y)n(our)e +-(ssh)h(supp)r(orts)h(it.)p 527 4269 V 527 4344 a Fr(--umask)p +-527 4380 V 291 4563 a Fx(By)g(default,)h(Darcs)f(will)g(use)h(y)n(our)e +-(curren)n(t)h(umask.)39 b(The)28 b(option)g Fr(--umask)e +-Fx(will)j(cause)291 4663 y(Darcs)d(to)i(switc)n(h)f(to)h(a)f +-(di\013eren)n(t)h(umask)f(b)r(efore)g(writing)g(to)h(the)g(rep)r +-(ository)-7 b(.)p 527 4869 V 527 4944 a Fr(--dont-restrict-)o(pa)o(ths) +-o(,)37 b(--restrict-paths)p 527 4998 V eop end ++4998 y(trying)27 b(to)g(use)g(this)h(feature)g(ev)n(en)f(if)h(y)n(our)e ++(ssh)h(supp)r(orts)h(it.)p eop end + %%Page: 58 58 + TeXDict begin 58 57 bop 739 282 a Fx(58)1378 b Fu(CHAPTER)27 +-b(6.)64 b(D)n(AR)n(CS)28 b(COMMANDS)739 515 y Fx(By)23 +-b(default)h(darcs)f(is)g(only)g(allo)n(w)n(ed)g(to)g(manage)f(and)i(mo) +-r(dify)g(\014les)f(and)h(directories)e(con-)739 615 y(tained)h(inside)h +-(the)f(curren)n(t)f(rep)r(ository)g(and)h(not)g(b)r(eing)h(part)e(of)i +-(an)n(y)e(darcs)g(rep)r(ository's)739 715 y(meta)32 b(data)g +-(\(including)h(the)f(curren)n(t)g(one\).)51 b(This)32 +-b(is)g(mainly)g(for)g(securit)n(y)-7 b(,)32 b(to)h(protect)739 +-814 y(y)n(ou)27 b(from)h(sp)r(o)r(ofed)g(patc)n(hes)g(mo)r(difying)g +-(arbitrary)e(\014les)i(with)h(sensitiv)n(e)e(data|sa)n(y)-7 +-b(,)27 b(in)739 914 y(y)n(our)i(home)h(directory|or)e(temp)r(ering)i +-(with)h(an)n(y)f(rep)r(ository's)e(meta)i(data)g(to)g(switc)n(h)739 +-1013 y(o\013)e(this)f(safet)n(y)g(guard.)863 1116 y(But)e(sometimes)f +-(y)n(ou)f(ma)n(y)g(w)n(an)n(t)h(to)g(manage)f(a)h(group)f(of)h(\\sub")f +-(rep)r(ositories')g(pref-)739 1216 y(erence)29 b(\014les)h(with)g(a)f +-(global)g(rep)r(ository)-7 b(,)29 b(or)g(use)g(darcs)g(in)h(some)f +-(other)g(adv)-5 b(anced)29 b(w)n(a)n(y)-7 b(.)739 1315 +-y(The)18 b(b)r(est)h(w)n(a)n(y)e(is)i(probably)e(to)h(put)h +-Fr(ALL)42 b(dont-restrict-pat)o(hs)12 b Fx(in)19 b Fr(_darcs/prefs/de)o +-(fau)o(lt)o(s)p Fx(.)739 1415 y(This)27 b(turns)h(o\013)g(all)f(sanit)n +-(y)g(c)n(hec)n(king)f(for)h(\014le)h(paths)f(in)h(patc)n(hes.)863 +-1517 y(P)n(ath)23 b(c)n(hec)n(king)f(can)h(b)r(e)h(temp)r(orarily)e +-(turned)i(on)f(with)h Fr(--restrict-paths)17 b Fx(on)23 +-b(the)739 1617 y(command)k(line,)h(when)g(pulling)g(or)e(applying)h +-(unkno)n(wn)g(patc)n(hes.)739 1907 y Fq(6.2)135 b(Options)45 +-b(apart)h(from)f(darcs)g(commands)p 975 2094 2392 4 v +-975 2169 a Fr(--help,)c(--extended-help)p 975 2224 V +-739 2418 a Fx(Calling)29 b(darcs)g(with)h(just)g Fr(--help)e ++b(6.)64 b(D)n(AR)n(CS)28 b(COMMANDS)p 975 515 2392 4 ++v 975 590 a Fr(--umask)p 975 627 V 739 797 a Fx(By)g(default,)h(Darcs)f ++(will)h(use)f(y)n(our)f(curren)n(t)h(umask.)39 b(The)28 ++b(option)h Fr(--umask)c Fx(will)k(cause)739 896 y(Darcs)e(to)g(switc)n ++(h)h(to)f(a)g(di\013eren)n(t)h(umask)f(b)r(efore)g(writing)g(to)h(the)g ++(rep)r(ository)-7 b(.)p 975 1085 V 975 1160 a Fr(--dont-restrict-)o ++(pat)o(hs)o(,)38 b(--restrict-path)o(s)p 975 1215 V 739 ++1403 a Fx(By)23 b(default)h(darcs)f(is)g(only)g(allo)n(w)n(ed)g(to)g ++(manage)f(and)i(mo)r(dify)g(\014les)f(and)h(directories)e(con-)739 ++1502 y(tained)h(inside)h(the)f(curren)n(t)f(rep)r(ository)g(and)h(not)g ++(b)r(eing)h(part)e(of)i(an)n(y)e(darcs)g(rep)r(ository's)739 ++1602 y(meta)32 b(data)g(\(including)h(the)f(curren)n(t)g(one\).)51 ++b(This)32 b(is)g(mainly)g(for)g(securit)n(y)-7 b(,)32 ++b(to)h(protect)739 1702 y(y)n(ou)27 b(from)h(sp)r(o)r(ofed)g(patc)n ++(hes)g(mo)r(difying)g(arbitrary)e(\014les)i(with)h(sensitiv)n(e)e ++(data|sa)n(y)-7 b(,)27 b(in)739 1801 y(y)n(our)i(home)h(directory|or)e ++(temp)r(ering)i(with)h(an)n(y)f(rep)r(ository's)e(meta)i(data)g(to)g ++(switc)n(h)739 1901 y(o\013)e(this)f(safet)n(y)g(guard.)863 ++2002 y(But)e(sometimes)f(y)n(ou)f(ma)n(y)g(w)n(an)n(t)h(to)g(manage)f ++(a)h(group)f(of)h(\\sub")f(rep)r(ositories')g(pref-)739 ++2102 y(erence)29 b(\014les)h(with)g(a)f(global)g(rep)r(ository)-7 ++b(,)29 b(or)g(use)g(darcs)g(in)h(some)f(other)g(adv)-5 ++b(anced)29 b(w)n(a)n(y)-7 b(.)739 2201 y(The)18 b(b)r(est)h(w)n(a)n(y)e ++(is)i(probably)e(to)h(put)h Fr(ALL)42 b(dont-restrict-pat)o(hs)12 ++b Fx(in)19 b Fr(_darcs/prefs/de)o(fau)o(lt)o(s)p Fx(.)739 ++2301 y(This)27 b(turns)h(o\013)g(all)f(sanit)n(y)g(c)n(hec)n(king)f ++(for)h(\014le)h(paths)f(in)h(patc)n(hes.)863 2402 y(P)n(ath)23 ++b(c)n(hec)n(king)f(can)h(b)r(e)h(temp)r(orarily)e(turned)i(on)f(with)h ++Fr(--restrict-paths)17 b Fx(on)23 b(the)739 2502 y(command)k(line,)h ++(when)g(pulling)g(or)e(applying)h(unkno)n(wn)g(patc)n(hes.)739 ++2784 y Fq(6.2)135 b(Options)45 b(apart)h(from)f(darcs)g(commands)p ++975 2968 V 975 3043 a Fr(--help,)c(--overview)p 975 3098 ++V 739 3286 a Fx(Calling)29 b(darcs)g(with)h(just)g Fr(--help)e + Fx(as)h(an)g(argumen)n(t)g(giv)n(es)f(a)i(brief)g(summary)f(of)g(what) +-739 2517 y(commands)h(are)f(a)n(v)-5 b(ailable.)44 b(The)30 +-b Fr(--extended-help)24 b Fx(option)30 b(giv)n(es)f(a)h(more)g(tec)n +-(hnical)739 2617 y(summary)d(of)g(what)h(the)g(commands)f(actually)g +-Fs(do)p Fx(.)p 975 2791 V 975 2866 a Fr(--version,)40 +-b(--exact-version)p 975 2914 V 739 3089 a Fx(Calling)c(darcs)f(with)i ++739 3386 y(commands)i(are)f(a)n(v)-5 b(ailable.)47 b(The)31 ++b Fr(--overview)c Fx(option)k(giv)n(es)f(a)h(more)g(tec)n(hnical)f ++(sum-)739 3485 y(mary)d(of)g(what)h(the)g(commands)f(actually)g ++Fs(do)p Fx(.)p 975 3656 V 975 3730 a Fr(--version,)40 ++b(--exact-version)p 975 3779 V 739 3949 a Fx(Calling)c(darcs)f(with)i + (the)g(\015ag)e Fr(--version)e Fx(tells)k(y)n(ou)e(the)i(v)n(ersion)e +-(of)h(darcs)g(y)n(ou)f(are)739 3189 y(using.)53 b(Calling)33 ++(of)h(darcs)g(y)n(ou)f(are)739 4048 y(using.)53 b(Calling)33 + b(darcs)f(with)i(the)f(\015ag)g Fr(--exact-version)27 +-b Fx(giv)n(es)32 b(the)h(precise)g(v)n(ersion)739 3288 ++b Fx(giv)n(es)32 b(the)h(precise)g(v)n(ersion)739 4148 + y(of)d(darcs,)f(ev)n(en)g(if)h(that)g(v)n(ersion)e(do)r(esn't)i + (corresp)r(ond)e(to)i(a)f(released)f(v)n(ersion)g(n)n(um)n(b)r(er.)739 +-3388 y(This)22 b(is)g(helpful)h(with)g(bug)f(rep)r(orts,)g(esp)r ++4248 y(This)22 b(is)g(helpful)h(with)g(bug)f(rep)r(orts,)g(esp)r + (ecially)g(when)g(running)g(with)h(a)f(\\latest")f(v)n(ersion)739 +-3487 y(of)27 b(darcs.)p 975 3662 V 975 3737 a Fr(--commands)p +-975 3773 V 739 3948 a Fx(Similarly)20 b(calling)g(darcs)f(with)i(only)f ++4347 y(of)27 b(darcs.)p 975 4518 V 975 4592 a Fr(--commands)p ++975 4629 V 739 4799 a Fx(Similarly)20 b(calling)g(darcs)f(with)i(only)f + Fr(--commands)d Fx(giv)n(es)i(a)h(simple)h(list)f(of)h(a)n(v)-5 +-b(ailable)19 b(com-)739 4048 y(mands.)37 b(This)27 b(latter)g ++b(ailable)19 b(com-)739 4899 y(mands.)37 b(This)27 b(latter)g + (arrangemen)n(t)f(is)h(primarily)f(in)n(tended)i(for)f(the)h(use)f(of)h +-(command-)739 4147 y(line)g(auto)r(completion)f(facilities,)g(as)g(are) +-g(a)n(v)-5 b(ailable)26 b(in)i(bash.)739 4437 y Fq(6.3)135 +-b(Getting)46 b(help)739 4641 y Fk(6.3.1)112 b(darcs)38 +-b(help)739 4799 y Fx(Y)-7 b(ou)20 b(could)h(also)e(call)h +-Fr(help)f Fx(as)g(a)h(command.)34 b(This)21 b(is)f(equiv)-5 +-b(alen)n(t)20 b(to)g(calling)g(darcs)f({help.)739 4899 +-y(The)31 b Fr(--verbose)c Fx(argumen)n(t)i(is)i(equiv)-5 +-b(alen)n(t)30 b(to)g(the)h(darcs)f(option)g Fr(--extended-help)p +-Fx(.)739 4998 y(If)25 b(y)n(ou)e(pass)g(it)i(another)e(command)h(as)g +-(an)g(argumen)n(t,)g(it)g(will)h(b)r(e)f(equiv)-5 b(alen)n(t)24 +-b(to)g(passing)p eop end ++(command-)739 4998 y(line)g(auto)r(completion)f(facilities,)g(as)g(are) ++g(a)n(v)-5 b(ailable)26 b(in)i(bash.)p eop end + %%Page: 59 59 +-TeXDict begin 59 58 bop 291 282 a Fu(6.4.)63 b(CREA)-7 +-b(TING)28 b(REPOSITORIES)1475 b Fx(59)291 515 y(the)34 +-b Fr(--help)e Fx(to)j(that)f(command.)57 b(F)-7 b(or)34 +-b(example,)i Fr(darcs)41 b(help)h(query)g(manifest)31 +-b Fx(is)291 615 y(equiv)-5 b(alen)n(t)27 b(to)g Fr(darcs)42 +-b(query)f(manifest)g(--help)p Fx(.)415 716 y Fr(Usage:)g(darcs)h(help)g +-([OPTION]...)d([)f([DARCS_SUBCOMMA)o(ND])o(])415 +-818 y Fx(Options:)565 951 y Fr(--match)969 901 y Fx(sho)n(ws)27 ++TeXDict begin 59 58 bop 291 282 a Fu(6.3.)63 b(GETTING)28 ++b(HELP)1933 b Fx(59)291 515 y Fq(6.3)135 b(Getting)46 ++b(help)291 714 y Fk(6.3.1)112 b(darcs)38 b(help)291 867 ++y Fx(Y)-7 b(ou)20 b(could)g(also)f(call)h Fr(help)f Fx(as)h(a)g ++(command.)34 b(This)20 b(is)h(equiv)-5 b(alen)n(t)20 ++b(to)g(calling)g(darcs)f({help.)291 967 y(the)34 b Fr(--help)e ++Fx(to)j(that)f(command.)57 b(F)-7 b(or)34 b(example,)i ++Fr(darcs)41 b(help)h(query)g(manifest)31 b Fx(is)291 ++1066 y(equiv)-5 b(alen)n(t)27 b(to)g Fr(darcs)42 b(query)f(manifest)g ++(--help)p Fx(.)415 1166 y Fr(Usage:)g(darcs)h(help)g([OPTION]...)d ++([)f([DARCS_SUBCOMMA)o(ND])o(])415 ++1265 y Fx(Options:)565 1397 y Fr(--match)969 1348 y Fx(sho)n(ws)27 + b(a)g(summary)g(of)g(ho)n(w)g(to)h(use)f(patc)n(h)969 +-1001 y(matc)n(hing)g(rules)415 1085 y(Displa)n(y)c(help)h(for)g(darcs)e ++1447 y(matc)n(hing)g(rules)415 1529 y(Displa)n(y)c(help)h(for)g(darcs)e + (or)h(a)h(single)f(command.)35 b(help)24 b(displa)n(ys)f(usage)g +-(information)291 1184 y(for)36 b(darcs)f(in)i(general)f(or)g(for)g(a)g ++(information)291 1629 y(for)36 b(darcs)f(in)i(general)f(or)g(for)g(a)g + (single)g(command)h(\(for)f(example,)j(darcs)d(help)h(query)291 +-1284 y(manifest\).)415 1385 y(Note)31 b(that)f({v)n(erb)r(ose)f(prin)n +-(ts)h(extra)f(help)i(for)f(darcs)f(as)h(a)g(whole,)h(but)g(it)g(mak)n +-(es)e(no)291 1485 y(di\013erence)e(when)h(getting)f(help)h(for)f(a)g +-(single)g(command.)291 1769 y Fq(6.4)135 b(Creating)46 +-b(rep)t(ositories)291 1970 y Fk(6.4.1)112 b(darcs)38 +-b(initialize)291 2127 y Fr(Usage:)j(darcs)g(initialize)f([OPTION]...) +-415 2228 y Fx(Options:)565 2324 y Fr(--plain-pristin)o(e-t)o(re)o(e)268 ++1729 y(manifest\).)291 2003 y Fq(6.4)135 b(Creating)46 ++b(rep)t(ositories)291 2201 y Fk(6.4.1)112 b(darcs)38 ++b(initialize)291 2354 y Fr(Usage:)j(darcs)g(initialize)f([OPTION]...) ++415 2454 y Fx(Options:)565 2548 y Fr(--plain-pristin)o(e-t)o(re)o(e)268 + b Fx(use)27 b(a)g(plain)h(pristine)g(tree)f([DEF)-9 b(A)n(UL)i(T])565 +-2424 y Fr(--no-pristine-t)o(ree)1754 2423 y Fx(use)27 +-b(no)h(pristine)f(tree)565 2561 y Fr(--hashed)1754 2511 ++2648 y Fr(--no-pristine-t)o(ree)1754 2647 y Fx(use)27 ++b(no)h(pristine)f(tree)565 2785 y Fr(--hashed)1754 2735 + y Fx(Some)g(new)h(features.)36 b(Compatible)28 b(with)g(older)1754 +-2611 y(rep)r(os)565 2737 y Fr(--darcs-2)1754 2685 y Fx(All)g(features.) ++2835 y(rep)r(os)565 2961 y Fr(--darcs-2)1754 2909 y Fx(All)g(features.) + 36 b(Related)28 b(rep)r(os)f(m)n(ust)g(use)h(same)1754 +-2784 y(format)f([EXPERIMENT)-7 b(AL])565 2915 y Fr(--old-fashioned)o +-(-in)o(ve)o(nt)o(ory)1754 2863 y Fx(Minimal)28 b(features.)36 +-b(What)28 b(older)f(rep)r(os)f(use.)1754 2962 y([DEF)-9 +-b(A)n(UL)i(T])565 3082 y Fr(--repodir)39 b(DIRECTORY)1754 +-3041 y Fx(sp)r(ecify)28 b(the)g(rep)r(ository)e(directory)g(in)i(whic)n +-(h)f(to)1754 3140 y(run)415 3208 y(Initialize)h(a)f(new)h(source)e +-(tree)h(as)g(a)g(darcs)g(rep)r(ository)-7 b(.)415 3309 ++3008 y(format)f([EXPERIMENT)-7 b(AL])565 3139 y Fr(--old-fashioned)o ++(-in)o(ve)o(nt)o(ory)1754 3087 y Fx(Minimal)28 b(features.)36 ++b(What)28 b(older)f(rep)r(os)f(use.)1754 3186 y([DEF)-9 ++b(A)n(UL)i(T])565 3307 y Fr(--repodir)39 b(DIRECTORY)1754 ++3265 y Fx(sp)r(ecify)28 b(the)g(rep)r(ository)e(directory)g(in)i(whic)n ++(h)f(to)1754 3365 y(run)415 3430 y(Initialize)h(a)f(new)h(source)e ++(tree)h(as)g(a)g(darcs)g(rep)r(ository)-7 b(.)415 3530 + y(Call)33 b Fr(initialize)c Fx(once)k(for)f(eac)n(h)h(pro)5 + b(ject)32 b(y)n(ou)g(w)n(ork)g(on.)53 b(Run)34 b(it)g(from)e(the)i(top) +-291 3409 y(lev)n(el)28 b(directory)g(of)h(the)h(pro)5 ++291 3630 y(lev)n(el)28 b(directory)g(of)h(the)h(pro)5 + b(ject,)29 b(with)h(the)f(pro)5 b(ject)29 b(\014les)g(already)e(there.) +-42 b Fr(initialize)291 3509 y Fx(will)22 b(set)h(up)g(all)g(the)g ++42 b Fr(initialize)291 3729 y Fx(will)22 b(set)h(up)g(all)g(the)g + (directories)e(and)i(\014les)f(darcs)g(needs)g(in)h(order)f(to)g(start) +-g(k)n(eeping)g(trac)n(k)291 3608 y(of)27 b(revisions)f(for)h(y)n(our)g +-(pro)5 b(ject.)415 3710 y Fr(initialize)26 b Fx(creates)j(a)g(single)h ++g(k)n(eeping)g(trac)n(k)291 3829 y(of)27 b(revisions)f(for)h(y)n(our)g ++(pro)5 b(ject.)415 3929 y Fr(initialize)26 b Fx(creates)j(a)g(single)h + (directory)f(named)g Fr(_darcs)p Fx(,)g(with)h(con)n(ten)n(ts)g(for)f +-(in-)291 3809 y(ternal)38 b(use.)69 b(The)39 b(one)f(sub)r(dictory)g ++(in-)291 4028 y(ternal)38 b(use.)69 b(The)39 b(one)f(sub)r(dictory)g + (of)g(in)n(terest)g(to)h(users)e(is)i Fr(_darcs/prefs)p +-Fx(,)d(whic)n(h)291 3909 y(will)27 b(include)g(an)g(empt)n(y)g(\014le)g ++Fx(,)d(whic)n(h)291 4128 y(will)27 b(include)g(an)g(empt)n(y)g(\014le)g + Fr(_darcs/prefs/mot)o(d)21 b Fx(\(see)27 b(Section)g(4.1\),)g(as)f(w)n +-(ell)h(as)f(\014les)291 4008 y(named)40 b Fr(boring)d ++(ell)h(as)f(\014les)291 4227 y(named)40 b Fr(boring)d + Fx(and)j Fr(binaries)p Fx(,)g(whic)n(h)g(con)n(tain)g(useful)g +-(defaults)g(as)g(describ)r(ed)g(in)291 4108 y(Sections)27 +-b(4.1)g Fs(et)i(se)l(q.)p 527 4298 2392 4 v 527 4372 +-a Fr(--old-fashioned-)o(in)o(ven)o(to)o(ry)527 4472 y(--hashed)527 +-4571 y(--darcs-2)p 527 4608 V 415 4798 a Fx(These)e(options)g(describ)r +-(e)h(p)r(ossible)f(rep)r(ository)f(formats)h(to)g(use.)415 +-4899 y Fr(old-fashioned-in)o(ven)o(to)o(ry)19 b Fx(is)26 +-b(the)g(default.)37 b(While)26 b(it)h(has)e(minimal)h(features,)f(it) +-291 4998 y(is)i(the)h(b)r(est)g(tested)g(and)f(the)h(limitations)g(it)g +-(do)r(es)f(ha)n(v)n(e)g(are)f(w)n(ell)i(kno)n(wn.)p eop +-end ++(defaults)g(as)g(describ)r(ed)g(in)291 4327 y(Sections)27 ++b(4.1)g Fs(et)i(se)l(q.)p 527 4508 2392 4 v 527 4582 ++a Fr(--old-fashioned-)o(in)o(ven)o(to)o(ry)527 4682 y(--hashed)527 ++4782 y(--darcs-2)p 527 4818 V 415 4998 a Fx(These)e(options)g(describ)r ++(e)h(p)r(ossible)f(rep)r(ository)f(formats)h(to)g(use.)p ++eop end + %%Page: 60 60 + TeXDict begin 60 59 bop 739 282 a Fx(60)1378 b Fu(CHAPTER)27 +-b(6.)64 b(D)n(AR)n(CS)28 b(COMMANDS)863 515 y Fr(hashed)j +-Fx(Ov)n(ers)g(sev)n(eral)g(features)h(while)h(still)g(b)r(e)g +-(compatible)g(with)g(old-fashioned)739 615 y(rep)r(os.)j(The)28 +-b(sp)r(eci\014c)f(features)g(are:)863 807 y Fn(\017)41 ++b(6.)64 b(D)n(AR)n(CS)28 b(COMMANDS)863 515 y Fr(old-fashioned-inv)o ++(ent)o(or)o(y)20 b Fx(is)25 b(the)i(default.)36 b(While)27 ++b(it)f(has)f(minimal)h(features,)g(it)739 615 y(is)h(the)h(b)r(est)g ++(tested)g(and)g(the)g(limitations)f(it)h(do)r(es)g(ha)n(v)n(e)e(are)h ++(w)n(ell)g(kno)n(wn.)863 715 y Fr(hashed)18 b Fx(O\013ers)h(sev)n(eral) ++f(features)h(while)h(still)g(b)r(eing)g(compatible)f(with)h ++(old-fashioned)739 814 y(rep)r(ositories.)35 b(The)28 ++b(sp)r(eci\014c)f(features)g(are:)863 995 y Fn(\017)41 + b Fx(The)25 b(hashed)f(format)g(allo)n(ws)f(for)h(greater)f(atomicit)n + (y)h(of)g(op)r(erations.)35 b(This)24 b(mak)n(es)946 +-907 y(for)35 b(greater)f(safet)n(y)h(and)g(sim)n(ultaneously)f(greater) +-g(e\016ciency)-7 b(.)60 b(These)35 b(b)r(ene\014ts,)946 +-1007 y(ho)n(w)n(ev)n(er,)26 b(ha)n(v)n(e)h(not)g(b)r(een)h(fully)h ++1094 y(for)35 b(greater)f(safet)n(y)h(and)g(sim)n(ultaneously)f ++(greater)g(e\016ciency)-7 b(.)60 b(These)35 b(b)r(ene\014ts,)946 ++1194 y(ho)n(w)n(ev)n(er,)26 b(ha)n(v)n(e)h(not)g(b)r(een)h(fully)h + (realized)d(in)i(this)g(release.)36 b(F)-7 b(or)27 b(instance,)g(with)i +-(a)946 1106 y(hashed)f(rep)r(ository)-7 b(,)27 b(there)h(is)g(no)g ++(a)946 1294 y(hashed)f(rep)r(ository)-7 b(,)27 b(there)h(is)g(no)g + (need)g(for)g(darcs)f(push)h(to)g(require)f(a)h(rep)r(ository)946 +-1206 y(lo)r(c)n(k,)34 b(so)e(y)n(ou)g(could)h(record)e(patc)n(hes)h ++1393 y(lo)r(c)n(k,)34 b(so)e(y)n(ou)g(could)h(record)e(patc)n(hes)h + (while)h(w)n(aiting)f(for)g(a)h(push)g(to)f(\014nish)h(\(for)946 +-1306 y(instance,)28 b(if)g(it's)g(w)n(aiting)f(on)g(the)h(test)g +-(suite\).)863 1481 y Fn(\017)41 b Fx(The)29 b Fr(_darcs/pristine)22 ++1493 y(instance,)28 b(if)g(it's)g(w)n(aiting)f(on)g(the)h(test)g ++(suite\).)863 1658 y Fn(\017)41 b Fx(The)29 b Fr(_darcs/pristine)22 + b Fx(directory)27 b(no)h(longer)f(holds)h(the)h(pristine)f(cac)n(he.)38 +-b(This)946 1581 y(disallo)n(ws)i(certain)h(hac)n(kish)f(short-cuts,)j +-(but)f(also)e(dramatically)f(reduces)i(the)946 1681 y(danger)36 ++b(This)946 1758 y(disallo)n(ws)i(certain)h(hac)n(kish)f(short-cuts,)j ++(but)f(also)e(dramatically)f(reduces)i(the)946 1857 y(danger)36 + b(of)h(third-part)n(y)f(programs)e(\(e.g.)65 b(DreamW)-7 +-b(ea)n(v)n(er\))35 b(recursing)g(in)n(to)i(the)946 1780 ++b(ea)n(v)n(er\))35 b(recursing)g(in)n(to)i(the)946 1957 + y(pristine)28 b(cac)n(he)f(and)g(corrupting)f(darcs)h(rep)r(ositories.) +-863 1956 y Fn(\017)41 b Fx(Darcs)35 b(get)g(is)g(no)n(w)g(m)n(uc)n(h)g +-(faster,)i(and)e(alw)n(a)n(ys)e(op)r(erates)h(in)i(a)f("lazy")f +-(fashion,)946 2056 y(meaning)e(that)h(patc)n(hes)f(are)g(do)n(wnloaded) +-f(only)h(when)g(they)h(are)f(needed.)51 b(This)946 2155 +-y(giv)n(es)21 b(us)h(m)n(uc)n(h)g(of)g(the)g(b)r(ene\014ts)h(of)f +-({partial)f(rep)r(ositories,)g(without)h(most)g(of)g(their)946 +-2255 y(disadv)-5 b(an)n(tages.)54 b(This)33 b(approac)n(h,)g(ho)n(w)n +-(ev)n(er,)g(do)r(es)h(ha)n(v)n(e)e(sev)n(eral)g(new)i(dangers.)946 +-2355 y(First,)j(some)e(op)r(erations)f(ma)n(y)g(unexp)r(ectedly)i +-(require)e(the)i(do)n(wnload)e(of)h(large)946 2454 y(n)n(um)n(b)r(ers) +-27 b(of)h(patc)n(hes,)e(whic)n(h)i(could)f(b)r(e)h(slo)n(w)e(\(but)i(y) +-n(ou)f(could)g(alw)n(a)n(ys)f(in)n(terrupt)946 2554 y(with)c +-Fr(^C)p Fx(\).)e(Secondly)-7 b(,)21 b(if)g(the)g(source)f(rep)r +-(ository)f(disapp)r(ears,)h(or)g(y)n(ou)g(lose)g(net)n(w)n(ork)946 +-2654 y(connectivit)n(y)-7 b(,)28 b(some)f(op)r(erations)f(ma)n(y)h +-(fail.)863 2829 y Fn(\017)41 b Fx(Darcs)29 b(no)n(w)g(supp)r(orts)h ++863 2122 y Fn(\017)41 b Fx(Darcs)24 b(get)f(can)h(optionally)f(op)r ++(erate)g(in)h(a)f(m)n(uc)n(h)h(faster)f(\\lazy")g(fashion,)h(meaning) ++946 2222 y(that)35 b(patc)n(hes)e(are)g(do)n(wnloaded)f(only)h(when)h ++(they)g(are)f(needed.)56 b(This)34 b(giv)n(es)e(us)946 ++2322 y(m)n(uc)n(h)c(of)f(the)h(b)r(ene\014ts)g(of)g({partial)e(rep)r ++(ositories,)g(without)i(most)f(of)g(their)h(disad-)946 ++2421 y(v)-5 b(an)n(tages.)40 b(This)29 b(approac)n(h,)e(ho)n(w)n(ev)n ++(er,)g(do)r(es)i(ha)n(v)n(e)f(sev)n(eral)f(new)i(dangers.)39 ++b(First,)946 2521 y(some)d(op)r(erations)g(ma)n(y)g(unexp)r(ectedly)h ++(require)e(the)i(do)n(wnload)f(of)g(large)f(n)n(um-)946 ++2620 y(b)r(ers)25 b(of)f(patc)n(hes,)h(whic)n(h)g(could)f(b)r(e)h(slo)n ++(w)f(\(but)h(y)n(ou)f(could)h(alw)n(a)n(ys)d(in)n(terrupt)j(with)946 ++2720 y Fr(^C)p Fx(\).)39 b(Secondly)-7 b(,)41 b(if)e(the)f(source)g ++(rep)r(ository)f(disapp)r(ears,)j(or)d(y)n(ou)h(lose)g(net)n(w)n(ork) ++946 2820 y(connectivit)n(y)-7 b(,)28 b(some)f(op)r(erations)f(ma)n(y)h ++(fail.)863 2985 y Fn(\017)41 b Fx(Darcs)29 b(no)n(w)g(supp)r(orts)h + (cac)n(hing)e(of)i(patc)n(hes)f(and)h(\014le)g(con)n(ten)n(ts)f(to)g +-(reduce)h(band-)946 2929 y(width)h(and)g(sa)n(v)n(e)d(disk)i(space.)45 ++(reduce)h(band-)946 3084 y(width)h(and)g(sa)n(v)n(e)d(disk)i(space.)45 + b(It)30 b(greatly)f(sp)r(eeds)i(up)f(a)g(n)n(um)n(b)r(er)g(of)g(op)r +-(erations,)946 3029 y(and)f(is)g(essen)n(tially)f(transparen)n(t.)39 ++(erations,)946 3184 y(and)f(is)g(essen)n(tially)f(transparen)n(t.)39 + b(The)29 b(only)f(reason)f(w)n(e)i(don't)g(enable)g(it)g(b)n(y)f(de-) +-946 3128 y(fault)i(is)f(b)r(ecause)f(it)h(creates)f(a)h(large)e ++946 3284 y(fault)i(is)f(b)r(ecause)f(it)h(creates)f(a)h(large)e + (directory)h(in)58 b(/.darcs/cac)n(he)26 b(without)j(the)946 +-3228 y(user's)e(explicit)h(consen)n(t.)863 3420 y Fr(darcs-2)h +-Fx(Enables)i(all)g(a)n(v)-5 b(ailable)30 b(features,)i(at)g(the)g(exp)r +-(ense)f(of)g(still)h(b)r(eing)g(exp)r(er-)739 3520 y(imen)n(tal,)41 +-b(and)d(requiring)e(that)j(all)f(rep)r(os)f(for)h(a)f(pro)5 +-b(ject)38 b(use)g(the)g(same)g(format.)68 b(In)739 3620 +-y(addition)37 b(to)g(the)h(features)f(of)g(the)h Fr(hashed)d +-Fx(format)i(describ)r(ed)g(ab)r(o)n(v)n(e,)h(the)g Fr(darcs-2)739 +-3719 y Fx(format)27 b(also)f(enables)h(the)h(follo)n(wing:)863 +-3912 y Fn(\017)41 b Fx(It)26 b(should)e(no)h(longer)e(b)r(e)j(p)r ++3383 y(user's)e(explicit)h(consen)n(t.)863 3564 y Fr(darcs-2)35 ++b Fx(Enables)h(all)h(a)n(v)-5 b(ailable)35 b(features,)k(and)e ++(requiring)f(that)h(all)g(rep)r(os)f(for)h(a)739 3664 ++y(pro)5 b(ject)29 b(use)g(the)h(same)e(format.)42 b(In)30 ++b(addition)f(to)g(the)h(features)f(of)g(the)h Fr(hashed)d ++Fx(format)739 3763 y(describ)r(ed)g(ab)r(o)n(v)n(e,)g(the)h ++Fr(darcs-2)c Fx(format)j(also)g(enables)g(the)h(follo)n(wing:)863 ++3944 y Fn(\017)41 b Fx(It)26 b(should)e(no)h(longer)e(b)r(e)j(p)r + (ossible)e(to)h(confuse)g(darcs)e(or)h(freeze)h(it)g(inde\014nitely)h +-(b)n(y)946 4011 y(merging)h(con\015icting)g(c)n(hanges.)863 +-4187 y Fn(\017)41 b Fx(Iden)n(tical)c(primitiv)n(e)f(c)n(hanges)f(no)i ++(b)n(y)946 4043 y(merging)h(con\015icting)g(c)n(hanges.)863 ++4209 y Fn(\017)41 b Fx(Iden)n(tical)c(primitiv)n(e)f(c)n(hanges)f(no)i + (longer)e(con\015ict.)64 b(This)36 b(is)h(a)f(long-requested)946 +-4287 y(feature,)28 b(and)f(has)g(far-reac)n(hing)e(implications.)p +-975 4477 2392 4 v 975 4552 a Fr(--no-pristine-tr)o(ee)p +-975 4607 V 739 4799 a Fx(In)18 b(order)f(to)i(sa)n(v)n(e)e(disk)h ++4308 y(feature,)28 b(and)f(has)g(far-reac)n(hing)e(implications.)p ++975 4489 2392 4 v 975 4564 a Fr(--no-pristine-tr)o(ee)p ++975 4619 V 739 4799 a Fx(In)18 b(order)f(to)i(sa)n(v)n(e)e(disk)h + (space,)h(y)n(ou)f(can)g(use)g Fr(initialize)c Fx(with)19 + b(the)g Fr(--no-pristine-tr)o(ee)739 4899 y Fx(\015ag)25 + b(to)g(create)g(a)g(rep)r(ository)g(with)h(no)f(pristine)h(tree.)36 +@@ -9176,856 +9160,871 @@ + 814 y(rep)r(ository)j(from)i(whic)n(h)g(it)g(w)n(as)f(generated,)g(and) + h(then)g(p)r(erhaps)g(ask)f(users)g(to)h(include)739 + 914 y(this)f(information)f(in)h(bug)f(rep)r(orts.)863 +-1020 y(Note)j(that)g(when)g(sp)r(ecifying)f Fr(--to-patch)d ++1013 y(Note)j(that)g(when)g(sp)r(ecifying)f Fr(--to-patch)d + Fx(or)i Fr(--to-match)p Fx(,)e(y)n(ou)j(ma)n(y)g(get)g(a)h(v)n(er-)739 +-1119 y(sion)j(of)g(y)n(our)f(co)r(de)h(that)g(has)g(nev)n(er)f(b)r ++1113 y(sion)j(of)g(y)n(our)f(co)r(de)h(that)g(has)g(nev)n(er)f(b)r + (efore)h(b)r(een)h(seen,)g(if)g(the)g(patc)n(hes)e(ha)n(v)n(e)h(gotten) +-739 1219 y(themselv)n(es)23 b(reordered.)34 b(If)24 b(y)n(ou)f(ev)n(er) ++739 1213 y(themselv)n(es)23 b(reordered.)34 b(If)24 b(y)n(ou)f(ev)n(er) + g(w)n(an)n(t)g(to)h(b)r(e)g(able)f(to)h(precisely)f(repro)r(duce)g(a)g +-(giv)n(en)739 1319 y(v)n(ersion,)j(y)n(ou)h(need)h(either)f(to)g(tag)g +-(it)h(or)f(create)g(a)g(con)n(text)g(\014le.)739 1585 +-y Fk(6.4.3)112 b(darcs)38 b(put)739 1750 y Fr(Usage:)j(darcs)h(put)g +-([OPTION]...)d()863 1856 y Fx(Options:)1100 +-1986 y Fr(--to-match)d(PATTERN)2464 1944 y Fx(select)27 ++(giv)n(en)739 1312 y(v)n(ersion,)j(y)n(ou)h(need)h(either)f(to)g(tag)g ++(it)h(or)f(create)g(a)g(con)n(text)g(\014le.)739 1542 ++y Fk(6.4.3)112 b(darcs)38 b(put)739 1696 y Fr(Usage:)j(darcs)h(put)g ++([OPTION]...)d()863 1795 y Fx(Options:)1100 ++1919 y Fr(--to-match)d(PATTERN)2464 1877 y Fx(select)27 + b(c)n(hanges)f(up)i(to)g(a)f(patc)n(h)g(matc)n(hing)2464 +-2044 y(P)-7 b(A)g(TTERN)1100 2144 y Fr(--to-patch)39 +-b(REGEXP)2464 2102 y Fx(select)27 b(c)n(hanges)f(up)i(to)g(a)f(patc)n +-(h)g(matc)n(hing)2464 2201 y(REGEXP)913 2271 y Fr(-t)99 ++1977 y(P)-7 b(A)g(TTERN)1100 2076 y Fr(--to-patch)39 ++b(REGEXP)2464 2035 y Fx(select)27 b(c)n(hanges)f(up)i(to)g(a)f(patc)n ++(h)g(matc)n(hing)2464 2134 y(REGEXP)913 2204 y Fr(-t)99 + b(--tag)42 b(REGEXP)838 b Fx(select)27 b(tag)g(matc)n(hing)g(REGEXP) +-1100 2400 y Fr(--context)40 b(FILENAME)2464 2359 y Fx(v)n(ersion)26 ++1100 2333 y Fr(--context)40 b(FILENAME)2464 2292 y Fx(v)n(ersion)26 + b(sp)r(eci\014ed)i(b)n(y)f(the)h(con)n(text)f(in)2464 +-2458 y(FILENAME)1100 2528 y Fr(--set-scripts-ex)o(ecu)o(ta)o(ble)311 +-b Fx(mak)n(e)26 b(scripts)i(executable)1100 2628 y Fr(--dont-set-scrip) ++2391 y(FILENAME)1100 2461 y Fr(--set-scripts-ex)o(ecu)o(ta)o(ble)311 ++b Fx(mak)n(e)26 b(scripts)i(executable)1100 2561 y Fr(--dont-set-scrip) + o(ts-)o(ex)o(ecu)o(ta)o(bl)o(e)94 b Fx(don't)27 b(mak)n(e)g(scripts)g +-(executable)1100 2727 y Fr(--hashed)2464 2735 y Fx(Con)n(v)n(ert)f +-(darcs-1)f(format)j(to)f(hashed)g(format)1100 2827 y +-Fr(--old-fashioned-)o(inv)o(en)o(tor)o(y)2464 2835 y ++(executable)1100 2660 y Fr(--hashed)2464 2668 y Fx(Con)n(v)n(ert)f ++(darcs-1)f(format)j(to)f(hashed)g(format)1100 2760 y ++Fr(--old-fashioned-)o(inv)o(en)o(tor)o(y)2464 2768 y + Fx(Con)n(v)n(ert)f(from)h(hashed)g(to)h(darcs-1)d(format)1100 +-2956 y Fr(--repodir)40 b(DIRECTORY)2464 2914 y Fx(sp)r(ecify)28 ++2859 y Fr(--set-default)792 b Fx(set)27 b(default)h(rep)r(ository)e ++([DEF)-9 b(A)n(UL)i(T])1100 2959 y Fr(--no-set-default)660 ++b Fx(don't)27 b(set)h(default)g(rep)r(ository)1100 3088 ++y Fr(--repodir)40 b(DIRECTORY)2464 3047 y Fx(sp)r(ecify)28 + b(the)g(rep)r(ository)e(directory)g(in)i(whic)n(h)f(to)2464 +-3014 y(run)863 3086 y(Adv)-5 b(anced)28 b(options:)1013 +-3187 y Fr(--apply-as)39 b(USERNAME)97 b Fx(apply)27 b(patc)n(h)g(as)g +-(another)g(user)g(using)g(sudo)1013 3327 y Fr(--apply-as-mysel)o(f)1941 +-3275 y Fx(don't)g(use)h(sudo)f(to)h(apply)f(as)g(another)f(user)1941 +-3374 y([DEF)-9 b(A)n(UL)i(T])1013 3505 y Fr(--no-ssh-cm)1941 +-3453 y Fx(don't)27 b(use)h(SSH)g(Con)n(trolMaster)d(feature)1941 +-3552 y([DEF)-9 b(A)n(UL)i(T])1013 3643 y Fr(--ssh-cm)1941 +-3651 y Fx(use)27 b(SSH)h(Con)n(trolMaster)e(feature)863 +-3745 y(Put)j(is)g(the)g(opp)r(osite)g(of)f(get.)41 b(Put)28 ++3146 y(run)863 3212 y(Adv)-5 b(anced)28 b(options:)1013 ++3306 y Fr(--apply-as)39 b(USERNAME)97 b Fx(apply)27 b(patc)n(h)g(as)g ++(another)g(user)g(using)g(sudo)1013 3446 y Fr(--apply-as-mysel)o(f)1941 ++3394 y Fx(don't)g(use)h(sudo)f(to)h(apply)f(as)g(another)f(user)1941 ++3494 y([DEF)-9 b(A)n(UL)i(T])1013 3624 y Fr(--no-ssh-cm)1941 ++3572 y Fx(don't)27 b(use)h(SSH)g(Con)n(trolMaster)d(feature)1941 ++3672 y([DEF)-9 b(A)n(UL)i(T])1013 3762 y Fr(--ssh-cm)1941 ++3770 y Fx(use)27 b(SSH)h(Con)n(trolMaster)e(feature)863 ++3858 y(Put)j(is)g(the)g(opp)r(osite)g(of)f(get.)41 b(Put)28 + b(copies)g(the)i(con)n(ten)n(t)e(of)h(the)g(curren)n(t)f(rep)r(ository) +-739 3845 y(and)f(puts)h(it)g(in)g(a)f(newly)h(created)f(rep)r(ository) +--7 b(.)863 3951 y Fs(W)h(ARNING:)31 b Fx(Put)26 b(is)g(far)g(less)f ++739 3958 y(and)f(puts)h(it)g(in)g(a)f(newly)h(created)f(rep)r(ository) ++-7 b(.)863 4057 y Fs(W)h(ARNING:)31 b Fx(Put)26 b(is)g(far)g(less)f + (optimized)i(than)f(get,)g(esp)r(ecially)g(for)g(lo)r(cal)g(rep)r +-(osito-)739 4050 y(ries.)36 b(W)-7 b(e)28 b(recommend)f(a)n(v)n(oiding) ++(osito-)739 4157 y(ries.)36 b(W)-7 b(e)28 b(recommend)f(a)n(v)n(oiding) + f(use)h(of)h(put)g(except)g(for)f(small)g(rep)r(ositories.)863 +-4156 y(Put)f(is)g(used)f(when)h(y)n(ou)f(already)f(ha)n(v)n(e)h(a)g ++4256 y(Put)f(is)g(used)f(when)h(y)n(ou)f(already)f(ha)n(v)n(e)h(a)g + (rep)r(ository)f(and)i(w)n(an)n(t)f(to)g(mak)n(e)g(a)g(cop)n(y)g(of)739 +-4256 y(it.)37 b(A)28 b(t)n(ypical)f(use-case)f(is)i(when)g(y)n(ou)f(w)n ++4356 y(it.)37 b(A)28 b(t)n(ypical)f(use-case)f(is)i(when)g(y)n(ou)f(w)n + (an)n(t)f(to)i(branc)n(h)f(y)n(our)f(pro)5 b(ject.)863 +-4362 y(Put)21 b(w)n(orks)e(b)n(y)h(\014rst)g(initializing)h(a)f(rep)r ++4456 y(Put)21 b(w)n(orks)e(b)n(y)h(\014rst)g(initializing)h(a)f(rep)r + (ository)-7 b(.)33 b(If)21 b(the)f(new)h(rep)r(ository)e(is)h(not)h(on) +-f(the)739 4461 y(lo)r(cal)30 b(\014le)h(system)g(then)g(darcs)e(will)i ++f(the)739 4555 y(lo)r(cal)30 b(\014le)h(system)g(then)g(darcs)e(will)i + (login)g(to)f(the)h(remote)g(host)f(and)h(run)f Fr(darcs)42 +-b(init)739 4561 y Fx(there.)53 b(After)33 b(the)g(new)g(rep)r(ository)f ++b(init)739 4655 y Fx(there.)53 b(After)33 b(the)g(new)g(rep)r(ository)f + (is)h(created)f(all)g(selected)h(patc)n(hes)f(will)i(b)r(e)f(pushed)739 +-4661 y(just)28 b(as)f(with)h(the)g(command)f Fr(push)p +-Fx(.)p 975 4869 2392 4 v 975 4944 a Fr(--apply-as)p 975 +-4998 V eop end ++4755 y(just)28 b(as)f(with)h(the)g(command)f Fr(push)p ++Fx(.)p 975 4924 2392 4 v 975 4998 a Fr(--apply-as)p eop ++end + %%Page: 63 63 + TeXDict begin 63 62 bop 291 282 a Fu(6.5.)63 b(MODIFYING)29 +-b(THE)e(CONTENTS)h(OF)f(A)h(REPOSITOR)-7 b(Y)553 b Fx(63)415 +-515 y(If)26 b(y)n(ou)g(giv)n(e)f(the)h Fr(--apply-as)c +-Fx(\015ag,)j(darcs)g(will)h(use)g(sudo)f(to)h(apply)g(the)g(c)n(hanges) +-f(as)291 615 y(a)e(di\013eren)n(t)i(user.)35 b(This)24 +-b(can)g(b)r(e)h(useful)g(if)g(y)n(ou)e(w)n(an)n(t)h(to)g(set)g(up)h(a)f +-(system)g(where)g(sev)n(eral)291 715 y(users)33 b(can)h(mo)r(dify)h +-(the)g(same)e(rep)r(ository)-7 b(,)35 b(but)g(y)n(ou)f(don't)g(w)n(an)n +-(t)g(to)g(allo)n(w)f(them)i(full)291 814 y(write)30 b(access.)46 +-b(This)31 b(isn't)h(secure)e(against)g(skilled)h(malicious)f(attac)n(k) +-n(ers,)g(but)h(at)g(least)291 914 y(can)c(protect)g(y)n(our)f(rep)r +-(ository)g(from)i(clumsy)-7 b(,)27 b(inept)h(or)f(lazy)g(users.)p +-527 1108 2392 4 v 527 1183 a Fr(--context,)39 b(--tag,)i(--to-patch,)e +-(--to-match)p 527 1238 V 291 1432 a Fx(If)34 b(y)n(ou)g(w)n(an)n(t)f +-(to)h(put)h(a)f(sp)r(eci\014c)g(v)n(ersion)f(of)h(a)g(rep)r(ository)-7 ++b(THE)e(CONTENTS)h(OF)f(A)h(REPOSITOR)-7 b(Y)553 b Fx(63)p ++527 515 2392 4 v 415 725 a(If)26 b(y)n(ou)g(giv)n(e)f(the)h ++Fr(--apply-as)c Fx(\015ag,)j(darcs)g(will)h(use)g(sudo)f(to)h(apply)g ++(the)g(c)n(hanges)f(as)291 825 y(a)e(di\013eren)n(t)i(user.)35 ++b(This)24 b(can)g(b)r(e)h(useful)g(if)g(y)n(ou)e(w)n(an)n(t)h(to)g(set) ++g(up)h(a)f(system)g(where)g(sev)n(eral)291 925 y(users)33 ++b(can)h(mo)r(dify)h(the)g(same)e(rep)r(ository)-7 b(,)35 ++b(but)g(y)n(ou)f(don't)g(w)n(an)n(t)g(to)g(allo)n(w)f(them)i(full)291 ++1024 y(write)30 b(access.)46 b(This)31 b(isn't)h(secure)e(against)g ++(skilled)h(malicious)f(attac)n(k)n(ers,)g(but)h(at)g(least)291 ++1124 y(can)c(protect)g(y)n(our)f(rep)r(ository)g(from)i(clumsy)-7 ++b(,)27 b(inept)h(or)f(lazy)g(users.)p 527 1334 V 527 ++1408 a Fr(--context,)39 b(--tag,)i(--to-patch,)e(--to-match)p ++527 1463 V 291 1673 a Fx(If)34 b(y)n(ou)g(w)n(an)n(t)f(to)h(put)h(a)f ++(sp)r(eci\014c)g(v)n(ersion)f(of)h(a)g(rep)r(ository)-7 + b(,)35 b(y)n(ou)e(ha)n(v)n(e)g(a)h(few)g(options.)291 +-1531 y(Y)-7 b(ou)29 b(can)g(either)h(use)f(the)h Fr(--tag)p ++1773 y(Y)-7 b(ou)29 b(can)g(either)h(use)f(the)h Fr(--tag)p + Fx(,)e Fr(--to-patch)e Fx(or)j Fr(--to-match)c Fx(options,)30 +-b(or)e(y)n(ou)h(can)291 1631 y(use)c(the)h Fr(--context=FILENAM)o(E)20 ++b(or)e(y)n(ou)h(can)291 1873 y(use)c(the)h Fr(--context=FILENAM)o(E)20 + b Fx(option,)26 b(whic)n(h)f(sp)r(eci\014es)h(a)f(\014le)h(con)n +-(taining)f(a)g(con)n(text)291 1730 y(generated)31 b(with)i ++(taining)f(a)g(con)n(text)291 1972 y(generated)31 b(with)i + Fr(darcs)42 b(changes)e(--context)p Fx(.)49 b(This)32 +-b(allo)n(ws)f(y)n(ou)h(\(for)h(example\))f(to)291 1830 ++b(allo)n(ws)f(y)n(ou)h(\(for)h(example\))f(to)291 2072 + y(include)24 b(in)g(y)n(our)f(compiled)h(program)e(an)i(option)g(to)g +-(output)g(the)h(precise)e(v)n(ersion)g(of)h(the)291 1930 ++(output)g(the)h(precise)e(v)n(ersion)g(of)h(the)291 2172 + y(rep)r(ository)j(from)i(whic)n(h)f(it)i(w)n(as)e(generated,)g(and)h +-(then)g(p)r(erhaps)g(ask)f(users)g(to)h(include)291 2029 +-y(this)e(information)g(in)h(bug)g(rep)r(orts.)415 2132 ++(then)g(p)r(erhaps)g(ask)f(users)g(to)h(include)291 2271 ++y(this)e(information)g(in)h(bug)g(rep)r(orts.)415 2378 + y(Note)i(that)g(when)f(sp)r(ecifying)h Fr(--to-patch)25 + b Fx(or)k Fr(--to-match)p Fx(,)d(y)n(ou)j(ma)n(y)g(get)g(a)g(v)n(er-) +-291 2231 y(sion)j(of)i(y)n(our)e(co)r(de)h(that)g(has)g(nev)n(er)f(b)r ++291 2477 y(sion)j(of)i(y)n(our)e(co)r(de)h(that)g(has)g(nev)n(er)f(b)r + (efore)h(b)r(een)h(seen,)g(if)g(the)g(patc)n(hes)e(ha)n(v)n(e)g(gotten) +-291 2331 y(themselv)n(es)23 b(reordered.)34 b(If)24 b(y)n(ou)f(ev)n(er) ++291 2577 y(themselv)n(es)23 b(reordered.)34 b(If)24 b(y)n(ou)f(ev)n(er) + f(w)n(an)n(t)i(to)f(b)r(e)h(able)g(to)g(precisely)f(repro)r(duce)f(a)i +-(giv)n(en)291 2431 y(v)n(ersion,)i(y)n(ou)h(need)g(either)h(to)f(tag)g +-(it)h(or)f(create)g(a)g(con)n(text)g(\014le.)291 2720 ++(giv)n(en)291 2676 y(v)n(ersion,)i(y)n(ou)h(need)g(either)h(to)f(tag)g ++(it)h(or)f(create)g(a)g(con)n(text)g(\014le.)291 2987 + y Fq(6.5)135 b(Mo)t(difying)45 b(the)g(con)l(ten)l(ts)h(of)f(a)g(rep)t +-(ository)291 2924 y Fk(6.5.1)112 b(darcs)38 b(add)291 +-3083 y Fr(Usage:)j(darcs)g(add)i([OPTION]...)c() +-c(...)415 3185 y Fx(Options:)652 3282 y Fr(--boring)575 +-b Fx(don't)28 b(skip)g(b)r(oring)f(\014les)652 3382 y ++(ository)291 3198 y Fk(6.5.1)112 b(darcs)38 b(add)291 ++3364 y Fr(Usage:)j(darcs)g(add)i([OPTION]...)c() ++c(...)415 3471 y Fx(Options:)652 3572 y Fr(--boring)575 ++b Fx(don't)28 b(skip)g(b)r(oring)f(\014les)652 3671 y + Fr(--case-ok)531 b Fx(don't)28 b(refuse)f(to)h(add)f(\014les)h +-(di\013ering)f(only)g(in)h(case)465 3481 y Fr(-r)99 b(--recursive)1579 +-3489 y Fx(add)28 b(con)n(ten)n(ts)f(of)g(sub)r(directories)652 +-3581 y Fr(--not-recursive)1579 3589 y Fx(don't)h(add)g(con)n(ten)n(ts)f +-(of)g(sub)r(directories)652 3721 y Fr(--date-trick)1579 +-3668 y Fx(add)g(\014les)f(with)h(date)g(app)r(ended)g(to)f(a)n(v)n(oid) +-f(con\015ict)1579 3768 y([EXPERIMENT)-7 b(AL])652 3899 +-y Fr(--no-date-trick)1579 3846 y Fx(don't)28 b(use)g(exp)r(erimen)n +-(tal)f(date)g(app)r(ending)h(tric)n(k)1579 3946 y([DEF)-9 +-b(A)n(UL)i(T])652 4066 y Fr(--repodir)40 b(DIRECTORY)1579 +-4025 y Fx(sp)r(ecify)28 b(the)g(rep)r(ository)e(directory)h(in)h(whic)n +-(h)f(to)1579 4124 y(run)652 4194 y Fr(--dry-run)531 b +-Fx(don't)28 b(actually)f(tak)n(e)g(the)h(action)415 4293 +-y(Adv)-5 b(anced)28 b(options:)565 4394 y Fr(--umask)40 ++(di\013ering)f(only)g(in)h(case)465 3771 y Fr(-r)99 b(--recursive)1579 ++3779 y Fx(add)28 b(con)n(ten)n(ts)f(of)g(sub)r(directories)652 ++3871 y Fr(--not-recursive)1579 3879 y Fx(don't)h(add)g(con)n(ten)n(ts)f ++(of)g(sub)r(directories)652 4010 y Fr(--date-trick)1579 ++3958 y Fx(add)g(\014les)f(with)h(date)g(app)r(ended)g(to)f(a)n(v)n(oid) ++f(con\015ict)1579 4058 y([EXPERIMENT)-7 b(AL])652 4188 ++y Fr(--no-date-trick)1579 4136 y Fx(don't)28 b(use)g(exp)r(erimen)n ++(tal)f(date)g(app)r(ending)h(tric)n(k)1579 4236 y([DEF)-9 ++b(A)n(UL)i(T])652 4356 y Fr(--repodir)40 b(DIRECTORY)1579 ++4314 y Fx(sp)r(ecify)28 b(the)g(rep)r(ository)e(directory)h(in)h(whic)n ++(h)f(to)1579 4414 y(run)652 4484 y Fr(--dry-run)531 b ++Fx(don't)28 b(actually)f(tak)n(e)g(the)h(action)415 4586 ++y(Adv)-5 b(anced)28 b(options:)565 4692 y Fr(--umask)40 + b(UMASK)98 b Fx(sp)r(ecify)28 b(umask)f(to)g(use)h(when)f(writing)415 +-4498 y(Add)36 b(needs)f(to)g(b)r(e)h(called)f(whenev)n(er)f(y)n(ou)g ++4799 y(Add)36 b(needs)f(to)g(b)r(e)h(called)f(whenev)n(er)f(y)n(ou)g + (add)h(a)g(new)g(\014le)h(or)e(directory)g(to)h(y)n(our)291 +-4597 y(pro)5 b(ject.)39 b(Of)28 b(course,)g(it)h(also)e(needs)i(to)f(b) ++4899 y(pro)5 b(ject.)39 b(Of)28 b(course,)g(it)h(also)e(needs)i(to)f(b) + r(e)h(called)f(when)h(y)n(ou)f(\014rst)g(create)g(the)h(pro)5 +-b(ject,)291 4697 y(to)27 b(let)h(darcs)e(kno)n(w)h(whic)n(h)h(\014les)f +-(should)h(b)r(e)g(k)n(ept)f(trac)n(k)g(of.)415 4799 y(Darcs)h(will)h +-(refuse)g(to)g(add)f(a)h(\014le)g(or)f(directory)g(that)h(di\013ers)g +-(from)f(an)h(existing)f(one)291 4899 y(only)f(in)g(case.)36 +-b(This)27 b(is)h(b)r(ecause)f(the)g(HFS+)h(\014le)f(system)h(used)f(on) +-g(MacOS)g(treats)f(suc)n(h)291 4998 y(\014les)h(as)g(b)r(eing)h(one)f +-(and)g(the)h(same.)p eop end ++b(ject,)291 4998 y(to)27 b(let)h(darcs)e(kno)n(w)h(whic)n(h)h(\014les)f ++(should)h(b)r(e)g(k)n(ept)f(trac)n(k)g(of.)p eop end + %%Page: 64 64 + TeXDict begin 64 63 bop 739 282 a Fx(64)1378 b Fu(CHAPTER)27 +-b(6.)64 b(D)n(AR)n(CS)28 b(COMMANDS)863 515 y Fx(Y)-7 +-b(ou)32 b(can)g(not)g(add)f(sym)n(b)r(olic)h(links)f(to)h(darcs.)49 +-b(If)32 b(y)n(ou)f(try)h(to)f(do)h(that,)h(darcs)e(will)739 +-615 y(refuse)26 b(and)g(prin)n(t)g(an)g(error)e(message.)35 +-b(P)n(erhaps)24 b(y)n(ou)i(w)n(an)n(t)f(to)h(mak)n(e)f(sym)n(b)r(olic)h +-(links)g Fs(to)739 715 y Fx(the)i(\014les)f(in)h(darcs)f(instead?)p +-975 889 2392 4 v 975 964 a Fr(--boring)p 975 1019 V 863 +-1194 a Fx(By)i(default)g(darcs)f(will)h(ignore)e(all)i(\014les)f(that)h +-(matc)n(h)g(an)n(y)f(of)g(the)i(b)r(oring)e(patterns.)739 +-1294 y(If)g(y)n(ou)f(w)n(an)n(t)g(to)g(add)h(suc)n(h)f(a)g(\014le)h(an) +-n(yw)n(a)n(y)d(y)n(ou)i(m)n(ust)h(use)f(the)h Fr(--boring)d +-Fx(option.)p 975 1469 V 975 1543 a Fr(--date-trick)p +-975 1580 V 863 1755 a Fx(The)40 b Fr(--date-trick)34 ++b(6.)64 b(D)n(AR)n(CS)28 b(COMMANDS)863 515 y Fx(Darcs)h(will)g(refuse) ++f(to)h(add)g(a)f(\014le)h(or)f(directory)g(that)h(di\013ers)g(from)f ++(an)h(existing)g(one)739 615 y(only)e(in)g(case.)36 b(This)28 ++b(is)f(b)r(ecause)g(the)h(HFS+)f(\014le)h(system)f(used)g(on)g(MacOS)g ++(treats)g(suc)n(h)739 715 y(\014les)g(as)g(b)r(eing)h(one)f(and)h(the)g ++(same.)863 814 y(Y)-7 b(ou)32 b(can)g(not)g(add)f(sym)n(b)r(olic)h ++(links)f(to)h(darcs.)49 b(If)32 b(y)n(ou)f(try)h(to)f(do)h(that,)h ++(darcs)e(will)739 914 y(refuse)26 b(and)g(prin)n(t)g(an)g(error)e ++(message.)35 b(P)n(erhaps)24 b(y)n(ou)i(w)n(an)n(t)f(to)h(mak)n(e)f ++(sym)n(b)r(olic)h(links)g Fs(to)739 1013 y Fx(the)i(\014les)f(in)h ++(darcs)f(instead?)p 975 1185 2392 4 v 975 1260 a Fr(--boring)p ++975 1315 V 863 1487 a Fx(By)i(default)g(darcs)f(will)h(ignore)e(all)i ++(\014les)f(that)h(matc)n(h)g(an)n(y)f(of)g(the)i(b)r(oring)e(patterns.) ++739 1587 y(If)g(y)n(ou)f(w)n(an)n(t)g(to)g(add)h(suc)n(h)f(a)g(\014le)h ++(an)n(yw)n(a)n(y)d(y)n(ou)i(m)n(ust)h(use)f(the)h Fr(--boring)d ++Fx(option.)p 975 1759 V 975 1833 a Fr(--date-trick)p ++975 1870 V 863 2042 a Fx(The)40 b Fr(--date-trick)34 + b Fx(option)39 b(allo)n(ws)f(y)n(ou)h(to)g(enable)g(an)g(exp)r(erimen)n +-(tal)g(tric)n(k)f(to)739 1854 y(mak)n(e)e(add)g(con\015icts,)j(in)e ++(tal)g(tric)n(k)f(to)739 2141 y(mak)n(e)e(add)g(con\015icts,)j(in)e + (whic)n(h)f(t)n(w)n(o)g(users)g(eac)n(h)g(add)g(a)h(\014le)g(or)e +-(directory)h(with)h(the)739 1954 y(same)27 b(name,)g(less)g ++(directory)h(with)h(the)739 2241 y(same)27 b(name,)g(less)g + (problematic.)36 b(While)28 b(this)g(tric)n(k)f(is)g(completely)g +-(safe,)h(it)f(is)h(not)f(clear)739 2054 y(to)g(what)h(exten)n(t)g(it)g +-(is)f(b)r(ene\014cial.)739 2285 y Fk(6.5.2)112 b(darcs)38 +-b(remo)m(v)m(e)739 2438 y Fr(Usage:)j(darcs)h(remove)f([OPTION]...)e +-()c(...)863 2538 y Fx(Options:)1013 +-2661 y Fr(--repodir)h(DIRECTORY)1941 2620 y Fx(sp)r(ecify)28 ++(safe,)h(it)f(is)h(not)f(clear)739 2341 y(to)g(what)h(exten)n(t)g(it)g ++(is)f(b)r(ene\014cial.)739 2571 y Fk(6.5.2)112 b(darcs)38 ++b(remo)m(v)m(e)739 2725 y Fr(Usage:)j(darcs)h(remove)f([OPTION]...)e ++()c(...)863 2824 y Fx(Options:)1013 ++2948 y Fr(--repodir)h(DIRECTORY)1941 2906 y Fx(sp)r(ecify)28 + b(the)g(rep)r(ository)d(directory)i(in)h(whic)n(h)f(to)1941 +-2719 y(run)863 2785 y(Adv)-5 b(anced)28 b(options:)1013 +-2884 y Fr(--umask)41 b(UMASK)97 b Fx(sp)r(ecify)28 b(umask)f(to)h(use)f +-(when)h(writing)863 2984 y(Remo)n(v)n(e)e(should)g(b)r(e)h(called)f ++3006 y(run)863 3072 y(Adv)-5 b(anced)28 b(options:)1013 ++3170 y Fr(--umask)41 b(UMASK)97 b Fx(sp)r(ecify)28 b(umask)f(to)h(use)f ++(when)h(writing)863 3271 y(Remo)n(v)n(e)e(should)g(b)r(e)h(called)f + (when)h(y)n(ou)f(w)n(an)n(t)f(to)i(remo)n(v)n(e)e(a)h(\014le)g(from)h +-(y)n(our)e(pro)5 b(ject,)739 3084 y(but)40 b(don't)g(actually)f(w)n(an) ++(y)n(our)e(pro)5 b(ject,)739 3371 y(but)40 b(don't)g(actually)f(w)n(an) + n(t)f(to)i(delete)f(the)h(\014le.)73 b(Otherwise)39 b(just)h(delete)g +-(the)f(\014le)h(or)739 3184 y(directory)-7 b(,)34 b(and)f(darcs)g(will) ++(the)f(\014le)h(or)739 3470 y(directory)-7 b(,)34 b(and)f(darcs)g(will) + h(notice)f(that)h(it)g(has)f(b)r(een)h(remo)n(v)n(ed.)53 +-b(Be)34 b(a)n(w)n(are)d(that)j(the)739 3283 y(\014le)c(WILL)f(b)r(e)h ++b(Be)34 b(a)n(w)n(are)d(that)j(the)739 3570 y(\014le)c(WILL)f(b)r(e)h + (deleted)g(from)g(an)n(y)f(other)g(cop)n(y)f(of)i(the)g(rep)r(ository)e +-(to)h(whic)n(h)h(y)n(ou)f(later)739 3383 y(apply)e(the)h(patc)n(h.)739 +-3614 y Fk(6.5.3)112 b(darcs)38 b(m)m(v)739 3767 y Fr(Usage:)j(darcs)h +-(mv)g([OPTION]...)d([FILE)j(or)h(DIRECTORY]...)863 3867 +-y Fx(Options:)1013 3961 y Fr(--case-ok)532 b Fx(don't)27 ++(to)h(whic)n(h)h(y)n(ou)f(later)739 3670 y(apply)e(the)h(patc)n(h.)739 ++3900 y Fk(6.5.3)112 b(darcs)38 b(m)m(v)739 4053 y Fr(Usage:)j(darcs)h ++(mv)g([OPTION]...)d([FILE)j(or)h(DIRECTORY]...)863 4153 ++y Fx(Options:)1013 4247 y Fr(--case-ok)532 b Fx(don't)27 + b(refuse)h(to)f(add)h(\014les)f(di\013ering)g(only)h(in)f(case)1013 +-4090 y Fr(--repodir)40 b(DIRECTORY)1941 4049 y Fx(sp)r(ecify)28 ++4377 y Fr(--repodir)40 b(DIRECTORY)1941 4335 y Fx(sp)r(ecify)28 + b(the)g(rep)r(ository)d(directory)i(in)h(whic)n(h)f(to)1941 +-4148 y(run)863 4214 y(Adv)-5 b(anced)28 b(options:)1013 +-4313 y Fr(--umask)41 b(UMASK)97 b Fx(sp)r(ecify)28 b(umask)f(to)h(use)f +-(when)h(writing)863 4413 y(Darcs)e(m)n(v)g(needs)g(to)h(b)r(e)f(called) ++4434 y(run)863 4500 y(Adv)-5 b(anced)28 b(options:)1013 ++4599 y Fr(--umask)41 b(UMASK)97 b Fx(sp)r(ecify)28 b(umask)f(to)h(use)f ++(when)h(writing)863 4700 y(Darcs)e(m)n(v)g(needs)g(to)h(b)r(e)f(called) + g(whenev)n(er)g(y)n(ou)g(w)n(an)n(t)f(to)i(mo)n(v)n(e)e(\014les)h(or)g +-(directories.)739 4513 y(Unlik)n(e)e(remo)n(v)n(e,)e(m)n(v)i(actually)f ++(directories.)739 4799 y(Unlik)n(e)e(remo)n(v)n(e,)e(m)n(v)i(actually)f + (p)r(erforms)g(the)h(mo)n(v)n(e)e(itself)i(in)g(y)n(our)f(w)n(orking)e +-(cop)n(y)-7 b(.)35 b(This)739 4613 y(is)26 b(wh)n(y)g(\\m)n(v")e(isn't) ++(cop)n(y)-7 b(.)35 b(This)739 4899 y(is)26 b(wh)n(y)g(\\m)n(v")e(isn't) + j(called)f(\\mo)n(v)n(e",)e(since)i(it)g(is)g(really)f(almost)h(equiv) +--5 b(alen)n(t)26 b(to)g(the)g(unix)739 4712 y(command)h(\\m)n(v".)p +-975 4887 V 975 4962 a Fr(--case-ok)p 975 4998 V eop end ++-5 b(alen)n(t)26 b(to)g(the)g(unix)739 4998 y(command)h(\\m)n(v".)p ++eop end + %%Page: 65 65 + TeXDict begin 65 64 bop 291 282 a Fu(6.5.)63 b(MODIFYING)29 +-b(THE)e(CONTENTS)h(OF)f(A)h(REPOSITOR)-7 b(Y)553 b Fx(65)415 +-515 y(Darcs)27 b(m)n(v)g(will)g(b)n(y)g(default)h(refuse)f(to)g(rename) +-g(a)g(\014le)g(if)h(there)f(already)f(exists)h(a)g(\014le)291 +-615 y(ha)n(ving)e(the)h(same)g(name)g(apart)g(from)g(case.)35 ++b(THE)e(CONTENTS)h(OF)f(A)h(REPOSITOR)-7 b(Y)553 b Fx(65)p ++527 515 2392 4 v 527 590 a Fr(--case-ok)p 527 627 V 415 ++813 a Fx(Darcs)27 b(m)n(v)g(will)g(b)n(y)g(default)h(refuse)f(to)g ++(rename)g(a)g(\014le)g(if)h(there)f(already)f(exists)h(a)g(\014le)291 ++913 y(ha)n(ving)e(the)h(same)g(name)g(apart)g(from)g(case.)35 + b(This)26 b(is)h(b)r(ecause)f(doing)f(so)h(could)g(create)f(a)291 +-715 y(rep)r(ository)f(that)h(could)h(not)g(b)r(e)g(used)f(on)h(\014le)f +-(systems)g(that)h(are)f(case)g(insensitiv)n(e)g(\(suc)n(h)291 +-814 y(as)i(Apple's)g(HFS+\).)38 b(Y)-7 b(ou)28 b(can)f(o)n(v)n(erride)e +-(this)j(b)n(y)f(with)h(the)g(\015ag)f Fr(--case-ok)p +-Fx(.)291 1044 y Fk(6.5.4)112 b(darcs)38 b(replace)291 +-1197 y Fr(Usage:)j(darcs)g(replace)g([OPTION]...)e()i()h +-()f(...)415 1297 y Fx(Options:)652 1391 y Fr(--token-chars)d +-("[CHARS]")1754 1399 y Fx(de\014ne)28 b(tok)n(en)f(to)g(con)n(tain)g +-(these)h(c)n(haracters)465 1528 y Fr(-f)99 b(--force)1754 +-1479 y Fx(pro)r(ceed)27 b(with)h(replace)e(ev)n(en)i(if)g('new')f(tok)n +-(en)1754 1578 y(already)f(exists)652 1664 y Fr(--no-force)662 ++1012 y(rep)r(ository)f(that)h(could)h(not)g(b)r(e)g(used)f(on)h(\014le) ++f(systems)g(that)h(are)f(case)g(insensitiv)n(e)g(\(suc)n(h)291 ++1112 y(as)i(Apple's)g(HFS+\).)38 b(Y)-7 b(ou)28 b(can)f(o)n(v)n(erride) ++e(this)j(b)n(y)f(with)h(the)g(\015ag)f Fr(--case-ok)p ++Fx(.)291 1349 y Fk(6.5.4)112 b(darcs)38 b(replace)291 ++1504 y Fr(Usage:)j(darcs)g(replace)g([OPTION]...)e()i()h ++()f(...)415 1605 y Fx(Options:)652 1700 y Fr(--token-chars)d ++("[CHARS]")1754 1708 y Fx(de\014ne)28 b(tok)n(en)f(to)g(con)n(tain)g ++(these)h(c)n(haracters)465 1837 y Fr(-f)99 b(--force)1754 ++1787 y Fx(pro)r(ceed)27 b(with)h(replace)e(ev)n(en)i(if)g('new')f(tok)n ++(en)1754 1887 y(already)f(exists)652 1973 y Fr(--no-force)662 + b Fx(don't)28 b(force)e(the)i(replace)f(if)h(it)g(lo)r(oks)f(scary)652 +-1793 y Fr(--repodir)40 b(DIRECTORY)1754 1752 y Fx(sp)r(ecify)28 ++2102 y Fr(--repodir)40 b(DIRECTORY)1754 2060 y Fx(sp)r(ecify)28 + b(the)g(rep)r(ository)e(directory)g(in)i(whic)n(h)f(to)1754 +-1851 y(run)415 1917 y(Adv)-5 b(anced)28 b(options:)565 +-2011 y Fr(--ignore-times)1274 2019 y Fx(don't)g(trust)g(the)g(\014le)g +-(mo)r(di\014cation)f(times)565 2111 y Fr(--umask)40 b(UMASK)141 ++2160 y(run)415 2227 y(Adv)-5 b(anced)28 b(options:)565 ++2322 y Fr(--ignore-times)1274 2330 y Fx(don't)g(trust)g(the)g(\014le)g ++(mo)r(di\014cation)f(times)565 2422 y Fr(--umask)40 b(UMASK)141 + b Fx(sp)r(ecify)28 b(umask)f(to)h(use)f(when)h(writing)415 +-2207 y(Replace)37 b(allo)n(ws)f(y)n(ou)h(to)g(c)n(hange)f(a)h(sp)r ++2518 y(Replace)37 b(allo)n(ws)f(y)n(ou)h(to)g(c)n(hange)f(a)h(sp)r + (eci\014ed)g(tok)n(en)g(wherev)n(er)f(it)i(o)r(ccurs)e(in)i(the)291 +-2306 y(sp)r(eci\014ed)h(\014les.)71 b(The)39 b(replace)f(is)h(enco)r ++2618 y(sp)r(eci\014ed)h(\014les.)71 b(The)39 b(replace)f(is)h(enco)r + (ded)h(in)f(a)g(sp)r(ecial)f(patc)n(h)h(and)g(will)g(merge)g(as)291 +-2406 y(exp)r(ected)23 b(with)g(other)g(patc)n(hes.)34 ++2718 y(exp)r(ected)23 b(with)g(other)g(patc)n(hes.)34 + b(T)-7 b(ok)n(ens)22 b(here)h(are)e(de\014ned)j(b)n(y)e(a)h(regexp)f +-(sp)r(ecifying)h(the)291 2506 y(c)n(haracters)i(whic)n(h)i(are)g(allo)n ++(sp)r(ecifying)h(the)291 2817 y(c)n(haracters)i(whic)n(h)i(are)g(allo)n + (w)n(ed.)35 b(By)28 b(default)g(a)f(tok)n(en)g(corresp)r(onds)f(to)h(a) +-g(C)h(iden)n(ti\014er.)415 2605 y(The)37 b(default)g(regexp)f(is)h ++g(C)h(iden)n(ti\014er.)415 2918 y(The)37 b(default)g(regexp)f(is)h + Fr([A-Za-z_0-9])p Fx(\),)e(and)h(if)i(one)e(of)h(y)n(our)f(tok)n(ens)g +-(con)n(tains)291 2705 y(a)41 b(`)p Fr(-)p Fx(')g(or)f(`)p ++(con)n(tains)291 3017 y(a)41 b(`)p Fr(-)p Fx(')g(or)f(`)p + Fr(.)p Fx(',)45 b(y)n(ou)c(will)g(then)h(\(b)n(y)g(default\))g(get)f +-(the)h(\\\014lename")e(regexp,)k(whic)n(h)d(is)291 2805 +-y Fr([A-Za-z_0-9\\-\\.)o(])p Fx(.)p 527 2972 2392 4 v +-527 3047 a Fr(--token-chars)p 527 3083 V 415 3251 a Fx(If)f(y)n(ou)e +-(prefer)h(to)g(c)n(ho)r(ose)f(a)h(di\013eren)n(t)g(set)h(of)f(c)n +-(haracters)e(to)i(de\014ne)g(y)n(our)g(tok)n(en)291 3350 +-y(\(p)r(erhaps)44 b(b)r(ecause)g(y)n(ou)f(are)h(programming)e(in)j +-(some)f(other)g(language\),)j(y)n(ou)d(ma)n(y)291 3450 +-y(do)39 b(so)g(with)i(the)f Fr(--token-chars)35 b Fx(option.)73 +-b(Y)-7 b(ou)40 b(ma)n(y)f(prefer)h(to)f(de\014ne)i(tok)n(ens)e(in)291 +-3550 y(terms)25 b(of)g(delimiting)h(c)n(haracters)d(instead)j(of)f +-(allo)n(w)n(ed)f(c)n(haracters)f(using)j(a)f(\015ag)f(suc)n(h)i(as)291 +-3649 y Fr(--token-chars)38 b('[^)k(\\n\\t]')p Fx(,)26 +-b(whic)n(h)j(w)n(ould)f(de\014ne)g(a)g(tok)n(en)g(as)g(b)r(eing)h +-(white-space)291 3749 y(delimited.)415 3848 y(If)19 b(y)n(ou)f(do)g(c)n +-(ho)r(ose)f(a)h(non-default)g(tok)n(en)g(de\014nition,)i(I)f(recommend) +-f(using)g Fr(_darcs/prefs/de)o(fau)o(lt)o(s)291 3948 +-y Fx(to)31 b(alw)n(a)n(ys)e(sp)r(ecify)i(the)h(same)e ++(the)h(\\\014lename")e(regexp,)k(whic)n(h)d(is)291 3117 ++y Fr([A-Za-z_0-9\\-\\.)o(])p Fx(.)p 527 3303 V 527 3378 ++a Fr(--token-chars)p 527 3415 V 415 3601 a Fx(If)f(y)n(ou)e(prefer)h ++(to)g(c)n(ho)r(ose)f(a)h(di\013eren)n(t)g(set)h(of)f(c)n(haracters)e ++(to)i(de\014ne)g(y)n(our)g(tok)n(en)291 3701 y(\(p)r(erhaps)44 ++b(b)r(ecause)g(y)n(ou)f(are)h(programming)e(in)j(some)f(other)g ++(language\),)j(y)n(ou)d(ma)n(y)291 3800 y(do)39 b(so)g(with)i(the)f ++Fr(--token-chars)35 b Fx(option.)73 b(Y)-7 b(ou)40 b(ma)n(y)f(prefer)h ++(to)f(de\014ne)i(tok)n(ens)e(in)291 3900 y(terms)25 b(of)g(delimiting)h ++(c)n(haracters)d(instead)j(of)f(allo)n(w)n(ed)f(c)n(haracters)f(using)j ++(a)f(\015ag)f(suc)n(h)i(as)291 3999 y Fr(--token-chars)38 ++b('[^)k(\\n\\t]')p Fx(,)26 b(whic)n(h)j(w)n(ould)f(de\014ne)g(a)g(tok)n ++(en)g(as)g(b)r(eing)h(white-space)291 4099 y(delimited.)415 ++4200 y(If)19 b(y)n(ou)f(do)g(c)n(ho)r(ose)f(a)h(non-default)g(tok)n(en) ++g(de\014nition,)i(I)f(recommend)f(using)g Fr(_darcs/prefs/de)o(fau)o ++(lt)o(s)291 4299 y Fx(to)31 b(alw)n(a)n(ys)e(sp)r(ecify)i(the)h(same)e + Fr(--token-chars)p Fx(,)d(since)k(y)n(our)f(replace)g(patc)n(hes)g +-(will)i(b)r(e)291 4048 y(b)r(etter)f(b)r(eha)n(v)n(ed)f(\(in)h(terms)g ++(will)i(b)r(e)291 4399 y(b)r(etter)f(b)r(eha)n(v)n(ed)f(\(in)h(terms)g + (of)g(comm)n(utation)f(and)h(merges\))f(if)h(they)g(ha)n(v)n(e)f(tok)n +-(ens)g(de-)291 4147 y(\014ned)e(in)f(the)h(same)f(w)n(a)n(y)-7 +-b(.)415 4247 y(When)31 b(using)e(darcs)g(replace,)g(the)i(\\new")e(tok) ++(ens)g(de-)291 4499 y(\014ned)e(in)f(the)h(same)f(w)n(a)n(y)-7 ++b(.)415 4599 y(When)31 b(using)e(darcs)g(replace,)g(the)i(\\new")e(tok) + n(en)g(ma)n(y)g(not)h(already)e(app)r(ear)h(in)i(the)291 +-4347 y(\014le|if)f(that)h(is)f(the)g(case,)g(the)g(replace)f(c)n(hange) ++4699 y(\014le|if)f(that)h(is)f(the)g(case,)g(the)g(replace)f(c)n(hange) + g(w)n(ould)h(not)g(b)r(e)g(in)n(v)n(ertible.)44 b(This)30 +-b(limi-)291 4446 y(tation)d(holds)g(only)g(on)h(the)g(already-recorded) +-c(v)n(ersion)i(of)i(the)g(\014le.)415 4546 y(There)g(is)h(a)f(p)r(oten) ++b(limi-)291 4798 y(tation)d(holds)g(only)g(on)h(the)g(already-recorded) ++c(v)n(ersion)i(of)i(the)g(\014le.)415 4899 y(There)g(is)h(a)f(p)r(oten) + n(tially)h(confusing)f(di\013erence,)h(ho)n(w)n(ev)n(er,)e(when)i(a)g +-(replace)e(is)i(used)291 4645 y(to)e(mak)n(e)g(another)f(replace)h(p)r +-(ossible:)291 4799 y Fr(\045)43 b(darcs)e(replace)g(newtoken)f(aaack)i +-(./foo.c)291 4899 y(\045)h(darcs)e(replace)g(oldtoken)f(newtoken)h +-(./foo.c)291 4998 y(\045)i(darcs)e(record)p eop end ++(replace)e(is)i(used)291 4998 y(to)e(mak)n(e)g(another)f(replace)h(p)r ++(ossible:)p eop end + %%Page: 66 66 + TeXDict begin 66 65 bop 739 282 a Fx(66)1378 b Fu(CHAPTER)27 +-b(6.)64 b(D)n(AR)n(CS)28 b(COMMANDS)739 515 y Fx(will)h(b)r(e)h(v)-5 ++b(6.)64 b(D)n(AR)n(CS)28 b(COMMANDS)739 515 y Fr(\045)43 ++b(darcs)f(replace)e(newtoken)h(aaack)g(./foo.c)739 615 ++y(\045)i(darcs)f(replace)e(oldtoken)h(newtoken)f(./foo.c)739 ++715 y(\045)j(darcs)f(record)739 932 y Fx(will)29 b(b)r(e)h(v)-5 + b(alid,)29 b(ev)n(en)f(if)i Fr(newtoken)c Fx(and)j Fr(oldtoken)c + Fx(are)j(b)r(oth)i(presen)n(t)e(in)h(the)h(recorded)739 +-615 y(v)n(ersion)c(of)h(fo)r(o.c,)h(while)g(the)g(sequence)739 +-762 y Fr(\045)43 b([manually)d(edit)i(foo.c)f(replacing)f(newtoken)h +-(with)g(aaack])739 861 y(\045)i(darcs)f(replace)e(oldtoken)h(newtoken)f +-(./foo.c)739 1008 y Fx(will)31 b(fail)f(b)r(ecause)h(\\newtok)n(en")e ++1032 y(v)n(ersion)c(of)h(fo)r(o.c,)h(while)g(the)g(sequence)739 ++1267 y Fr(\045)43 b([manually)d(edit)i(foo.c)f(replacing)f(newtoken)h ++(with)g(aaack])739 1367 y(\045)i(darcs)f(replace)e(oldtoken)h(newtoken) ++f(./foo.c)739 1585 y Fx(will)31 b(fail)f(b)r(ecause)h(\\newtok)n(en")e + (still)h(exists)h(in)g(the)g(recorded)e(v)n(ersion)g(of)h +-Fr(foo.c)p Fx(.)44 b(The)739 1108 y(reason)35 b(for)h(the)h ++Fr(foo.c)p Fx(.)44 b(The)739 1684 y(reason)35 b(for)h(the)h + (di\013erence)g(is)g(that)g(when)g(recording,)g(a)f(\\replace")f(patc)n +-(h)i(alw)n(a)n(ys)d(is)739 1208 y(recorded)k Fs(b)l(efor)l(e)46 ++(h)i(alw)n(a)n(ys)d(is)739 1784 y(recorded)k Fs(b)l(efor)l(e)46 + b Fx(an)n(y)38 b(man)n(ual)h(c)n(hanges,)i(whic)n(h)e(is)g(usually)f +-(what)i(y)n(ou)e(w)n(an)n(t,)j(since)739 1307 y(often)d(y)n(ou)f(will)h ++(what)i(y)n(ou)e(w)n(an)n(t,)j(since)739 1883 y(often)d(y)n(ou)f(will)h + (in)n(tro)r(duce)g(new)g(o)r(ccurrences)e(of)i(the)h(\\newtok)n(en")d +-(in)i(y)n(our)f(man)n(ual)739 1407 y(c)n(hanges.)53 b(In)34 ++(in)i(y)n(our)f(man)n(ual)739 1983 y(c)n(hanges.)53 b(In)34 + b(con)n(trast,)f(m)n(ultiple)h(\\replace")e(c)n(hanges)g(are)g +-(recorded)g(in)i(the)g(order)e(in)739 1507 y(whic)n(h)27 +-b(they)h(w)n(ere)f(made.)739 1777 y Fq(6.6)135 b(W)-11 +-b(orking)45 b(with)h(c)l(hanges)739 1975 y Fk(6.6.1)112 +-b(darcs)38 b(record)739 2129 y Fr(Usage:)j(darcs)h(record)f +-([OPTION]...)e([FILE)i(or)i(DIRECTORY]...)863 2228 y +-Fx(Options:)913 2323 y Fr(-m)99 b(--patch-name)39 b(PATCHNAME)139 +-b Fx(name)28 b(of)f(patc)n(h)913 2422 y Fr(-A)99 b(--author)40 +-b(EMAIL)490 b Fx(sp)r(ecify)28 b(author)f(id)1100 2522 ++(recorded)g(in)i(the)g(order)e(in)739 2083 y(whic)n(h)27 ++b(they)h(w)n(ere)f(made.)739 2449 y Fq(6.6)135 b(W)-11 ++b(orking)45 b(with)h(c)l(hanges)739 2679 y Fk(6.6.1)112 ++b(darcs)38 b(record)739 2865 y Fr(Usage:)j(darcs)h(record)f ++([OPTION]...)e([FILE)i(or)i(DIRECTORY]...)863 2982 y ++Fx(Options:)913 3093 y Fr(-m)99 b(--patch-name)39 b(PATCHNAME)139 ++b Fx(name)28 b(of)f(patc)n(h)913 3193 y Fr(-A)99 b(--author)40 ++b(EMAIL)490 b Fx(sp)r(ecify)28 b(author)f(id)1100 3292 + y Fr(--no-test)706 b Fx(don't)28 b(run)f(the)h(test)g(script)1100 +-2621 y Fr(--test)838 b Fx(run)28 b(the)g(test)f(script)1100 +-2721 y Fr(--leave-test-dir)o(ect)o(or)o(y)137 b Fx(don't)28 +-b(remo)n(v)n(e)e(the)i(test)g(directory)1100 2821 y Fr ++3392 y Fr(--test)838 b Fx(run)28 b(the)g(test)f(script)1100 ++3492 y Fr(--leave-test-dir)o(ect)o(or)o(y)137 b Fx(don't)28 ++b(remo)n(v)n(e)e(the)i(test)g(directory)1100 3591 y Fr + (--remove-test-di)o(rec)o(to)o(ry)93 b Fx(remo)n(v)n(e)26 +-b(the)i(test)g(directory)913 2920 y Fr(-a)99 b(--all)882 ++b(the)i(test)g(directory)913 3691 y Fr(-a)99 b(--all)882 + b Fx(answ)n(er)26 b(y)n(es)h(to)h(all)f(patc)n(hes)1100 +-3020 y Fr(--pipe)838 b Fx(exp)r(ect)28 b(to)g(receiv)n(e)e(input)i +-(from)g(a)f(pip)r(e)913 3120 y Fr(-i)99 b(--interactive)530 +-b Fx(prompt)28 b(user)f(in)n(teractiv)n(ely)1100 3219 ++3790 y Fr(--pipe)838 b Fx(exp)r(ect)28 b(to)g(receiv)n(e)e(input)i ++(from)g(a)f(pip)r(e)913 3890 y Fr(-i)99 b(--interactive)530 ++b Fx(prompt)28 b(user)f(in)n(teractiv)n(ely)1100 3990 + y Fr(--ask-deps)662 b Fx(ask)27 b(for)g(extra)g(dep)r(endencies)1100 +-3319 y Fr(--no-ask-deps)530 b Fx(don't)28 b(ask)f(for)g(extra)f(dep)r +-(endencies)1100 3418 y Fr(--edit-long-comm)o(ent)267 ++4089 y Fr(--no-ask-deps)530 b Fx(don't)28 b(ask)f(for)g(extra)f(dep)r ++(endencies)1100 4189 y Fr(--edit-long-comm)o(ent)267 + b Fx(edit)28 b(the)g(long)f(commen)n(t)h(b)n(y)f(default)1100 +-3518 y Fr(--skip-long-comm)o(ent)267 b Fx(don't)28 b(giv)n(e)f(a)g +-(long)g(commen)n(t)1100 3618 y Fr(--prompt-long-co)o(mme)o(nt)180 ++4289 y Fr(--skip-long-comm)o(ent)267 b Fx(don't)28 b(giv)n(e)f(a)g ++(long)g(commen)n(t)1100 4388 y Fr(--prompt-long-co)o(mme)o(nt)180 + b Fx(prompt)26 b(for)g(whether)h(to)f(edit)h(the)g(long)f(commen)n(t) +-913 3749 y Fr(-l)99 b(--look-for-adds)2202 3710 y Fx(lo)r(ok)27 ++913 4520 y Fr(-l)99 b(--look-for-adds)2202 4480 y Fx(lo)r(ok)27 + b(for)g(\(non-b)r(oring\))g(\014les)g(that)h(could)g(b)r(e)2202 +-3809 y(added)1100 3919 y Fr(--dont-look-for-)o(add)o(s)2202 +-3867 y Fx(don't)g(lo)r(ok)f(for)g(an)n(y)g(\014les)g(that)h(could)f(b)r +-(e)h(added)2202 3967 y([DEF)-9 b(A)n(UL)i(T])1100 4087 +-y Fr(--repodir)40 b(DIRECTORY)2202 4045 y Fx(sp)r(ecify)28 ++4580 y(added)1100 4690 y Fr(--dont-look-for-)o(add)o(s)2202 ++4638 y Fx(don't)g(lo)r(ok)f(for)g(an)n(y)g(\014les)g(that)h(could)f(b)r ++(e)h(added)2202 4737 y([DEF)-9 b(A)n(UL)i(T])1100 4857 ++y Fr(--repodir)40 b(DIRECTORY)2202 4816 y Fx(sp)r(ecify)28 + b(the)g(rep)r(ository)e(directory)g(in)i(whic)n(h)g(to)2202 +-4145 y(run)863 4211 y(Adv)-5 b(anced)28 b(options:)1013 +-4305 y Fr(--logfile)40 b(FILE)185 b Fx(giv)n(e)27 b(patc)n(h)g(name)g +-(and)h(commen)n(t)f(in)h(\014le)1013 4405 y Fr(--delete-logfile)93 +-b Fx(delete)28 b(the)g(log\014le)f(when)g(done)1013 4504 +-y Fr(--compress)357 b Fx(create)27 b(compressed)f(patc)n(hes)1013 +-4604 y Fr(--dont-compress)137 b Fx(don't)28 b(create)e(compressed)h +-(patc)n(hes)1013 4703 y Fr(--ignore-times)1810 4711 y +-Fx(don't)h(trust)f(the)h(\014le)g(mo)r(di\014cation)f(times)1013 +-4803 y Fr(--umask)41 b(UMASK)228 b Fx(sp)r(ecify)28 b(umask)f(to)g(use) +-h(when)g(writing)863 4899 y(If)37 b(y)n(ou)e(pro)n(vide)g(one)g(or)g +-(more)h(\014les)f(or)g(directories)g(as)g(additional)h(argumen)n(ts)e +-(to)739 4998 y(record,)26 b(y)n(ou)g(will)i(only)f(b)r(e)g(prompted)g +-(to)g(c)n(hanges)f(in)i(those)f(\014les)g(or)f(directories.)35 +-b(Eac)n(h)p eop end ++4915 y(run)863 4998 y(Adv)-5 b(anced)28 b(options:)p ++eop end + %%Page: 67 67 + TeXDict begin 67 66 bop 291 282 a Fu(6.6.)63 b(W)n(ORKING)28 +-b(WITH)g(CHANGES)1450 b Fx(67)291 515 y(patc)n(h)33 b(is)h(giv)n(en)f +-(a)g(name,)j(whic)n(h)d(t)n(ypically)h(w)n(ould)f(consist)g(of)h(a)g +-(brief)g(description)f(of)291 615 y(the)28 b(c)n(hanges.)35 +-b(This)28 b(name)f(is)h(later)f(used)h(to)f(describ)r(e)h(the)g(patc)n +-(h.)36 b(The)28 b(name)g(m)n(ust)f(\014t)291 715 y(on)f(one)h(line)g +-(\(i.e.)h(cannot)e(ha)n(v)n(e)g(an)n(y)g(em)n(b)r(edded)i(newlines\).) +-36 b(If)28 b(y)n(ou)e(ha)n(v)n(e)g(more)g(to)h(sa)n(y)-7 +-b(,)291 814 y(stic)n(k)27 b(it)h(in)g(the)g(log.)415 +-919 y(The)34 b(patc)n(h)f(is)h(also)f(\015agged)f(with)j(the)f(author)f +-(of)g(the)i(c)n(hange,)f(tak)n(en)f(b)n(y)g(default)291 +-1019 y(from)k(the)i Fr(DARCS_EMAIL)34 b Fx(en)n(vironmen)n(t)j(v)-5 ++b(WITH)g(CHANGES)1450 b Fx(67)565 502 y Fr(--logfile)39 ++b(FILE)752 b Fx(giv)n(e)27 b(patc)n(h)g(name)h(and)f(commen)n(t)g(in)h ++(\014le)565 602 y Fr(--delete-logfil)o(e)660 b Fx(delete)28 ++b(the)g(log\014le)f(when)h(done)565 701 y Fr(--compress)923 ++b Fx(create)27 b(compressed)f(patc)n(hes)565 801 y Fr(--dont-compress) ++703 b Fx(don't)28 b(create)f(compressed)f(patc)n(hes)565 ++901 y Fr(--ignore-times)1928 909 y Fx(don't)i(trust)g(the)g(\014le)f ++(mo)r(di\014cation)h(times)565 1000 y Fr(--umask)40 b(UMASK)795 ++b Fx(sp)r(ecify)28 b(umask)f(to)h(use)f(when)h(writing)565 ++1100 y Fr(--set-scripts-e)o(xec)o(ut)o(ab)o(le)311 b ++Fx(mak)n(e)27 b(scripts)g(executable)565 1199 y Fr(--dont-set-scri)o ++(pts)o(-e)o(xe)o(cut)o(ab)o(le)93 b Fx(don't)28 b(mak)n(e)f(scripts)g ++(executable)415 1295 y(If)36 b(y)n(ou)g(pro)n(vide)e(one)i(or)f(more)g ++(\014les)h(or)f(directories)g(as)g(additional)g(argumen)n(ts)g(to)291 ++1395 y(record,)25 b(y)n(ou)i(will)g(only)g(b)r(e)h(prompted)f(to)g(c)n ++(hanges)f(in)h(those)g(\014les)g(or)g(directories.)35 ++b(Eac)n(h)291 1494 y(patc)n(h)e(is)h(giv)n(en)f(a)g(name,)j(whic)n(h)d ++(t)n(ypically)h(w)n(ould)f(consist)g(of)h(a)g(brief)g(description)f(of) ++291 1594 y(the)28 b(c)n(hanges.)35 b(This)28 b(name)f(is)h(later)f ++(used)h(to)f(describ)r(e)h(the)g(patc)n(h.)36 b(The)28 ++b(name)g(m)n(ust)f(\014t)291 1694 y(on)f(one)h(line)g(\(i.e.)h(cannot)e ++(ha)n(v)n(e)g(an)n(y)g(em)n(b)r(edded)i(newlines\).)36 ++b(If)28 b(y)n(ou)e(ha)n(v)n(e)g(more)g(to)h(sa)n(y)-7 ++b(,)291 1793 y(stic)n(k)27 b(it)h(in)g(the)g(log.)415 ++1893 y(The)34 b(patc)n(h)f(is)h(also)f(\015agged)f(with)j(the)f(author) ++f(of)g(the)i(c)n(hange,)f(tak)n(en)f(b)n(y)g(default)291 ++1993 y(from)k(the)i Fr(DARCS_EMAIL)34 b Fx(en)n(vironmen)n(t)j(v)-5 + b(ariable,)40 b(and)e(if)h(that)f(do)r(esn't)g(exist,)j(from)291 +-1119 y(the)36 b Fr(EMAIL)d Fx(en)n(vironmen)n(t)i(v)-5 ++2092 y(the)36 b Fr(EMAIL)d Fx(en)n(vironmen)n(t)i(v)-5 + b(ariable.)60 b(The)36 b(date)g(on)f(whic)n(h)h(the)g(patc)n(h)g(w)n +-(as)e(recorded)291 1218 y(is)h(also)f(included.)59 b(Curren)n(tly)34 ++(as)e(recorded)291 2192 y(is)h(also)f(included.)59 b(Curren)n(tly)34 + b(there)h(is)g(no)g(pro)n(vision)e(for)i(k)n(eeping)f(trac)n(k)g(of)h +-(when)g(a)291 1318 y(patc)n(h)c(en)n(ters)f(a)h(giv)n(en)f(rep)r ++(when)g(a)291 2292 y(patc)n(h)c(en)n(ters)f(a)h(giv)n(en)f(rep)r + (ository)-7 b(.)46 b(Finally)-7 b(,)33 b(eac)n(h)d(c)n(hangeset)g +-(should)h(ha)n(v)n(e)f(a)h(full)h(log)291 1418 y(\(whic)n(h)k(ma)n(y)g ++(should)h(ha)n(v)n(e)f(a)h(full)h(log)291 2391 y(\(whic)n(h)k(ma)n(y)g + (b)r(e)g(empt)n(y\).)63 b(This)37 b(log)e(is)h(for)g(detailed)g(notes)g +-(whic)n(h)g(are)f(to)r(o)h(length)n(y)291 1517 y(to)c(\014t)h(in)g(the) ++(whic)n(h)g(are)f(to)r(o)h(length)n(y)291 2491 y(to)c(\014t)h(in)g(the) + g(name.)52 b(If)33 b(y)n(ou)f(answ)n(er)f(that)i(y)n(ou)f(do)h(w)n(an)n +-(t)f(to)g(create)g(a)g(commen)n(t)h(\014le,)291 1617 ++(t)f(to)g(create)g(a)g(commen)n(t)h(\014le,)291 2590 + y(darcs)27 b(will)i(op)r(en)g(an)f(editor)h(so)f(that)h(y)n(ou)f(can)g + (en)n(ter)g(the)h(commen)n(t)g(in.)40 b(The)29 b(c)n(hoice)f(of)291 +-1716 y(editor)i(pro)r(ceeds)h(as)f(follo)n(ws.)47 b(If)32 ++2690 y(editor)i(pro)r(ceeds)h(as)f(follo)n(ws.)47 b(If)32 + b(one)f(of)g(the)h Fr($DARCS_EDITOR)p Fx(,)26 b Fr($VISUAL)i +-Fx(or)j Fr($EDITOR)291 1816 y Fx(en)n(vironmen)n(t)d(v)-5 ++Fx(or)j Fr($EDITOR)291 2790 y Fx(en)n(vironmen)n(t)d(v)-5 + b(ariables)27 b(is)i(de\014ned,)h(its)g(v)-5 b(alue)29 + b(is)f(used)i(\(with)f(precedence)g(pro)r(ceeding)291 +-1916 y(in)c(the)h(order)f(listed\).)36 b(If)26 b(not,)h(\\vi",)e ++2889 y(in)c(the)h(order)f(listed\).)36 b(If)26 b(not,)h(\\vi",)e + (\\emacs",)f(\\emacs)g(-n)n(w")h(and)h(\\nano")d(are)i(tried)h(in)291 +-2015 y(that)h(order.)p 527 2220 2392 4 v 527 2295 a Fr(--logfile)p +-527 2350 V 415 2555 a Fx(If)k(y)n(ou)e(wish,)i(y)n(ou)f(ma)n(y)f(sp)r ++2989 y(that)h(order.)p 527 3152 2392 4 v 527 3227 a Fr(--logfile)p ++527 3282 V 415 3446 a Fx(If)k(y)n(ou)e(wish,)i(y)n(ou)f(ma)n(y)f(sp)r + (ecify)i(the)f(patc)n(h)g(name)g(and)h(log)e(using)h(the)h +-Fr(--logfile)291 2654 y Fx(\015ag.)66 b(If)38 b(y)n(ou)e(do)i(so,)h ++Fr(--logfile)291 3545 y Fx(\015ag.)66 b(If)38 b(y)n(ou)e(do)i(so,)h + (the)f(\014rst)f(line)h(of)g(the)g(sp)r(eci\014ed)g(\014le)f(will)h(b)r +-(e)g(tak)n(en)f(to)h(b)r(e)g(the)291 2754 y(patc)n(h)29 ++(e)g(tak)n(en)f(to)h(b)r(e)g(the)291 3645 y(patc)n(h)29 + b(name,)i(and)f(the)g(remainder)f(will)i(b)r(e)f(the)h(\\long)e(commen) +-n(t".)43 b(This)31 b(feature)e(can)291 2854 y(b)r(e)22 ++n(t".)43 b(This)31 b(feature)e(can)291 3745 y(b)r(e)22 + b(esp)r(ecially)g(handy)h(if)g(y)n(ou)e(ha)n(v)n(e)g(a)h(test)h(that)g + (fails)f(sev)n(eral)f(times)i(on)f(the)h(record)e(\(th)n(us)291 +-2953 y(ab)r(orting)30 b(the)h(record\),)g(so)g(y)n(ou)f(don't)i(ha)n(v) ++3844 y(ab)r(orting)30 b(the)h(record\),)g(so)g(y)n(ou)f(don't)i(ha)n(v) + n(e)d(to)j(t)n(yp)r(e)f(in)g(the)h(long)e(commen)n(t)h(m)n(ultiple)291 +-3053 y(times.)37 b(The)27 b(\014le's)h(con)n(ten)n(ts)f(will)h(o)n(v)n ++3944 y(times.)37 b(The)27 b(\014le's)h(con)n(ten)n(ts)f(will)h(o)n(v)n + (erride)d(the)j Fr(--patch-name)23 b Fx(option.)p 527 +-3258 V 527 3333 a Fr(--ask-deps)p 527 3388 V 415 3593 ++4107 V 527 4182 a Fr(--ask-deps)p 527 4237 V 415 4401 + a Fx(Eac)n(h)29 b(patc)n(h)g(ma)n(y)g(dep)r(end)i(on)f(an)n(y)f(n)n(um) + n(b)r(er)g(of)h(previous)f(patc)n(hes.)43 b(If)30 b(y)n(ou)f(c)n(ho)r +-(ose)291 3692 y(to)j(mak)n(e)g(y)n(our)f(patc)n(h)h(dep)r(end)h(on)f(a) ++(ose)291 4500 y(to)j(mak)n(e)g(y)n(our)f(patc)n(h)h(dep)r(end)h(on)f(a) + g(previous)g(patc)n(h,)h(that)g(patc)n(h)f(is)h(required)e(to)i(b)r(e) +-291 3792 y(applied)27 b(b)r(efore)g(y)n(our)f(patc)n(h)h(can)f(b)r(e)i ++291 4600 y(applied)27 b(b)r(efore)g(y)n(our)f(patc)n(h)h(can)f(b)r(e)i + (applied)f(to)g(a)g(rep)r(ository)-7 b(.)35 b(This)28 +-b(can)e(b)r(e)i(used,)f(for)291 3891 y(example,)f(if)i(a)e(piece)h(of)g ++b(can)e(b)r(e)i(used,)f(for)291 4700 y(example,)f(if)i(a)e(piece)h(of)g + (co)r(de)g(requires)f(a)g(function)i(to)f(b)r(e)g(de\014ned,)h(whic)n +-(h)f(w)n(as)f(de\014ned)291 3991 y(in)h(an)h(earlier)e(patc)n(h.)415 +-4096 y(If)e(y)n(ou)e(w)n(an)n(t)h(to)g(man)n(ually)g(de\014ne)g(an)n(y) ++(h)f(w)n(as)f(de\014ned)291 4799 y(in)h(an)h(earlier)e(patc)n(h.)415 ++4899 y(If)e(y)n(ou)e(w)n(an)n(t)h(to)g(man)n(ually)g(de\014ne)g(an)n(y) + g(dep)r(endencies)h(for)e(y)n(our)h(patc)n(h,)h(y)n(ou)e(can)h(use)291 +-4196 y(the)28 b Fr(--ask-deps)23 b Fx(\015ag,)k(and)g(darcs)g(will)h +-(ask)e(y)n(ou)h(for)g(the)h(patc)n(h's)f(dep)r(endencies.)415 +-4301 y(It)42 b(is)f(p)r(ossible)h(to)f(record)f(a)h(patc)n(h)h(whic)n +-(h)f(has)g(no)h(actual)f(c)n(hanges)f(but)i(whic)n(h)291 +-4401 y(has)31 b(sp)r(eci\014c)i(dep)r(endencies.)51 b(This)33 +-b(t)n(yp)r(e)f(of)g(patc)n(h)h(can)e(b)r(e)i(though)n(t)f(of)h(as)e(a)h +-(\\partial)291 4500 y(tag".)67 b(The)38 b Fr(darcs)k(tag)37 +-b Fx(command)h(will)g(record)f(a)g(patc)n(h)h(with)h(no)f(actual)f(c)n +-(hanges)291 4600 y(but)44 b(whic)n(h)f(dep)r(ends)h(on)g(the)f(en)n +-(tire)h(curren)n(t)e(in)n(v)n(en)n(tory)g(of)i(the)g(rep)r(ository)-7 +-b(.)83 b(The)291 4700 y Fr(darcs)41 b(record)g(--ask-deps)30 +-b Fx(with)j(no)h(selected)f(c)n(hanges)f(will)i(record)d(a)j(patc)n(h)f +-(that)291 4799 y(dep)r(ends)24 b(on)h(only)f(those)g(patc)n(hes)g +-(selected)g(via)g(the)h Fr(--ask-deps)20 b Fx(op)r(eration,)25 +-b(resulting)291 4899 y(in)j(a)h(patc)n(h)f(whic)n(h)h(describ)r(es)f(a) +-g(set)g(of)h(patc)n(hes;)f(the)h(presence)f(of)h(this)g(primary)e(patc) +-n(h)291 4998 y(in)g(a)h(rep)r(ository)e(implies)h(the)h(presence)f(of)h +-(\(at)f(least\))h(the)g(dep)r(ended-up)r(on)g(patc)n(hes.)p ++4998 y(the)28 b Fr(--ask-deps)23 b Fx(\015ag,)k(and)g(darcs)g(will)h ++(ask)e(y)n(ou)h(for)g(the)h(patc)n(h's)f(dep)r(endencies.)p + eop end + %%Page: 68 68 + TeXDict begin 68 67 bop 739 282 a Fx(68)1378 b Fu(CHAPTER)27 +-b(6.)64 b(D)n(AR)n(CS)28 b(COMMANDS)p 975 515 2392 4 +-v 975 590 a Fr(--no-test,)83 b(--test)p 975 638 V 863 +-826 a Fx(If)38 b(y)n(ou)e(con\014gure)f(darcs)h(to)g(run)h(a)f(test)h +-(suite,)i(darcs)d(will)h(run)f(this)h(test)g(on)g(the)739 +-926 y(recorded)27 b(rep)r(ository)h(to)h(mak)n(e)f(sure)g(it)i(is)f(v) +--5 b(alid.)41 b(Darcs)28 b(\014rst)h(creates)f(a)g(pristine)h(cop)n(y) +-739 1026 y(of)34 b(the)i(source)d(tree)h(\(in)h(a)g(temp)r(orary)e ++b(6.)64 b(D)n(AR)n(CS)28 b(COMMANDS)863 515 y Fx(It)42 ++b(is)g(p)r(ossible)f(to)g(record)g(a)g(patc)n(h)g(whic)n(h)h(has)f(no)g ++(actual)g(c)n(hanges)f(but)i(whic)n(h)739 615 y(has)32 ++b(sp)r(eci\014c)g(dep)r(endencies.)52 b(This)32 b(t)n(yp)r(e)g(of)h ++(patc)n(h)f(can)g(b)r(e)h(though)n(t)f(of)g(as)g(a)g(\\partial)739 ++715 y(tag".)67 b(The)39 b Fr(darcs)i(tag)c Fx(command)h(will)g(record)f ++(a)h(patc)n(h)g(with)g(no)g(actual)g(c)n(hanges)739 814 ++y(but)44 b(whic)n(h)g(dep)r(ends)g(on)f(the)h(en)n(tire)f(curren)n(t)g ++(in)n(v)n(en)n(tory)e(of)j(the)g(rep)r(ository)-7 b(.)83 ++b(The)739 914 y Fr(darcs)41 b(record)h(--ask-deps)29 ++b Fx(with)34 b(no)f(selected)g(c)n(hanges)f(will)i(record)e(a)h(patc)n ++(h)g(that)739 1013 y(dep)r(ends)25 b(on)f(only)g(those)g(patc)n(hes)g ++(selected)g(via)g(the)h Fr(--ask-deps)c Fx(op)r(eration,)j(resulting) ++739 1113 y(in)29 b(a)f(patc)n(h)g(whic)n(h)h(describ)r(es)f(a)g(set)h ++(of)f(patc)n(hes;)h(the)g(presence)f(of)g(this)h(primary)f(patc)n(h)739 ++1213 y(in)g(a)f(rep)r(ository)f(implies)i(the)g(presence)e(of)i(\(at)g ++(least\))f(the)h(dep)r(ended-up)r(on)g(patc)n(hes.)p ++975 1390 2392 4 v 975 1465 a Fr(--no-test,)83 b(--test)p ++975 1513 V 863 1691 a Fx(If)38 b(y)n(ou)e(con\014gure)f(darcs)h(to)g ++(run)h(a)f(test)h(suite,)i(darcs)d(will)h(run)f(this)h(test)g(on)g(the) ++739 1790 y(recorded)27 b(rep)r(ository)h(to)h(mak)n(e)f(sure)g(it)i(is) ++f(v)-5 b(alid.)41 b(Darcs)28 b(\014rst)h(creates)f(a)g(pristine)h(cop)n ++(y)739 1890 y(of)34 b(the)i(source)d(tree)h(\(in)h(a)g(temp)r(orary)e + (directory\),)j(then)f(it)g(runs)f(the)h(test,)i(using)d(its)739 +-1125 y(return)26 b(v)-5 b(alue)27 b(to)g(decide)g(if)h(the)f(record)f ++1990 y(return)26 b(v)-5 b(alue)27 b(to)g(decide)g(if)h(the)f(record)f + (is)h(v)-5 b(alid.)37 b(If)27 b(it)g(is)g(not)g(v)-5 +-b(alid,)28 b(the)f(record)f(will)h(b)r(e)739 1225 y(ab)r(orted.)47 ++b(alid,)28 b(the)f(record)f(will)h(b)r(e)739 2089 y(ab)r(orted.)47 + b(This)32 b(is)f(a)g(handy)g(w)n(a)n(y)f(to)h(a)n(v)n(oid)f(making)h +-(stupid)h(mistak)n(es)e(lik)n(e)h(forgetting)739 1324 ++(stupid)h(mistak)n(es)e(lik)n(e)h(forgetting)739 2189 + y(to)i(`darcs)g(add')g(a)g(new)h(\014le.)54 b(It)34 b(also)f(can)g(b)r + (e)h(tediously)f(slo)n(w,)h(so)f(there)g(is)g(an)h(option)739 +-1424 y(\()p Fr(--no-test)p Fx(\))24 b(to)k(skip)f(the)h(test.)p +-975 1612 V 975 1687 a Fr(--pipe)p 975 1742 V 863 1930 +-a Fx(If)22 b(y)n(ou)f(run)g(record)f(with)i(the)g Fr(--pipe)d +-Fx(option,)j(y)n(ou)f(will)h(b)r(e)g(prompted)f(for)g(the)h(patc)n(h) +-739 2030 y(date,)32 b(the)f(author,)h(the)f(patc)n(h)g(name,)h(and)f +-(the)h(long)e(commen)n(t.)48 b(The)31 b(long)f(commen)n(t)739 +-2129 y(will)21 b(extend)h(un)n(til)f(the)g(end)h(of)f(\014le)g(of)g +-(stdin)h(is)f(reac)n(hed)e(\(ctrl-D)j(on)f(Unixy)g(systems,)h(ctrl-)739 +-2229 y(Z)30 b(on)g(systems)f(running)h(a)g(Microsoft)f(OS\).)h(This)g ++2288 y(\()p Fr(--no-test)p Fx(\))24 b(to)k(skip)f(the)h(test.)p ++975 2466 V 975 2541 a Fr(--set-scripts-ex)o(ecu)o(ta)o(ble)p ++975 2596 V 863 2773 a Fx(If)40 b(y)n(ou)e(pass)g Fr(--set-scripts-exe)o ++(cu)o(tab)o(le)32 b Fx(to)39 b Fr(darcs)j(record)p Fx(,)d(darcs)f(will) ++h(set)739 2873 y(scripts)27 b(executable)g(in)h(the)g(test)g(directory) ++e(b)r(efore)h(running)h(the)g(test.)p 975 3051 V 975 ++3125 a Fr(--pipe)p 975 3180 V 863 3358 a Fx(If)22 b(y)n(ou)f(run)g ++(record)f(with)i(the)g Fr(--pipe)d Fx(option,)j(y)n(ou)f(will)h(b)r(e)g ++(prompted)f(for)g(the)h(patc)n(h)739 3458 y(date,)32 ++b(the)f(author,)h(the)f(patc)n(h)g(name,)h(and)f(the)h(long)e(commen)n ++(t.)48 b(The)31 b(long)f(commen)n(t)739 3557 y(will)21 ++b(extend)h(un)n(til)f(the)g(end)h(of)f(\014le)g(of)g(stdin)h(is)f(reac) ++n(hed)e(\(ctrl-D)j(on)f(Unixy)g(systems,)h(ctrl-)739 ++3657 y(Z)30 b(on)g(systems)f(running)h(a)g(Microsoft)f(OS\).)h(This)g + (in)n(terface)g(is)g(in)n(tended)g(for)g(scripting)739 +-2329 y(darcs,)f(in)h(particular)f(for)g(writing)g(rep)r(ository)g(con)n ++3757 y(darcs,)f(in)h(particular)f(for)g(writing)g(rep)r(ository)g(con)n + (v)n(ersion)e(scripts.)43 b(The)30 b(prompts)f(are)739 +-2428 y(in)n(tended)h(mostly)f(as)g(a)g(useful)h(guide)f(\(since)g ++3856 y(in)n(tended)h(mostly)f(as)g(a)g(useful)h(guide)f(\(since)g + (scripts)g(w)n(on't)h(need)f(them\),)i(to)e(help)h(y)n(ou)739 +-2528 y(understand)d(the)h(format)f(in)h(whic)n(h)g(to)f(pro)n(vide)f +-(the)i(input.)p 975 2716 V 975 2791 a Fr(--interactive)p +-975 2827 V 863 3016 a Fx(By)k(default,)i Fr(record)c ++3956 y(understand)d(the)h(format)f(in)h(whic)n(h)g(to)f(pro)n(vide)f ++(the)i(input.)p 975 4133 V 975 4208 a Fr(--interactive)p ++975 4245 V 863 4422 a Fx(By)k(default,)i Fr(record)c + Fx(w)n(orks)h(in)n(teractiv)n(ely)-7 b(.)50 b(Probably)30 +-b(the)j(only)f(thing)h(y)n(ou)e(need)739 3115 y(to)e(kno)n(w)g(ab)r ++b(the)j(only)f(thing)h(y)n(ou)e(need)739 4522 y(to)e(kno)n(w)g(ab)r + (out)g(using)g(this)g(is)h(that)f(y)n(ou)g(can)g(press)f + Fr(?)h Fx(at)g(the)h(prompt)f(to)g(b)r(e)h(sho)n(wn)f(a)739 +-3215 y(list)g(of)f(the)h(rest)f(of)h(the)g(options)f(and)g(what)h(they) ++4622 y(list)g(of)f(the)h(rest)f(of)h(the)g(options)f(and)g(what)h(they) + f(do.)40 b(The)29 b(rest)f(should)g(b)r(e)h(clear)f(from)739 +-3314 y(there.)37 b(Here's)27 b(a)g(\\screenshot")e(to)j(demonstrate:) +-739 3504 y Fr(hunk)42 b(./hello.pl)d(+2)739 3604 y(+#!/usr/bin/perl)739 +-3703 y(+print)i("Hello)g(World!\\n";)739 3803 y(Shall)g(I)j(record)d +-(this)h(patch?)f(\(2/2\))g([ynWsfqadjk],)d(or)43 b(?)g(for)g(help:)e(?) +-739 3903 y(How)h(to)h(use)f(record...)739 4002 y(y:)h(record)e(this)h +-(patch)739 4102 y(n:)h(don't)e(record)g(it)739 4201 y(w:)i(wait)f(and)g +-(decide)f(later,)g(defaulting)f(to)i(no)739 4401 y(s:)h(don't)e(record) +-g(the)i(rest)f(of)g(the)h(changes)d(to)j(this)f(file)739 +-4500 y(f:)h(record)e(the)h(rest)g(of)h(the)f(changes)f(to)i(this)f +-(file)739 4700 y(d:)h(record)e(selected)f(patches)739 +-4799 y(a:)j(record)e(all)h(the)g(remaining)e(patches)739 +-4899 y(q:)j(cancel)e(record)p eop end ++4721 y(there.)37 b(Here's)27 b(a)g(\\screenshot")e(to)j(demonstrate:) ++739 4899 y Fr(hunk)42 b(./hello.pl)d(+2)739 4998 y(+#!/usr/bin/perl)p ++eop end + %%Page: 69 69 + TeXDict begin 69 68 bop 291 282 a Fu(6.6.)63 b(W)n(ORKING)28 +-b(WITH)g(CHANGES)1450 b Fx(69)291 515 y Fr(j:)42 b(skip)g(to)h(next)f +-(patch)291 615 y(k:)g(back)g(up)h(to)g(previous)d(patch)291 +-715 y(h)j(or)g(?:)f(show)g(this)g(help)291 914 y(:)e(accept)h +-(the)h(current)f(default)g(\(which)g(is)i(capitalized\))291 +-1556 y Fx(What)26 b(y)n(ou)g(can't)g(see)g(in)h(that)f(\\screenshot")f +-(is)h(that)h Fr(darcs)d Fx(will)j(also)e(try)h(to)g(use)g(color)291 +-1656 y(in)h(y)n(our)g(terminal)g(to)h(mak)n(e)e(the)i(output)g(ev)n(en) +-g(easier)e(to)h(read.)291 2366 y Fk(6.6.2)112 b(darcs)38 +-b(pull)291 2687 y Fr(Usage:)j(darcs)g(pull)h([OPTION]...)d +-([REPOSITORY]...)415 2877 y Fx(Options:)652 3061 y Fr(--matches)h +-(PATTERN)401 b Fx(select)28 b(patc)n(hes)f(matc)n(hing)g(P)-7 +-b(A)g(TTERN)465 3161 y Fr(-p)99 b(--patches)40 b(REGEXP)445 +-b Fx(select)28 b(patc)n(hes)f(matc)n(hing)g(REGEXP)465 +-3261 y Fr(-t)99 b(--tags)41 b(REGEXP)576 b Fx(select)28 +-b(tags)f(matc)n(hing)g(REGEXP)465 3360 y Fr(-a)99 b(--all)925 +-b Fx(answ)n(er)27 b(y)n(es)f(to)i(all)f(patc)n(hes)465 +-3460 y Fr(-i)99 b(--interactive)573 b Fx(prompt)28 b(user)f(in)n +-(teractiv)n(ely)652 3559 y Fr(--mark-conflicts)441 b +-Fx(mark)27 b(con\015icts)g([DEF)-9 b(A)n(UL)i(T])652 +-3659 y Fr(--allow-conflict)o(s)398 b Fx(allo)n(w)27 b(con\015icts,)g +-(but)h(don't)g(mark)f(them)652 3759 y Fr(--dont-allow-con)o(fl)o(ic)o +-(ts)180 b Fx(fail)28 b(on)f(patc)n(hes)g(that)h(create)f(con\015icts) +-652 3858 y Fr(--external-merge)37 b(COMMAND)96 b Fx(use)28 +-b(external)f(to)r(ol)g(to)g(merge)g(con\015icts)652 3958 +-y Fr(--test)881 b Fx(run)28 b(the)g(test)g(script)652 +-4058 y Fr(--no-test)749 b Fx(don't)28 b(run)g(the)g(test)g(script)652 +-4157 y Fr(--dry-run)749 b Fx(don't)28 b(actually)f(tak)n(e)g(the)h +-(action)465 4257 y Fr(-s)99 b(--summary)749 b Fx(summarize)27 +-b(c)n(hanges)652 4356 y Fr(--no-summary)617 b Fx(don't)28 +-b(summarize)f(c)n(hanges)652 4456 y Fr(--no-deps)749 +-b Fx(don't)28 b(automatically)f(ful\014ll)h(dep)r(endencies)652 +-4556 y Fr(--set-default)573 b Fx(set)28 b(default)g(rep)r(ository)e +-([DEF)-9 b(A)n(UL)i(T])652 4655 y Fr(--no-set-default)441 +-b Fx(don't)28 b(set)g(default)g(rep)r(ository)652 4785 +-y Fr(--repodir)40 b(DIRECTORY)1797 4743 y Fx(sp)r(ecify)28 +-b(the)g(rep)r(ository)e(directory)h(in)g(whic)n(h)h(to)1797 +-4842 y(run)415 4998 y(Adv)-5 b(anced)28 b(options:)p ++b(WITH)g(CHANGES)1450 b Fx(69)291 515 y Fr(+print)41 ++b("Hello)g(World!\\n";)291 615 y(Shall)g(I)i(record)e(this)h(patch?)f ++(\(2/2\))h([ynWsfqadjk],)c(or)43 b(?)g(for)f(help:)g(?)291 ++715 y(How)g(to)h(use)f(record...)291 814 y(y:)g(record)f(this)h(patch) ++291 914 y(n:)g(don't)g(record)f(it)291 1013 y(w:)h(wait)g(and)h(decide) ++e(later,)g(defaulting)e(to)k(no)291 1213 y(s:)f(don't)g(record)f(the)h ++(rest)g(of)h(the)f(changes)f(to)i(this)f(file)291 1312 ++y(f:)g(record)f(the)i(rest)f(of)g(the)h(changes)e(to)h(this)g(file)291 ++1512 y(d:)g(record)f(selected)g(patches)291 1611 y(a:)h(record)f(all)i ++(the)f(remaining)e(patches)291 1711 y(q:)i(cancel)f(record)291 ++1910 y(j:)h(skip)g(to)h(next)f(patch)291 2010 y(k:)g(back)g(up)h(to)g ++(previous)d(patch)291 2109 y(h)j(or)g(?:)f(show)g(this)g(help)291 ++2309 y(:)e(accept)h(the)h(current)f(default)g(\(which)g(is)i ++(capitalized\))291 3190 y Fx(What)26 b(y)n(ou)g(can't)g(see)g(in)h ++(that)f(\\screenshot")f(is)h(that)h Fr(darcs)d Fx(will)j(also)e(try)h ++(to)g(use)g(color)291 3290 y(in)h(y)n(our)g(terminal)g(to)h(mak)n(e)e ++(the)i(output)g(ev)n(en)g(easier)e(to)h(read.)291 4317 ++y Fk(6.6.2)112 b(darcs)38 b(pull)291 4749 y Fr(Usage:)j(darcs)g(pull)h ++([OPTION]...)d([REPOSITORY]...)415 4998 y Fx(Options:)p + eop end + %%Page: 70 70 + TeXDict begin 70 69 bop 739 282 a Fx(70)1378 b Fu(CHAPTER)27 +-b(6.)64 b(D)n(AR)n(CS)28 b(COMMANDS)1013 502 y Fr(--intersection)747 +-b Fx(tak)n(e)27 b(in)n(tersection)g(of)h(all)f(rep)r(ositories)1013 +-602 y Fr(--union)1055 b Fx(tak)n(e)27 b(union)h(of)g(all)f(rep)r +-(ositories)f([DEF)-9 b(A)n(UL)i(T])1013 744 y Fr(--complement)2376 +-694 y Fx(tak)n(e)27 b(complemen)n(t)h(of)f(rep)r(ositories)f(\(in)i +-(order)2376 793 y(listed\))1013 884 y Fr(--compress)923 +-b Fx(create)27 b(compressed)g(patc)n(hes)1013 984 y Fr(--dont-compress) ++b(6.)64 b(D)n(AR)n(CS)28 b(COMMANDS)1100 502 y Fr(--matches)40 ++b(PATTERN)402 b Fx(select)27 b(patc)n(hes)g(matc)n(hing)g(P)-7 ++b(A)g(TTERN)913 602 y Fr(-p)99 b(--patches)40 b(REGEXP)446 ++b Fx(select)27 b(patc)n(hes)g(matc)n(hing)g(REGEXP)913 ++701 y Fr(-t)99 b(--tags)41 b(REGEXP)577 b Fx(select)27 ++b(tags)g(matc)n(hing)g(REGEXP)913 801 y Fr(-a)99 b(--all)926 ++b Fx(answ)n(er)26 b(y)n(es)h(to)g(all)g(patc)n(hes)913 ++901 y Fr(-i)99 b(--interactive)574 b Fx(prompt)27 b(user)g(in)n ++(teractiv)n(ely)1100 1000 y Fr(--mark-conflicts)442 b ++Fx(mark)26 b(con\015icts)i([DEF)-9 b(A)n(UL)i(T])1100 ++1100 y Fr(--allow-conflict)o(s)399 b Fx(allo)n(w)26 b(con\015icts,)i ++(but)g(don't)g(mark)e(them)1100 1199 y Fr(--dont-allow-con)o(fli)o(ct)o ++(s)181 b Fx(fail)27 b(on)h(patc)n(hes)f(that)h(create)e(con\015icts) ++1100 1299 y Fr(--external-merge)37 b(COMMAND)97 b Fx(use)27 ++b(external)g(to)r(ol)g(to)h(merge)e(con\015icts)1100 ++1399 y Fr(--test)882 b Fx(run)27 b(the)h(test)g(script)1100 ++1498 y Fr(--no-test)750 b Fx(don't)28 b(run)f(the)h(test)g(script)1100 ++1598 y Fr(--dry-run)750 b Fx(don't)28 b(actually)e(tak)n(e)h(the)h ++(action)1100 1698 y Fr(--xml-output)618 b Fx(generate)26 ++b(XML)i(formatted)f(output)913 1797 y Fr(-s)99 b(--summary)750 ++b Fx(summarize)27 b(c)n(hanges)1100 1897 y Fr(--no-summary)618 ++b Fx(don't)28 b(summarize)e(c)n(hanges)1100 1996 y Fr(--no-deps)750 ++b Fx(don't)28 b(automatically)e(ful\014ll)i(dep)r(endencies)1100 ++2096 y Fr(--set-default)574 b Fx(set)27 b(default)h(rep)r(ository)e ++([DEF)-9 b(A)n(UL)i(T])1100 2196 y Fr(--no-set-default)442 ++b Fx(don't)28 b(set)f(default)h(rep)r(ository)1100 2325 ++y Fr(--repodir)40 b(DIRECTORY)2246 2283 y Fx(sp)r(ecify)28 ++b(the)g(rep)r(ository)e(directory)g(in)i(whic)n(h)f(to)2246 ++2383 y(run)863 2454 y(Adv)-5 b(anced)28 b(options:)1013 ++2553 y Fr(--intersection)747 b Fx(tak)n(e)27 b(in)n(tersection)g(of)h ++(all)f(rep)r(ositories)1013 2653 y Fr(--union)1055 b ++Fx(tak)n(e)27 b(union)h(of)g(all)f(rep)r(ositories)f([DEF)-9 ++b(A)n(UL)i(T])1013 2795 y Fr(--complement)2376 2745 y ++Fx(tak)n(e)27 b(complemen)n(t)h(of)f(rep)r(ositories)f(\(in)i(order) ++2376 2844 y(listed\))1013 2935 y Fr(--compress)923 b ++Fx(create)27 b(compressed)g(patc)n(hes)1013 3034 y Fr(--dont-compress) + 703 b Fx(don't)28 b(create)f(compressed)f(patc)n(hes)1013 +-1083 y Fr(--nolinks)967 b Fx(do)28 b(not)f(link)h(rep)r(ository)e(or)h +-(pristine)g(to)h(sibling)1013 1183 y Fr(--ignore-times)2376 +-1191 y Fx(don't)g(trust)g(the)g(\014le)g(mo)r(di\014cation)f(times)1013 +-1322 y Fr(--no-ssh-cm)2376 1270 y Fx(don't)h(use)g(SSH)g(Con)n +-(trolMaster)d(feature)2376 1370 y([DEF)-9 b(A)n(UL)i(T])1013 +-1460 y Fr(--ssh-cm)2376 1468 y Fx(use)28 b(SSH)g(Con)n(trolMaster)e +-(feature)1013 1560 y Fr(--set-scripts-ex)o(ec)o(uta)o(bl)o(e)311 +-b Fx(mak)n(e)27 b(scripts)g(executable)1013 1660 y Fr(--dont-set-scrip) +-o(ts)o(-ex)o(ec)o(uta)o(bl)o(e)93 b Fx(don't)28 b(mak)n(e)f(scripts)g +-(executable)1013 1759 y Fr(--umask)41 b(UMASK)794 b Fx(sp)r(ecify)28 +-b(umask)f(to)h(use)f(when)h(writing)863 1859 y(Pull)34 +-b(is)g(used)g(to)g(bring)f(c)n(hanges)g(made)g(in)i(another)e(rep)r +-(ository)f(in)n(to)i(the)g(curren)n(t)739 1958 y(rep)r(ository)27 +-b(\(that)j(is,)f(either)g(the)h(one)e(in)i(the)f(curren)n(t)f +-(directory)-7 b(,)29 b(or)f(the)h(one)g(sp)r(eci\014ed)739 +-2058 y(with)38 b(the)h({rep)r(o)r(dir)d(option\).)68 ++3134 y Fr(--nolinks)967 b Fx(do)28 b(not)f(link)h(rep)r(ository)e(or)h ++(pristine)g(to)h(sibling)1013 3234 y Fr(--ignore-times)2376 ++3242 y Fx(don't)g(trust)g(the)g(\014le)g(mo)r(di\014cation)f(times)1013 ++3363 y Fr(--remote-repo)38 b(URL)2376 3321 y Fx(sp)r(ecify)28 ++b(the)g(remote)f(rep)r(ository)f(URL)i(to)g(w)n(ork)2376 ++3421 y(with)1013 3531 y Fr(--no-ssh-cm)2376 3479 y Fx(don't)g(use)g ++(SSH)g(Con)n(trolMaster)d(feature)2376 3578 y([DEF)-9 ++b(A)n(UL)i(T])1013 3669 y Fr(--ssh-cm)2376 3677 y Fx(use)28 ++b(SSH)g(Con)n(trolMaster)e(feature)1013 3768 y Fr(--set-scripts-ex)o ++(ec)o(uta)o(bl)o(e)311 b Fx(mak)n(e)27 b(scripts)g(executable)1013 ++3868 y Fr(--dont-set-scrip)o(ts)o(-ex)o(ec)o(uta)o(bl)o(e)93 ++b Fx(don't)28 b(mak)n(e)f(scripts)g(executable)1013 3968 ++y Fr(--umask)41 b(UMASK)794 b Fx(sp)r(ecify)28 b(umask)f(to)h(use)f ++(when)h(writing)863 4068 y(Pull)34 b(is)g(used)g(to)g(bring)f(c)n ++(hanges)g(made)g(in)i(another)e(rep)r(ository)f(in)n(to)i(the)g(curren) ++n(t)739 4168 y(rep)r(ository)27 b(\(that)j(is,)f(either)g(the)h(one)e ++(in)i(the)f(curren)n(t)f(directory)-7 b(,)29 b(or)f(the)h(one)g(sp)r ++(eci\014ed)739 4268 y(with)38 b(the)h({rep)r(o)r(dir)d(option\).)68 + b(Pull)38 b(allo)n(ws)f(y)n(ou)g(to)h(bring)f(o)n(v)n(er)f(all)i(or)f +-(some)g(of)h(the)739 2158 y(patc)n(hes)24 b(that)i(are)e(in)h(that)g ++(some)g(of)h(the)739 4367 y(patc)n(hes)24 b(that)i(are)e(in)h(that)g + (rep)r(ository)e(but)j(not)f(in)g(this)h(one.)35 b(Pull)25 +-b(accepts)f(argumen)n(ts,)739 2257 y(whic)n(h)38 b(are)e(URLs)i(from)f ++b(accepts)f(argumen)n(ts,)739 4467 y(whic)n(h)38 b(are)e(URLs)i(from)f + (whic)n(h)h(to)f(pull,)k(and)d(when)f(called)h(without)g(an)f(argumen)n +-(t,)739 2357 y(pull)26 b(will)f(use)h(the)f(rep)r(ository)f(from)h ++(t,)739 4567 y(pull)26 b(will)f(use)h(the)f(rep)r(ository)f(from)h + (whic)n(h)h(y)n(ou)e(ha)n(v)n(e)g(most)i(recen)n(tly)e(either)i(pushed) +-f(or)739 2457 y(pulled.)p 975 2654 2392 4 v 975 2728 ++f(or)739 4666 y(pulled.)p 975 4869 2392 4 v 975 4944 + a Fr(--intersection,)37 b(--union)k([DEFAULT],)f(--complement)p +-975 2783 V 863 2980 a Fx(If)i(y)n(ou)e(pro)n(vide)g(more)h(than)g(one)g +-(rep)r(ository)e(as)h(an)h(argumen)n(t)f(to)h(pull,)k(darcs')739 +-3080 y(b)r(eha)n(vior)23 b(is)h(determined)h(b)n(y)f(the)h(presence)e +-(of)i(the)g Fr(--complement)p Fx(,)20 b Fr(--intersection)p +-Fx(,)739 3180 y(and)27 b Fr(--union)e Fx(\015ags.)863 +-3377 y Fn(\017)41 b Fx(The)30 b(default)g(\()p Fr(--union)p +-Fx(\))d(b)r(eha)n(vior)i(is)g(to)h(pull)g(an)n(y)e(patc)n(hes)h(that)h +-(are)f(in)g(an)n(y)g(of)946 3476 y(the)f(sp)r(eci\014ed)g(rep)r +-(ositories)e(\()p Fi(R)1961 3488 y Fm(1)2013 3414 y Fg(S)2096 +-3476 y Fi(R)2159 3488 y Fm(2)2210 3414 y Fg(S)2293 3476 +-y Fi(R)2356 3488 y Fm(3)2407 3476 y Fi(:)14 b(:)g(:)p +-Fx(\).)863 3657 y Fn(\017)41 b Fx(If)27 b(y)n(ou)e(instead)h(sp)r +-(ecify)g(the)h Fr(--intersection)20 b Fx(\015ag,)25 b(darcs)g(will)i +-(only)e(pull)i(those)946 3757 y(patc)n(hes)g(whic)n(h)h(are)f(presen)n +-(t)g(in)g(all)h(source)e(rep)r(ositories)g(\()p Fi(R)2913 +-3769 y Fm(1)2964 3694 y Fg(T)3047 3757 y Fi(R)3110 3769 +-y Fm(2)3161 3694 y Fg(T)3244 3757 y Fi(R)3307 3769 y +-Fm(3)3359 3757 y Fi(:)14 b(:)g(:)o Fx(\).)863 3937 y +-Fn(\017)41 b Fx(If)28 b(y)n(ou)e(sp)r(ecify)i(the)f Fr(--complement)22 +-b Fx(\015ag,)27 b(darcs)f(will)h(only)g(pull)g(elemen)n(ts)g(in)h(the) +-946 4037 y(\014rst)39 b(rep)r(ository)e(that)i(do)g(not)f(exist)h(in)g +-(an)n(y)f(of)h(the)g(remaining)f(rep)r(ositories)3568 +-4006 y Fm(4)946 4136 y Fx(\()p Fi(R)1041 4148 y Fm(1)1079 +-4136 y Fn(n)p Fx(\()p Fi(R)1216 4148 y Fm(2)1267 4074 +-y Fg(S)1350 4136 y Fi(R)1413 4148 y Fm(3)1464 4074 y +-Fg(S)1547 4136 y Fi(:)14 b(:)g(:)p Fx(\)\).)p 975 4330 +-V 975 4404 a Fr(--external-merge)p 975 4459 V 739 4527 +-1146 4 v 831 4581 a Fp(4)866 4604 y Fl(The)32 b(\014rst)f(thing)i +-(darcs)e(will)g(do)h(is)f(remo)n(v)n(e)h(duplicates,)i(k)n(eeping)f +-(only)f(the)g(\014rst)g(sp)r(eci\014cation.)739 4683 +-y(This)26 b(is)f(noticeable)j(for)e(the)h(complemen)n(t)g(op)r +-(eration,)h(since)f(mathematically)g Ff(S)t Fe(n)p Ff(S)h +-Fe(!)23 b(;)p Fl(,)k(one)g(w)n(ould)739 4762 y(exp)r(ect)i(that)f(\\)p +-Fo(darcs)37 b(pull)f(--complement)j(repo1)e(repo1)p Fl(")29 +-b(w)n(ould)e(result)g(in)f(no)i(pulls,)f(but)g(the)h(du-)739 +-4841 y(plicate)e(elimination)f(remo)n(v)n(es)h(the)g(second)h +-Fo(repo1)p Fl(,)f(reducing)g(the)g(ab)r(o)n(v)n(e)h(to)f(e\013ectiv)n +-(ely)h(\\)p Fo(darcs)37 b(pull)739 4920 y(repo1)p Fl(".)53 +-b(The)30 b(exp)r(ected)j(functionalit)n(y)e(could)g(b)r(e)g(seen)g(via) +-f(\\)p Fo(darcs)37 b(get)f(-a)g(repo1)h(repo2;)g(darcs)739 +-4998 y(pull)f(--complement)j(repo1)e(repo2)p Fl(",)25 +-b(but)f(there)g(are)g(easier)f(w)n(a)n(ys)h(of)g(doing)g(nothing!)p +-eop end ++975 4998 V eop end + %%Page: 71 71 + TeXDict begin 71 70 bop 291 282 a Fu(6.6.)63 b(W)n(ORKING)28 +-b(WITH)g(CHANGES)1450 b Fx(71)415 515 y(Y)-7 b(ou)29 +-b(can)f(use)h(an)f(external)g(in)n(teractiv)n(e)g(merge)g(to)r(ol)g(to) +-h(resolv)n(e)e(con\015icts)h(with)i(the)291 615 y(\015ag)c +-Fr(--external-merge)p Fx(.)31 b(F)-7 b(or)27 b(more)g(details)g(see)g +-(subsection)g(6.1.)p 527 791 2392 4 v 527 865 a Fr(--matches,)39 +-b(--patches,)h(--tags,)g(--no-deps)p 527 920 V 415 1096 +-a Fx(The)25 b Fr(--patches)p Fx(,)c Fr(--matches)p Fx(,)g +-Fr(--tags)p Fx(,)i(and)h Fr(--no-deps)d Fx(options)j(can)g(b)r(e)h +-(used)f(to)291 1196 y(select)j(whic)n(h)h(patc)n(hes)f(to)g(pull,)h(as) +-f(describ)r(ed)g(in)h(subsection)f(6.1.)p 527 1371 V +-527 1446 a Fr(--no-test,)39 b(--test)p 527 1494 V 415 +-1670 a Fx(If)26 b(y)n(ou)g(sp)r(ecify)g(the)g Fr(--test)e +-Fx(option,)i(pull)g(will)g(run)g(the)g(test)g(\(if)h(a)f(test)g +-(exists\))g(on)f(a)291 1769 y(scratc)n(h)g(cop)n(y)g(of)h(the)h(rep)r +-(ository)e(con)n(ten)n(ts)g(prior)h(to)g(actually)f(p)r(erforming)h +-(the)h(pull.)36 b(If)291 1869 y(the)28 b(test)f(fails,)h(the)g(pull)g +-(will)g(b)r(e)g(ab)r(orted.)p 527 2045 V 527 2119 a Fr(--verbose)p +-527 2156 V 415 2331 a Fx(Adding)i(the)h Fr(--verbose)26 +-b Fx(option)k(causes)e(another)h(section)h(to)g(app)r(ear)f(in)h(the)g +-(out-)291 2431 y(put)k(whic)n(h)h(also)e(displa)n(ys)g(a)h(summary)g +-(of)g(patc)n(hes)f(that)i(y)n(ou)f(ha)n(v)n(e)f(and)h(the)h(remote)291 +-2531 y(rep)r(ository)d(lac)n(ks.)54 b(Th)n(us,)35 b(the)f(follo)n(wing) +-f(syn)n(tax)f(can)i(b)r(e)g(used)g(to)f(sho)n(w)g(y)n(ou)g(all)h(the) +-291 2630 y(patc)n(h)27 b(di\013erences)g(b)r(et)n(w)n(een)h(t)n(w)n(o)f +-(rep)r(ositories:)291 2806 y Fr(darcs)41 b(pull)h(--dry-run)e +-(--verbose)291 3037 y Fk(6.6.3)112 b(darcs)38 b(push)291 +-3190 y Fr(Usage:)j(darcs)g(push)h([OPTION]...)d([REPOSITORY])415 +-3290 y Fx(Options:)652 3384 y Fr(--matches)h(PATTERN)183 +-b Fx(select)28 b(patc)n(hes)f(matc)n(hing)g(P)-7 b(A)g(TTERN)465 +-3484 y Fr(-p)99 b(--patches)40 b(REGEXP)227 b Fx(select)28 +-b(patc)n(hes)f(matc)n(hing)g(REGEXP)465 3584 y Fr(-t)99 +-b(--tags)41 b(REGEXP)358 b Fx(select)28 b(tags)f(matc)n(hing)g(REGEXP) +-652 3683 y Fr(--no-deps)531 b Fx(don't)28 b(automatically)f(ful\014ll)h +-(dep)r(endencies)465 3783 y Fr(-a)99 b(--all)707 b Fx(answ)n(er)27 +-b(y)n(es)f(to)i(all)f(patc)n(hes)465 3882 y Fr(-i)99 +-b(--interactive)355 b Fx(prompt)28 b(user)f(in)n(teractiv)n(ely)652 +-3982 y Fr(--sign)663 b Fx(sign)28 b(the)g(patc)n(h)f(with)h(y)n(our)e +-(gpg)h(k)n(ey)652 4082 y Fr(--sign-as)40 b(KEYID)271 +-b Fx(sign)28 b(the)g(patc)n(h)f(with)h(a)f(giv)n(en)g(k)n(eyid)652 +-4219 y Fr(--sign-ssl)39 b(IDFILE)1579 4169 y Fx(sign)28 +-b(the)g(patc)n(h)f(using)g(op)r(enssl)g(with)h(a)g(giv)n(en)1579 +-4269 y(priv)-5 b(ate)28 b(k)n(ey)652 4355 y Fr(--dont-sign)443 +-b Fx(don't)28 b(sign)f(the)h(patc)n(h)652 4454 y Fr(--dry-run)531 +-b Fx(don't)28 b(actually)f(tak)n(e)g(the)h(action)465 +-4554 y Fr(-s)99 b(--summary)531 b Fx(summarize)27 b(c)n(hanges)652 +-4654 y Fr(--no-summary)399 b Fx(don't)28 b(summarize)f(c)n(hanges)652 +-4783 y Fr(--repodir)40 b(DIRECTORY)1579 4741 y Fx(sp)r(ecify)28 +-b(the)g(rep)r(ository)e(directory)h(in)h(whic)n(h)f(to)1579 +-4841 y(run)652 4910 y Fr(--set-default)355 b Fx(set)28 +-b(default)g(rep)r(ository)e([DEF)-9 b(A)n(UL)i(T])652 +-5010 y Fr(--no-set-default)223 b Fx(don't)28 b(set)g(default)g(rep)r +-(ository)p eop end ++b(WITH)g(CHANGES)1450 b Fx(71)415 515 y(If)42 b(y)n(ou)e(pro)n(vide)g ++(more)g(than)h(one)g(rep)r(ository)f(as)g(an)h(argumen)n(t)f(to)h ++(pull,)k(darcs')291 615 y(b)r(eha)n(vior)23 b(is)h(determined)h(b)n(y)f ++(the)h(presence)e(of)i(the)f Fr(--complement)p Fx(,)d ++Fr(--intersection)p Fx(,)291 715 y(and)27 b Fr(--union)e ++Fx(\015ags.)415 897 y Fn(\017)41 b Fx(The)30 b(default)g(\()p ++Fr(--union)p Fx(\))d(b)r(eha)n(vior)h(is)i(to)f(pull)h(an)n(y)f(patc)n ++(hes)g(that)h(are)e(in)i(an)n(y)f(of)498 996 y(the)f(sp)r(eci\014ed)g ++(rep)r(ositories)e(\()p Fi(R)1513 1008 y Fm(1)1564 934 ++y Fg(S)1647 996 y Fi(R)1710 1008 y Fm(2)1761 934 y Fg(S)1844 ++996 y Fi(R)1907 1008 y Fm(3)1959 996 y Fi(:)14 b(:)g(:)o ++Fx(\).)415 1162 y Fn(\017)41 b Fx(If)27 b(y)n(ou)e(instead)h(sp)r ++(ecify)g(the)g Fr(--intersection)21 b Fx(\015ag,)k(darcs)g(will)h(only) ++g(pull)g(those)498 1262 y(patc)n(hes)h(whic)n(h)h(are)e(presen)n(t)h ++(in)h(all)f(source)g(rep)r(ositories)f(\()p Fi(R)2465 ++1274 y Fm(1)2516 1199 y Fg(T)2599 1262 y Fi(R)2662 1274 ++y Fm(2)2713 1199 y Fg(T)2796 1262 y Fi(R)2859 1274 y ++Fm(3)2910 1262 y Fi(:)14 b(:)g(:)p Fx(\).)415 1427 y ++Fn(\017)41 b Fx(If)28 b(y)n(ou)e(sp)r(ecify)h(the)h Fr(--complement)22 ++b Fx(\015ag,)27 b(darcs)f(will)h(only)g(pull)g(elemen)n(ts)g(in)h(the) ++498 1527 y(\014rst)39 b(rep)r(ository)e(that)i(do)f(not)h(exist)g(in)g ++(an)n(y)f(of)g(the)i(remaining)d(rep)r(ositories)3119 ++1497 y Fm(4)498 1627 y Fx(\()p Fi(R)593 1639 y Fm(1)631 ++1627 y Fn(n)p Fx(\()p Fi(R)768 1639 y Fm(2)819 1564 y ++Fg(S)902 1627 y Fi(R)965 1639 y Fm(3)1016 1564 y Fg(S)1099 ++1627 y Fi(:)14 b(:)g(:)p Fx(\)\).)p 527 1809 2392 4 v ++527 1883 a Fr(--external-merge)p 527 1938 V 415 2120 ++a Fx(Y)-7 b(ou)29 b(can)f(use)h(an)f(external)g(in)n(teractiv)n(e)g ++(merge)g(to)r(ol)g(to)h(resolv)n(e)e(con\015icts)h(with)i(the)291 ++2220 y(\015ag)c Fr(--external-merge)p Fx(.)31 b(F)-7 ++b(or)27 b(more)g(details)g(see)g(subsection)g(6.1.)p ++527 2402 V 527 2477 a Fr(--matches,)39 b(--patches,)h(--tags,)g ++(--no-deps)p 527 2532 V 415 2714 a Fx(The)25 b Fr(--patches)p ++Fx(,)c Fr(--matches)p Fx(,)g Fr(--tags)p Fx(,)i(and)h ++Fr(--no-deps)d Fx(options)j(can)g(b)r(e)h(used)f(to)291 ++2813 y(select)j(whic)n(h)h(patc)n(hes)f(to)g(pull,)h(as)f(describ)r(ed) ++g(in)h(subsection)f(6.1.)p 527 2995 V 527 3070 a Fr(--no-test,)39 ++b(--test)p 527 3118 V 415 3300 a Fx(If)26 b(y)n(ou)g(sp)r(ecify)g(the)g ++Fr(--test)e Fx(option,)i(pull)g(will)g(run)g(the)g(test)g(\(if)h(a)f ++(test)g(exists\))g(on)f(a)291 3400 y(scratc)n(h)g(cop)n(y)g(of)h(the)h ++(rep)r(ository)e(con)n(ten)n(ts)g(prior)h(to)g(actually)f(p)r ++(erforming)h(the)h(pull.)36 b(If)291 3499 y(the)28 b(test)f(fails,)h ++(the)g(pull)g(will)g(b)r(e)g(ab)r(orted.)p 527 3681 V ++527 3756 a Fr(--verbose)p 527 3793 V 415 3975 a Fx(Adding)i(the)h ++Fr(--verbose)26 b Fx(option)k(causes)e(another)h(section)h(to)g(app)r ++(ear)f(in)h(the)g(out-)291 4074 y(put)k(whic)n(h)h(also)e(displa)n(ys)g ++(a)h(summary)g(of)g(patc)n(hes)f(that)i(y)n(ou)f(ha)n(v)n(e)f(and)h ++(the)h(remote)291 4174 y(rep)r(ository)d(lac)n(ks.)54 ++b(Th)n(us,)35 b(the)f(follo)n(wing)f(syn)n(tax)f(can)i(b)r(e)g(used)g ++(to)f(sho)n(w)g(y)n(ou)g(all)h(the)291 4274 y(patc)n(h)27 ++b(di\013erences)g(b)r(et)n(w)n(een)h(t)n(w)n(o)f(rep)r(ositories:)291 ++4456 y Fr(darcs)41 b(pull)h(--dry-run)e(--verbose)p 291 ++4527 1146 4 v 383 4581 a Fp(4)418 4604 y Fl(The)32 b(\014rst)f(thing)h ++(darcs)g(will)e(do)i(is)f(remo)n(v)n(e)i(duplicates,)h(k)n(eeping)f ++(only)e(the)i(\014rst)f(sp)r(eci\014cation.)291 4683 ++y(This)25 b(is)h(noticeable)i(for)d(the)i(complemen)n(t)h(op)r ++(eration,)g(since)e(mathematically)i Ff(S)t Fe(n)p Ff(S)f ++Fe(!)d(;)p Fl(,)j(one)g(w)n(ould)291 4762 y(exp)r(ect)h(that)h(\\)p ++Fo(darcs)37 b(pull)f(--complement)j(repo1)e(repo1)p Fl(")28 ++b(w)n(ould)f(result)g(in)g(no)g(pulls,)g(but)h(the)g(du-)291 ++4841 y(plicate)e(elimination)f(remo)n(v)n(es)h(the)g(second)g ++Fo(repo1)p Fl(,)h(reducing)f(the)g(ab)r(o)n(v)n(e)h(to)f(e\013ectiv)n ++(ely)h(\\)p Fo(darcs)37 b(pull)291 4920 y(repo1)p Fl(".)52 ++b(The)31 b(exp)r(ected)i(functionalit)n(y)e(could)g(b)r(e)f(seen)h(via) ++g(\\)p Fo(darcs)37 b(get)f(-a)g(repo1)g(repo2;)h(darcs)291 ++4998 y(pull)f(--complement)j(repo1)d(repo2)p Fl(",)25 ++b(but)g(there)f(are)g(easier)f(w)n(a)n(ys)h(of)f(doing)i(nothing!)p ++eop end + %%Page: 72 72 + TeXDict begin 72 71 bop 739 282 a Fx(72)1378 b Fu(CHAPTER)27 +-b(6.)64 b(D)n(AR)n(CS)28 b(COMMANDS)863 515 y Fx(Adv)-5 +-b(anced)28 b(options:)1013 609 y Fr(--apply-as)39 b(USERNAME)97 +-b Fx(apply)27 b(patc)n(h)g(as)g(another)g(user)g(using)g(sudo)1013 +-749 y Fr(--apply-as-mysel)o(f)1941 697 y Fx(don't)g(use)h(sudo)f(to)h +-(apply)f(as)g(another)f(user)1941 797 y([DEF)-9 b(A)n(UL)i(T])1013 +-887 y Fr(--nolinks)532 b Fx(do)27 b(not)h(link)f(rep)r(ository)f(or)h +-(pristine)g(to)h(sibling)1013 1027 y Fr(--no-ssh-cm)1941 +-975 y Fx(don't)f(use)h(SSH)g(Con)n(trolMaster)d(feature)1941 +-1074 y([DEF)-9 b(A)n(UL)i(T])1013 1165 y Fr(--ssh-cm)1941 +-1173 y Fx(use)27 b(SSH)h(Con)n(trolMaster)e(feature)863 +-1261 y(Push)38 b(is)g(the)g(opp)r(osite)f(of)h(pull.)68 +-b(Push)38 b(allo)n(ws)e(y)n(ou)h(to)h(cop)n(y)f(c)n(hanges)f(from)i +-(the)739 1360 y(curren)n(t)27 b(rep)r(ository)f(in)n(to)h(another)g +-(rep)r(ository)-7 b(.)863 1460 y(F)g(or)34 b(ob)n(vious)f(reasons,)h(y) +-n(ou)g(can)g(only)g(push)g(to)h(rep)r(ositories)d(to)j(whic)n(h)f(y)n +-(ou)f(ha)n(v)n(e)739 1560 y(write)28 b(access.)36 b(In)28 +-b(addition,)g(y)n(ou)f(can)g(only)g(push)h(to)g(rep)r(os)f(that)h(y)n +-(ou)f(access)g(either)h(on)739 1659 y(the)33 b(lo)r(cal)f(\014le)h +-(system)g(or)f(with)h(ssh.)52 b(In)33 b(order)e(to)i(apply)g(with)g +-(ssh,)h(darcs)d(m)n(ust)i(also)739 1759 y(b)r(e)h(installed)g(on)f(the) +-h(remote)f(computer.)55 b(The)34 b(command)f(in)n(v)n(ok)n(ed)f(to)i +-(run)g(ssh)f(ma)n(y)739 1858 y(b)r(e)25 b(con\014gured)e(b)n(y)i(the)g +-Fr(DARCS_SSH)c Fx(en)n(vironmen)n(t)i(v)-5 b(ariable)24 +-b(\(see)h(subsection)f(4.4\).)35 b(The)739 1958 y(command)27 +-b(in)n(v)n(ok)n(ed)f(via)h(ssh)h(is)f(alw)n(a)n(ys)f +-Fr(darcs)p Fx(,)g(i.e.)h(the)h(darcs)f(executable)g(m)n(ust)h(b)r(e)g +-(in)739 2058 y(the)g(default)g(path)g(on)f(the)h(remote)f(mac)n(hine.) +-863 2157 y(Push)d(w)n(orks)e(b)n(y)h(creating)g(a)g(patc)n(h)h(bundle,) +-h(and)e(then)h(running)g(darcs)e(apply)i(in)g(the)739 +-2257 y(target)h(rep)r(ository)g(using)h(that)h(patc)n(h)f(bundle.)37 ++b(6.)64 b(D)n(AR)n(CS)28 b(COMMANDS)739 515 y Fk(6.6.3)112 ++b(darcs)38 b(push)739 672 y Fr(Usage:)j(darcs)h(push)f([OPTION]...)e ++([REPOSITORY])863 773 y Fx(Options:)1100 869 y Fr(--matches)h(PATTERN) ++184 b Fx(select)27 b(patc)n(hes)g(matc)n(hing)g(P)-7 ++b(A)g(TTERN)913 969 y Fr(-p)99 b(--patches)40 b(REGEXP)228 ++b Fx(select)27 b(patc)n(hes)g(matc)n(hing)g(REGEXP)913 ++1068 y Fr(-t)99 b(--tags)41 b(REGEXP)359 b Fx(select)27 ++b(tags)g(matc)n(hing)g(REGEXP)1100 1168 y Fr(--no-deps)532 ++b Fx(don't)28 b(automatically)e(ful\014ll)j(dep)r(endencies)913 ++1268 y Fr(-a)99 b(--all)708 b Fx(answ)n(er)26 b(y)n(es)h(to)g(all)h ++(patc)n(hes)913 1367 y Fr(-i)99 b(--interactive)356 b ++Fx(prompt)27 b(user)g(in)n(teractiv)n(ely)1100 1467 y ++Fr(--sign)664 b Fx(sign)27 b(the)h(patc)n(h)f(with)h(y)n(our)f(gpg)f(k) ++n(ey)1100 1567 y Fr(--sign-as)40 b(KEYID)272 b Fx(sign)27 ++b(the)h(patc)n(h)f(with)h(a)g(giv)n(en)e(k)n(eyid)1100 ++1704 y Fr(--sign-ssl)39 b(IDFILE)2028 1654 y Fx(sign)27 ++b(the)h(patc)n(h)f(using)g(op)r(enssl)h(with)g(a)f(giv)n(en)2028 ++1754 y(priv)-5 b(ate)27 b(k)n(ey)1100 1840 y Fr(--dont-sign)444 ++b Fx(don't)28 b(sign)f(the)h(patc)n(h)1100 1939 y Fr(--dry-run)532 ++b Fx(don't)28 b(actually)f(tak)n(e)f(the)i(action)1100 ++2039 y Fr(--xml-output)400 b Fx(generate)26 b(XML)i(formatted)f(output) ++913 2138 y Fr(-s)99 b(--summary)532 b Fx(summarize)27 ++b(c)n(hanges)1100 2238 y Fr(--no-summary)400 b Fx(don't)28 ++b(summarize)e(c)n(hanges)1100 2367 y Fr(--repodir)40 ++b(DIRECTORY)2028 2326 y Fx(sp)r(ecify)28 b(the)g(rep)r(ository)e ++(directory)g(in)i(whic)n(h)f(to)2028 2425 y(run)1100 ++2495 y Fr(--set-default)356 b Fx(set)27 b(default)h(rep)r(ository)e ++([DEF)-9 b(A)n(UL)i(T])1100 2595 y Fr(--no-set-default)224 ++b Fx(don't)28 b(set)f(default)h(rep)r(ository)863 2692 ++y(Adv)-5 b(anced)28 b(options:)1013 2788 y Fr(--apply-as)39 ++b(USERNAME)97 b Fx(apply)27 b(patc)n(h)g(as)g(another)g(user)g(using)g ++(sudo)1013 2928 y Fr(--apply-as-mysel)o(f)1941 2876 y ++Fx(don't)g(use)h(sudo)f(to)h(apply)f(as)g(another)f(user)1941 ++2975 y([DEF)-9 b(A)n(UL)i(T])1013 3066 y Fr(--nolinks)532 ++b Fx(do)27 b(not)h(link)f(rep)r(ository)f(or)h(pristine)g(to)h(sibling) ++1013 3195 y Fr(--remote-repo)38 b(URL)1941 3153 y Fx(sp)r(ecify)28 ++b(the)g(remote)e(rep)r(ository)g(URL)i(to)g(w)n(ork)1941 ++3253 y(with)1013 3363 y Fr(--no-ssh-cm)1941 3311 y Fx(don't)f(use)h ++(SSH)g(Con)n(trolMaster)d(feature)1941 3410 y([DEF)-9 ++b(A)n(UL)i(T])1013 3501 y Fr(--ssh-cm)1941 3509 y Fx(use)27 ++b(SSH)h(Con)n(trolMaster)e(feature)863 3598 y(Push)38 ++b(is)g(the)g(opp)r(osite)f(of)h(pull.)68 b(Push)38 b(allo)n(ws)e(y)n ++(ou)h(to)h(cop)n(y)f(c)n(hanges)f(from)i(the)739 3698 ++y(curren)n(t)27 b(rep)r(ository)f(in)n(to)h(another)g(rep)r(ository)-7 ++b(.)863 3799 y(F)g(or)34 b(ob)n(vious)f(reasons,)h(y)n(ou)g(can)g(only) ++g(push)g(to)h(rep)r(ositories)d(to)j(whic)n(h)f(y)n(ou)f(ha)n(v)n(e)739 ++3899 y(write)28 b(access.)36 b(In)28 b(addition,)g(y)n(ou)f(can)g(only) ++g(push)h(to)g(rep)r(os)f(that)h(y)n(ou)f(access)g(either)h(on)739 ++3999 y(the)33 b(lo)r(cal)f(\014le)h(system)g(or)f(with)h(ssh.)52 ++b(In)33 b(order)e(to)i(apply)g(with)g(ssh,)h(darcs)d(m)n(ust)i(also)739 ++4098 y(b)r(e)h(installed)g(on)f(the)h(remote)f(computer.)55 ++b(The)34 b(command)f(in)n(v)n(ok)n(ed)f(to)i(run)g(ssh)f(ma)n(y)739 ++4198 y(b)r(e)25 b(con\014gured)e(b)n(y)i(the)g Fr(DARCS_SSH)c ++Fx(en)n(vironmen)n(t)i(v)-5 b(ariable)24 b(\(see)h(subsection)f(4.4\).) ++35 b(The)739 4298 y(command)27 b(in)n(v)n(ok)n(ed)f(via)h(ssh)h(is)f ++(alw)n(a)n(ys)f Fr(darcs)p Fx(,)g(i.e.)h(the)h(darcs)f(executable)g(m)n ++(ust)h(b)r(e)g(in)739 4397 y(the)g(default)g(path)g(on)f(the)h(remote)f ++(mac)n(hine.)863 4499 y(Push)d(w)n(orks)e(b)n(y)h(creating)g(a)g(patc)n ++(h)h(bundle,)h(and)e(then)h(running)g(darcs)e(apply)i(in)g(the)739 ++4598 y(target)h(rep)r(ository)g(using)h(that)h(patc)n(h)f(bundle.)37 + b(This)26 b(means)g(that)h(the)g(default)g(options)739 +-2357 y(for)g Fs(apply)37 b Fx(in)28 b(the)h Fs(tar)l(get)35 ++4698 y(for)g Fs(apply)37 b Fx(in)28 b(the)h Fs(tar)l(get)35 + b Fx(rep)r(ository)26 b(\(suc)n(h)i(as,)f(for)h(example,)f +-Fr(--test)p Fx(\))f(will)i(a\013ect)g(the)739 2456 y(b)r(eha)n(vior)34 ++Fr(--test)p Fx(\))f(will)i(a\013ect)g(the)739 4797 y(b)r(eha)n(vior)34 + b(of)i(push.)61 b(This)36 b(also)e(means)i(that)g(push)g(is)f(somewhat) +-g(less)g(e\016cien)n(t)h(than)739 2556 y(pull.)863 2655 +-y(When)29 b(y)n(ou)d(receiv)n(e)h(an)g(error)f(message)g(suc)n(h)h(as) +-739 2805 y Fr(bash:)41 b(darcs:)h(command)e(not)j(found)739 +-2955 y Fx(then)36 b(this)f(means)g(that)g(the)h(darcs)e(on)h(the)h +-(remote)e(mac)n(hine)h(could)g(not)g(b)r(e)h(started.)739 +-3055 y(Mak)n(e)25 b(sure)h(that)h(the)f(darcs)g(executable)g(is)g +-(called)g Fr(darcs)e Fx(and)i(is)h(found)f(in)h(the)g(default)739 +-3154 y(path.)59 b(The)35 b(default)h(path)f(can)f(b)r(e)i(di\013eren)n +-(t)f(in)g(in)n(teractiv)n(e)f(and)h(in)g(non-in)n(teractiv)n(e)739 +-3254 y(shells.)h(Sa)n(y)739 3404 y Fr(ssh)42 b(login@remote.mach)o(in)o +-(e)c(darcs)739 3554 y Fx(to)27 b(try)h(whether)f(the)h(remote)f(darcs)g +-(can)g(b)r(e)h(found,)g(or)739 3704 y Fr(ssh)42 b(login@remote.mach)o +-(in)o(e)c('echo)j($PATH')739 3853 y Fx(\(note)28 b(the)g(single)f +-(quotes\))g(to)h(c)n(hec)n(k)e(the)i(default)g(path.)p +-975 4016 2392 4 v 975 4090 a Fr(--apply-as)p 975 4145 +-V 863 4308 a Fx(If)f(y)n(ou)e(giv)n(e)g(the)h Fr(--apply-as)c +-Fx(\015ag,)k(darcs)e(will)i(use)g(sudo)g(to)f(apply)h(the)g(c)n(hanges) +-f(as)739 4408 y(a)f(di\013eren)n(t)g(user.)35 b(This)25 +-b(can)f(b)r(e)g(useful)h(if)g(y)n(ou)e(w)n(an)n(t)h(to)g(set)h(up)f(a)g +-(system)g(where)g(sev)n(eral)739 4507 y(users)33 b(can)h(mo)r(dify)h +-(the)g(same)f(rep)r(ository)-7 b(,)34 b(but)h(y)n(ou)f(don't)g(w)n(an)n +-(t)g(to)g(allo)n(w)g(them)h(full)739 4607 y(write)c(access.)46 +-b(This)31 b(isn't)g(secure)f(against)g(skilled)h(malicious)f(attac)n(k) +-n(ers,)g(but)i(at)f(least)739 4706 y(can)c(protect)g(y)n(our)g(rep)r +-(ository)f(from)h(clumsy)-7 b(,)28 b(inept)g(or)e(lazy)h(users.)p +-975 4869 V 975 4944 a Fr(--matches,)40 b(--patches,)f(--tags,)i +-(--no-deps)p 975 4998 V eop end ++g(less)g(e\016cien)n(t)h(than)739 4897 y(pull.)863 4998 ++y(When)29 b(y)n(ou)d(receiv)n(e)h(an)g(error)f(message)g(suc)n(h)h(as)p ++eop end + %%Page: 73 73 + TeXDict begin 73 72 bop 291 282 a Fu(6.6.)63 b(W)n(ORKING)28 +-b(WITH)g(CHANGES)1450 b Fx(73)415 515 y(The)25 b Fr(--patches)p +-Fx(,)c Fr(--matches)p Fx(,)g Fr(--tags)p Fx(,)i(and)h +-Fr(--no-deps)d Fx(options)j(can)g(b)r(e)h(used)f(to)291 +-615 y(select)j(whic)n(h)h(patc)n(hes)f(to)g(push,)h(as)f(describ)r(ed)g +-(in)h(subsection)f(6.1.)415 888 y(When)h(there)f(are)g(con\015icts,)g +-(the)h(b)r(eha)n(vior)e(of)h(push)h(is)f(determined)h(b)n(y)f(the)g +-(default)291 987 y(\015ags)d(to)h Fr(apply)e Fx(in)j(the)g +-Fs(tar)l(get)33 b Fx(rep)r(ository)-7 b(.)34 b(Most)25 +-b(commonly)-7 b(,)25 b(for)g(pushed-to)g(rep)r(osito-)291 +-1087 y(ries,)k(y)n(ou'd)g(lik)n(e)g(to)g(ha)n(v)n(e)f +-Fr(--dont-allow-con)o(fli)o(ct)o(s)23 b Fx(as)29 b(a)g(default)h +-(option)f(to)g(apply)291 1186 y(\(b)n(y)36 b(default,)j(it)e(is)g +-(already)e(the)i(default.)14 b(.)g(.)g(\).)64 b(If)37 +-b(this)g(is)f(the)h(case,)h(when)f(there)f(are)291 1286 +-y(con\015icts)c(on)g(push,)h(darcs)f(will)g(fail)h(with)f(an)g(error)f +-(message.)50 b(Y)-7 b(ou)32 b(can)g(then)h(resolv)n(e)291 +-1386 y(b)n(y)h(pulling)i(the)f(con\015icting)g(patc)n(h,)h(recording)e +-(a)g(resolution)g(and)h(then)h(pushing)f(the)291 1485 ++b(WITH)g(CHANGES)1450 b Fx(73)291 515 y Fr(bash:)41 b(darcs:)g(command) ++g(not)h(found)291 687 y Fx(then)35 b(this)h(means)f(that)g(the)h(darcs) ++e(on)h(the)g(remote)g(mac)n(hine)g(could)g(not)g(b)r(e)g(started.)291 ++787 y(Mak)n(e)25 b(sure)h(that)g(the)h(darcs)e(executable)h(is)h ++(called)f Fr(darcs)e Fx(and)i(is)g(found)h(in)g(the)f(default)291 ++886 y(path.)59 b(The)35 b(default)g(path)g(can)g(b)r(e)g(di\013eren)n ++(t)g(in)h(in)n(teractiv)n(e)e(and)g(in)i(non-in)n(teractiv)n(e)291 ++986 y(shells.)g(Sa)n(y)291 1160 y Fr(ssh)42 b(login@remote.mac)o(hi)o ++(ne)37 b(darcs)291 1332 y Fx(to)27 b(try)g(whether)h(the)g(remote)f ++(darcs)f(can)h(b)r(e)h(found,)g(or)291 1506 y Fr(ssh)42 ++b(login@remote.mac)o(hi)o(ne)37 b('echo)42 b($PATH')291 ++1678 y Fx(\(note)27 b(the)h(single)f(quotes\))h(to)f(c)n(hec)n(k)g(the) ++h(default)g(path.)p 527 1868 2392 4 v 527 1943 a Fr(--apply-as)p ++527 1998 V 415 2189 a Fx(If)e(y)n(ou)g(giv)n(e)f(the)h ++Fr(--apply-as)c Fx(\015ag,)j(darcs)g(will)h(use)g(sudo)f(to)h(apply)g ++(the)g(c)n(hanges)f(as)291 2288 y(a)e(di\013eren)n(t)i(user.)35 ++b(This)24 b(can)g(b)r(e)h(useful)g(if)g(y)n(ou)e(w)n(an)n(t)h(to)g(set) ++g(up)h(a)f(system)g(where)g(sev)n(eral)291 2388 y(users)33 ++b(can)h(mo)r(dify)h(the)g(same)e(rep)r(ository)-7 b(,)35 ++b(but)g(y)n(ou)f(don't)g(w)n(an)n(t)g(to)g(allo)n(w)f(them)i(full)291 ++2487 y(write)30 b(access.)46 b(This)31 b(isn't)h(secure)e(against)g ++(skilled)h(malicious)f(attac)n(k)n(ers,)g(but)h(at)g(least)291 ++2587 y(can)c(protect)g(y)n(our)f(rep)r(ository)g(from)i(clumsy)-7 ++b(,)27 b(inept)h(or)f(lazy)g(users.)p 527 2778 V 527 ++2852 a Fr(--matches,)39 b(--patches,)h(--tags,)g(--no-deps)p ++527 2907 V 415 3098 a Fx(The)25 b Fr(--patches)p Fx(,)c ++Fr(--matches)p Fx(,)g Fr(--tags)p Fx(,)i(and)h Fr(--no-deps)d ++Fx(options)j(can)g(b)r(e)h(used)f(to)291 3197 y(select)j(whic)n(h)h ++(patc)n(hes)f(to)g(push,)h(as)f(describ)r(ed)g(in)h(subsection)f(6.1.) ++415 3299 y(When)h(there)f(are)g(con\015icts,)g(the)h(b)r(eha)n(vior)e ++(of)h(push)h(is)f(determined)h(b)n(y)f(the)g(default)291 ++3399 y(\015ags)d(to)h Fr(apply)e Fx(in)j(the)g Fs(tar)l(get)33 ++b Fx(rep)r(ository)-7 b(.)34 b(Most)25 b(commonly)-7 ++b(,)25 b(for)g(pushed-to)g(rep)r(osito-)291 3498 y(ries,)k(y)n(ou'd)g ++(lik)n(e)g(to)g(ha)n(v)n(e)f Fr(--dont-allow-con)o(fli)o(ct)o(s)23 ++b Fx(as)29 b(a)g(default)h(option)f(to)g(apply)291 3598 ++y(\(b)n(y)36 b(default,)j(it)e(is)g(already)e(the)i(default.)14 ++b(.)g(.)g(\).)64 b(If)37 b(this)g(is)f(the)h(case,)h(when)f(there)f ++(are)291 3697 y(con\015icts)c(on)g(push,)h(darcs)f(will)g(fail)h(with)f ++(an)g(error)f(message.)50 b(Y)-7 b(ou)32 b(can)g(then)h(resolv)n(e)291 ++3797 y(b)n(y)h(pulling)i(the)f(con\015icting)g(patc)n(h,)h(recording)e ++(a)g(resolution)g(and)h(then)h(pushing)f(the)291 3897 + y(resolution)26 b(together)h(with)h(the)g(con\015icting)f(patc)n(h.)415 +-1758 y(Darcs)f(do)r(es)g(not)g(ha)n(v)n(e)f(an)h(explicit)h(w)n(a)n(y)e ++3998 y(Darcs)f(do)r(es)g(not)g(ha)n(v)n(e)f(an)h(explicit)h(w)n(a)n(y)e + (to)h(tell)h(y)n(ou)e(whic)n(h)i(patc)n(h)f(con\015icted,)g(only)291 +-1858 y(the)g(\014le)g(name.)36 b(Y)-7 b(ou)25 b(ma)n(y)g(w)n(an)n(t)h ++4098 y(the)g(\014le)g(name.)36 b(Y)-7 b(ou)25 b(ma)n(y)g(w)n(an)n(t)h + (to)f(pull)h(all)g(the)g(patc)n(hes)f(from)g(the)h(remote)g(rep)r +-(ository)291 1957 y(just)h(to)g(b)r(e)g(sure.)36 b(If)27 ++(ository)291 4198 y(just)h(to)g(b)r(e)g(sure.)36 b(If)27 + b(y)n(ou)f(don't)h(w)n(an)n(t)f(to)h(do)g(this)g(in)g(y)n(our)e(w)n +-(orking)g(directory)-7 b(,)26 b(y)n(ou)g(can)291 2057 ++(orking)g(directory)-7 b(,)26 b(y)n(ou)g(can)291 4297 + y(create)g(another)h(darcs)f(w)n(orking)g(directory)h(for)g(this)h +-(purp)r(ose.)415 2329 y(If)e(y)n(ou)f(w)n(an)n(t,)g(y)n(ou)g(could)g ++(purp)r(ose.)415 4399 y(If)e(y)n(ou)f(w)n(an)n(t,)g(y)n(ou)g(could)g + (set)g(the)h(target)e(rep)r(ository)g(to)i(use)f Fr(--allow-conflict)o +-(s)p Fx(.)291 2429 y(In)37 b(this)h(case)f(con\015icting)g(patc)n(hes)g ++(s)p Fx(.)291 4498 y(In)37 b(this)h(case)f(con\015icting)g(patc)n(hes)g + (will)h(b)r(e)g(applied,)i(but)e(the)g(con\015icts)f(will)h(not)g(b)r +-(e)291 2529 y(mark)n(ed)26 b(in)i(the)g(w)n(orking)e(directory)-7 +-b(.)415 2801 y(If,)24 b(on)e(the)h(other)f(hand,)h(y)n(ou)f(ha)n(v)n(e) ++(e)291 4598 y(mark)n(ed)26 b(in)i(the)g(w)n(orking)e(directory)-7 ++b(.)415 4700 y(If,)24 b(on)e(the)h(other)f(hand,)h(y)n(ou)f(ha)n(v)n(e) + f Fr(--mark-conflicts)16 b Fx(sp)r(eci\014ed)23 b(as)f(a)g(default)h +-(\015ag)291 2901 y(for)k(apply)g(in)h(the)g(target)f(rep)r(ository)-7 ++(\015ag)291 4799 y(for)k(apply)g(in)h(the)g(target)f(rep)r(ository)-7 + b(,)27 b(when)g(there)h(is)g(a)f(con\015ict,)h(it)g(will)g(b)r(e)g +-(mark)n(ed)f(in)291 3001 y(the)i(w)n(orking)f(directory)g(of)h(the)h ++(mark)n(ed)f(in)291 4899 y(the)i(w)n(orking)f(directory)g(of)h(the)h + (target)e(rep)r(ository)-7 b(.)40 b(In)30 b(this)f(case,)g(y)n(ou)g +-(should)g(resolv)n(e)291 3100 y(the)f(con\015ict)f(in)h(the)g(target)f +-(rep)r(ository)f(itself.)291 4251 y Fk(6.6.4)112 b(darcs)38 +-b(send)291 4726 y Fr(Usage:)j(darcs)g(send)h([OPTION]...)d +-([REPOSITORY])415 4998 y Fx(Options:)p eop end ++(should)g(resolv)n(e)291 4998 y(the)f(con\015ict)f(in)h(the)g(target)f ++(rep)r(ository)f(itself.)p eop end + %%Page: 74 74 + TeXDict begin 74 73 bop 739 282 a Fx(74)1378 b Fu(CHAPTER)27 +-b(6.)64 b(D)n(AR)n(CS)28 b(COMMANDS)1100 502 y Fr(--matches)40 +-b(PATTERN)489 b Fx(select)27 b(patc)n(hes)g(matc)n(hing)g(P)-7 +-b(A)g(TTERN)913 602 y Fr(-p)99 b(--patches)40 b(REGEXP)533 ++b(6.)64 b(D)n(AR)n(CS)28 b(COMMANDS)739 515 y Fk(6.6.4)112 ++b(darcs)38 b(send)739 673 y Fr(Usage:)j(darcs)h(send)f([OPTION]...)e ++([REPOSITORY])863 775 y Fx(Options:)1100 872 y Fr(--matches)h(PATTERN) ++489 b Fx(select)27 b(patc)n(hes)g(matc)n(hing)g(P)-7 ++b(A)g(TTERN)913 972 y Fr(-p)99 b(--patches)40 b(REGEXP)533 + b Fx(select)27 b(patc)n(hes)g(matc)n(hing)g(REGEXP)913 +-701 y Fr(-t)99 b(--tags)41 b(REGEXP)664 b Fx(select)27 +-b(tags)g(matc)n(hing)g(REGEXP)1100 801 y Fr(--no-deps)837 ++1071 y Fr(-t)99 b(--tags)41 b(REGEXP)664 b Fx(select)27 ++b(tags)g(matc)n(hing)g(REGEXP)1100 1171 y Fr(--no-deps)837 + b Fx(don't)28 b(automatically)e(ful\014ll)j(dep)r(endencies)913 +-901 y Fr(-a)99 b(--all)1013 b Fx(answ)n(er)26 b(y)n(es)h(to)g(all)h +-(patc)n(hes)913 1000 y Fr(-i)99 b(--interactive)661 b +-Fx(prompt)27 b(user)g(in)n(teractiv)n(ely)1100 1100 y ++1271 y Fr(-a)99 b(--all)1013 b Fx(answ)n(er)26 b(y)n(es)h(to)g(all)h ++(patc)n(hes)913 1370 y Fr(-i)99 b(--interactive)661 b ++Fx(prompt)27 b(user)g(in)n(teractiv)n(ely)1100 1470 y + Fr(--from)41 b(EMAIL)708 b Fx(sp)r(ecify)28 b(email)f(address)913 +-1199 y Fr(-A)99 b(--author)40 b(EMAIL)621 b Fx(sp)r(ecify)28 +-b(author)f(id)1100 1299 y Fr(--to)42 b(EMAIL)795 b Fx(sp)r(ecify)28 +-b(destination)f(email)1100 1439 y Fr(--cc)42 b(EMAIL)2333 +-1391 y Fx(mail)27 b(results)g(to)h(additional)f(EMAIL\(s\).)2333 +-1491 y(Requires)g({reply)1100 1577 y Fr(--subject)40 ++1570 y Fr(-A)99 b(--author)40 b(EMAIL)621 b Fx(sp)r(ecify)28 ++b(author)f(id)1100 1669 y Fr(--to)42 b(EMAIL)795 b Fx(sp)r(ecify)28 ++b(destination)f(email)1100 1809 y Fr(--cc)42 b(EMAIL)2333 ++1761 y Fx(mail)27 b(results)g(to)h(additional)f(EMAIL\(s\).)2333 ++1861 y(Requires)g({reply)1100 1947 y Fr(--subject)40 + b(SUBJECT)489 b Fx(sp)r(ecify)28 b(mail)f(sub)5 b(ject)913 +-1676 y Fr(-o)99 b(--output)40 b(FILE)665 b Fx(sp)r(ecify)28 +-b(output)g(\014lename)913 1776 y Fr(-O)99 b(--output-auto-na)o(me)442 ++2046 y Fr(-o)99 b(--output)40 b(FILE)665 b Fx(sp)r(ecify)28 ++b(output)g(\014lename)913 2146 y Fr(-O)99 b(--output-auto-na)o(me)442 + b Fx(output)28 b(to)g(automatically)e(named)i(\014le)1100 +-1876 y Fr(--sign)969 b Fx(sign)27 b(the)h(patc)n(h)f(with)h(y)n(our)f +-(gpg)g(k)n(ey)1100 1975 y Fr(--sign-as)40 b(KEYID)577 ++2246 y Fr(--sign)969 b Fx(sign)27 b(the)h(patc)n(h)f(with)h(y)n(our)f ++(gpg)g(k)n(ey)1100 2345 y Fr(--sign-as)40 b(KEYID)577 + b Fx(sign)27 b(the)h(patc)n(h)f(with)h(a)g(giv)n(en)e(k)n(eyid)1100 +-2113 y Fr(--sign-ssl)39 b(IDFILE)2333 2063 y Fx(sign)27 ++2483 y Fr(--sign-ssl)39 b(IDFILE)2333 2433 y Fx(sign)27 + b(the)h(patc)n(h)f(using)h(op)r(enssl)f(with)h(a)f(giv)n(en)2333 +-2162 y(priv)-5 b(ate)27 b(k)n(ey)1100 2248 y Fr(--dont-sign)749 +-b Fx(don't)28 b(sign)f(the)h(patc)n(h)913 2378 y Fr(-u)99 +-b(--unified)2333 2336 y Fx(output)28 b(patc)n(h)f(in)h(a)f(darcs-sp)r +-(eci\014c)g(format)2333 2435 y(similar)g(to)g(di\013)h(-u)1100 +-2505 y Fr(--dry-run)837 b Fx(don't)28 b(actually)f(tak)n(e)g(the)g +-(action)913 2605 y Fr(-s)99 b(--summary)837 b Fx(summarize)27 +-b(c)n(hanges)1100 2704 y Fr(--no-summary)705 b Fx(don't)28 +-b(summarize)e(c)n(hanges)1100 2804 y Fr(--edit-descripti)o(on)442 ++2532 y(priv)-5 b(ate)27 b(k)n(ey)1100 2618 y Fr(--dont-sign)749 ++b Fx(don't)28 b(sign)f(the)h(patc)n(h)1100 2718 y Fr(--dry-run)837 ++b Fx(don't)28 b(actually)f(tak)n(e)g(the)g(action)1100 ++2818 y Fr(--xml-output)705 b Fx(generate)26 b(XML)i(formatted)g(output) ++913 2917 y Fr(-s)99 b(--summary)837 b Fx(summarize)27 ++b(c)n(hanges)1100 3017 y Fr(--no-summary)705 b Fx(don't)28 ++b(summarize)e(c)n(hanges)1100 3117 y Fr(--edit-descripti)o(on)442 + b Fx(edit)28 b(the)g(patc)n(h)f(bundle)h(description)1100 +-2904 y Fr(--dont-edit-desc)o(rip)o(ti)o(on)224 b Fx(don't)28 +-b(edit)g(the)g(patc)n(h)f(bundle)h(description)1100 3003 ++3216 y Fr(--dont-edit-desc)o(rip)o(ti)o(on)224 b Fx(don't)28 ++b(edit)g(the)g(patc)n(h)f(bundle)h(description)1100 3316 + y Fr(--set-default)661 b Fx(set)28 b(default)g(rep)r(ository)e([DEF)-9 +-b(A)n(UL)i(T])1100 3103 y Fr(--no-set-default)529 b Fx(don't)28 +-b(set)f(default)h(rep)r(ository)1100 3232 y Fr(--repodir)40 +-b(DIRECTORY)2333 3190 y Fx(sp)r(ecify)28 b(the)g(rep)r(ository)e +-(directory)g(in)i(whic)n(h)f(to)2333 3290 y(run)1100 +-3360 y Fr(--sendmail-comma)o(nd)37 b(COMMAND)97 b Fx(sp)r(ecify)28 +-b(sendmail)f(command)863 3457 y(Adv)-5 b(anced)28 b(options:)1013 +-3553 y Fr(--logfile)40 b(FILE)272 b Fx(giv)n(e)27 b(patc)n(h)g(name)g +-(and)h(commen)n(t)f(in)h(\014le)1013 3653 y Fr(--delete-logfile)180 +-b Fx(delete)28 b(the)g(log\014le)f(when)g(done)1013 3752 +-y Fr(--context)40 b(FILENAME)1897 3760 y Fx(send)28 b(to)f(con)n(text)g +-(stored)g(in)h(FILENAME)1013 3892 y Fr(--no-ssh-cm)1897 +-3840 y Fx(don't)g(use)f(SSH)h(Con)n(trolMaster)e(feature)1897 +-3939 y([DEF)-9 b(A)n(UL)i(T])1013 4030 y Fr(--ssh-cm)1897 +-4038 y Fx(use)27 b(SSH)i(Con)n(trolMaster)c(feature)863 +-4127 y(Send)k(is)f(used)f(to)h(prepare)f(a)g(bundle)i(of)f(patc)n(hes)f +-(that)h(can)g(b)r(e)g(applied)g(to)g(a)f(target)739 4227 +-y(rep)r(ository)-7 b(.)63 b(Send)38 b(accepts)e(the)h(URL)g(of)g(the)h +-(rep)r(ository)d(as)h(an)h(argumen)n(t.)64 b(When)739 +-4327 y(called)29 b(without)h(an)f(argumen)n(t,)g(send)g(will)h(use)f ++b(A)n(UL)i(T])1100 3415 y Fr(--no-set-default)529 b Fx(don't)28 ++b(set)f(default)h(rep)r(ository)1100 3545 y Fr(--repodir)40 ++b(DIRECTORY)2333 3503 y Fx(sp)r(ecify)28 b(the)g(rep)r(ository)e ++(directory)g(in)i(whic)n(h)f(to)2333 3603 y(run)1100 ++3672 y Fr(--sendmail-comma)o(nd)37 b(COMMAND)97 b Fx(sp)r(ecify)28 ++b(sendmail)f(command)863 3771 y(Adv)-5 b(anced)28 b(options:)1013 ++3867 y Fr(--logfile)40 b(FILE)272 b Fx(giv)n(e)27 b(patc)n(h)g(name)g ++(and)h(commen)n(t)f(in)h(\014le)1013 3967 y Fr(--delete-logfile)180 ++b Fx(delete)28 b(the)g(log\014le)f(when)g(done)1013 4096 ++y Fr(--remote-repo)38 b(URL)1897 4055 y Fx(sp)r(ecify)28 ++b(the)g(remote)f(rep)r(ository)f(URL)i(to)f(w)n(ork)1897 ++4154 y(with)1013 4224 y Fr(--context)40 b(FILENAME)1897 ++4232 y Fx(send)28 b(to)f(con)n(text)g(stored)g(in)h(FILENAME)1013 ++4364 y Fr(--no-ssh-cm)1897 4311 y Fx(don't)g(use)f(SSH)h(Con)n ++(trolMaster)e(feature)1897 4411 y([DEF)-9 b(A)n(UL)i(T])1013 ++4502 y Fr(--ssh-cm)1897 4510 y Fx(use)27 b(SSH)i(Con)n(trolMaster)c ++(feature)863 4600 y(Send)k(is)f(used)f(to)h(prepare)f(a)g(bundle)i(of)f ++(patc)n(hes)f(that)h(can)g(b)r(e)g(applied)g(to)g(a)f(target)739 ++4700 y(rep)r(ository)-7 b(.)63 b(Send)38 b(accepts)e(the)h(URL)g(of)g ++(the)h(rep)r(ository)d(as)h(an)h(argumen)n(t.)64 b(When)739 ++4799 y(called)29 b(without)h(an)f(argumen)n(t,)g(send)g(will)h(use)f + (the)h(most)f(recen)n(t)g(rep)r(ository)f(that)h(w)n(as)739 +-4426 y(either)i(pushed)h(to,)g(pulled)g(from)f(or)g(sen)n(t)g(to.)48 ++4899 y(either)i(pushed)h(to,)g(pulled)g(from)f(or)g(sen)n(t)g(to.)48 + b(By)31 b(default,)i(the)f(patc)n(h)f(bundle)h(is)f(sen)n(t)739 +-4526 y(b)n(y)c(email,)h(although)f(y)n(ou)f(ma)n(y)h(sa)n(v)n(e)f(it)i +-(to)g(a)f(\014le.)863 4627 y(Do)19 b(not)f(confuse)g(the)h +-Fr(--author)c Fx(options)j(with)h(the)g(return)f(address)f(that)h +-Fr(darcs)42 b(send)739 4727 y Fx(will)28 b(set)f(for)g(y)n(our)g(patc)n +-(h)g(bundle.)863 4828 y(F)-7 b(or)27 b(example,)h(if)g(y)n(ou)f(ha)n(v) +-n(e)f(t)n(w)n(o)h(email)g(addresses)f(A)i(and)g(B:)780 +-4998 y(If)19 b(y)n(ou)f(use)h Fr(--author)40 b(A)18 b +-Fx(but)i(y)n(our)d(mac)n(hine)h(is)h(con\014gured)e(to)i(send)g(mail)f +-(from)g(address)p eop end ++4998 y(b)n(y)c(email,)h(although)f(y)n(ou)f(ma)n(y)h(sa)n(v)n(e)f(it)i ++(to)g(a)f(\014le.)p eop end + %%Page: 75 75 + TeXDict begin 75 74 bop 291 282 a Fu(6.6.)63 b(W)n(ORKING)28 +-b(WITH)g(CHANGES)1450 b Fx(75)498 515 y(B)28 b(b)n(y)f(default,)h(then) +-g(the)g(return)f(address)g(on)g(y)n(our)f(message)g(will)i(b)r(e)g(B.) +-332 677 y(If)i(y)n(ou)f(use)h Fr(--from)41 b(A)30 b Fx(and)f(y)n(our)g ++b(WITH)g(CHANGES)1450 b Fx(75)415 515 y(Do)18 b(not)h(confuse)f(the)h ++Fr(--author)c Fx(options)j(with)h(the)f(return)g(address)f(that)i ++Fr(darcs)42 b(send)291 615 y Fx(will)27 b(set)h(for)f(y)n(our)f(patc)n ++(h)i(bundle.)415 718 y(F)-7 b(or)27 b(example,)g(if)h(y)n(ou)f(ha)n(v)n ++(e)g(t)n(w)n(o)f(email)i(addresses)e(A)i(and)f(B:)332 ++894 y(If)19 b(y)n(ou)f(use)h Fr(--author)40 b(A)18 b ++Fx(but)h(y)n(our)f(mac)n(hine)g(is)h(con\014gured)e(to)i(send)f(mail)h ++(from)f(address)498 994 y(B)28 b(b)n(y)f(default,)h(then)g(the)g ++(return)f(address)g(on)g(y)n(our)f(message)g(will)i(b)r(e)g(B.)332 ++1173 y(If)i(y)n(ou)f(use)h Fr(--from)41 b(A)30 b Fx(and)f(y)n(our)g + (mail)h(clien)n(t)g(supp)r(orts)f(setting)h(the)g(F)-7 +-b(rom:)41 b(address)498 777 y(arbitrarily)30 b(\(some)i(non-Unix-lik)n ++b(rom:)41 b(address)498 1273 y(arbitrarily)30 b(\(some)i(non-Unix-lik)n + (e)f(mail)h(clien)n(ts,)i(esp)r(ecially)-7 b(,)33 b(ma)n(y)e(not)h +-(supp)r(ort)498 877 y(this\),)f(then)f(the)f(return)g(address)f(will)i ++(supp)r(ort)498 1373 y(this\),)f(then)f(the)f(return)g(address)f(will)i + (b)r(e)g(A;)g(if)g(it)f(do)r(es)h(not)f(supp)r(ort)g(this,)h(then)498 +-976 y(the)e(return)f(address)g(will)g(b)r(e)h(B.)332 +-1138 y(If)d(y)n(ou)f(supply)h(neither)g Fr(--from)e Fx(nor)h ++1472 y(the)e(return)f(address)g(will)g(b)r(e)h(B.)332 ++1652 y(If)d(y)n(ou)f(supply)h(neither)g Fr(--from)e Fx(nor)h + Fr(--author)p Fx(,)e(then)j(the)h(return)e(address)g(will)h(b)r(e)g(B.) +-415 1296 y(In)19 b(addition,)h(unless)e(y)n(ou)g(sp)r(ecify)g(the)h ++415 1828 y(In)19 b(addition,)h(unless)e(y)n(ou)g(sp)r(ecify)g(the)h + (sendmail)f(command)g(with)h Fr(--sendmail-comma)o(nd)p +-Fx(,)291 1396 y(darcs)33 b(sends)i(email)g(using)g(the)g(default)g ++Fx(,)291 1928 y(darcs)33 b(sends)i(email)g(using)g(the)g(default)g + (email)g(command)g(on)g(y)n(our)e(computer.)59 b(This)291 +-1496 y(default)30 b(command)f(is)h(determined)g(b)n(y)g(the)g ++2027 y(default)30 b(command)f(is)h(determined)g(b)n(y)g(the)g + Fr(configure)c Fx(script.)43 b(Th)n(us,)31 b(on)e(some)g(non-)291 +-1595 y(Unix-lik)n(e)e(OSes,)g Fr(--from)e Fx(is)i(lik)n(ely)h(to)f(not) +-h(w)n(ork)e(at)h(all.)p 527 1768 2392 4 v 527 1843 a +-Fr(--unified)p 527 1879 V 415 2052 a Fx(If)35 b(y)n(ou)e(w)n(an)n(t)g +-(to)h(create)f(patc)n(hes)h(ha)n(ving)f(con)n(text,)i(y)n(ou)e(can)h +-(use)g(the)h Fr(--unified)291 2152 y Fx(option,)g(whic)n(h)f(creates)f +-(output)i(v)-5 b(aguely)33 b(reminiscen)n(t)h(of)g Fr(diff)42 +-b(-u)p Fx(.)55 b(This)34 b(format)g(is)291 2251 y(still)27 +-b(darcs-sp)r(eci\014c)g(and)g(should)g(not)h(b)r(e)g(exp)r(ected)g(to)f +-(apply)h(cleanly)f(b)n(y)g Fr(patch)p Fx(.)p 527 2424 +-V 527 2499 a Fr(--output,)40 b(--to,)h(--cc)p 527 2554 +-V 415 2726 a Fx(The)27 b Fr(--output)p Fx(,)d Fr(--output-auto-nam)o(e) +-p Fx(,)d(and)27 b Fr(--to)f Fx(\015ags)g(determine)h(what)g(darcs)291 +-2826 y(do)r(es)g(with)h(the)f(patc)n(h)h(bundle)g(after)f(creating)f ++2127 y(Unix-lik)n(e)e(OSes,)g Fr(--from)e Fx(is)i(lik)n(ely)h(to)f(not) ++h(w)n(ork)e(at)h(all.)p 527 2323 2392 4 v 527 2398 a ++Fr(--output,)40 b(--to,)h(--cc)p 527 2453 V 415 2649 ++a Fx(The)27 b Fr(--output)p Fx(,)d Fr(--output-auto-nam)o(e)p ++Fx(,)d(and)27 b Fr(--to)f Fx(\015ags)g(determine)h(what)g(darcs)291 ++2749 y(do)r(es)g(with)h(the)f(patc)n(h)h(bundle)g(after)f(creating)f + (it.)37 b(If)28 b(y)n(ou)f(pro)n(vide)f(an)h Fr(--output)d +-Fx(argu-)291 2926 y(men)n(t,)d(the)f(patc)n(h)f(bundle)h(is)g(sa)n(v)n ++Fx(argu-)291 2848 y(men)n(t,)d(the)f(patc)n(h)f(bundle)h(is)g(sa)n(v)n + (ed)e(to)h(that)h(\014le.)35 b(If)20 b(y)n(ou)e(sp)r(ecify)i +-Fr(--output-auto-nam)o(e)p Fx(,)291 3025 y(the)34 b(patc)n(h)f(bundle)i ++Fr(--output-auto-nam)o(e)p Fx(,)291 2948 y(the)34 b(patc)n(h)f(bundle)i + (is)e(sa)n(v)n(ed)g(to)g(a)h(\014le)g(with)g(an)g(automatically)e +-(generated)h(name.)55 b(If)291 3125 y(y)n(ou)33 b(giv)n(e)g(one)g(or)g ++(generated)h(name.)55 b(If)291 3048 y(y)n(ou)33 b(giv)n(e)g(one)g(or)g + (more)g Fr(--to)g Fx(argumen)n(ts,)h(the)g(bundle)h(of)f(patc)n(hes)f +-(is)h(sen)n(t)f(to)h(those)291 3225 y(lo)r(cations.)49 ++(is)h(sen)n(t)f(to)h(those)291 3147 y(lo)r(cations.)49 + b(The)32 b(lo)r(cations)f(ma)n(y)g(either)h(b)r(e)g(email)g(addresses)e +-(or)h(urls)h(that)g(the)g(patc)n(h)291 3324 y(should)27 +-b(b)r(e)h(submitted)g(to)g(via)f(HTTP)-7 b(.)415 3424 ++(or)h(urls)h(that)g(the)g(patc)n(h)291 3247 y(should)27 ++b(b)r(e)h(submitted)g(to)g(via)f(HTTP)-7 b(.)415 3350 + y(If)36 b(y)n(ou)g(don't)g(pro)n(vide)f(an)n(y)g(of)h(these)g(options,) + h(darcs)e(will)h(lo)r(ok)f(at)h(the)h(con)n(ten)n(ts)291 +-3523 y(of)27 b(the)i Fr(_darcs/prefs/ema)o(il)21 b Fx(\014le)28 ++3450 y(of)27 b(the)i Fr(_darcs/prefs/ema)o(il)21 b Fx(\014le)28 + b(in)h(the)f(target)f(rep)r(ository)f(\(if)j(it)f(exists\),)g(and)g +-(send)291 3623 y(the)h(patc)n(h)g(b)n(y)g(email)g(to)g(that)g(address.) ++(send)291 3549 y(the)h(patc)n(h)g(b)n(y)g(email)g(to)g(that)g(address.) + 40 b(In)29 b(this)h(case,)f(y)n(ou)f(ma)n(y)g(use)h(the)h +-Fr(--cc)d Fx(option)291 3723 y(to)i(sp)r(ecify)g(additional)g(recipien) ++Fr(--cc)d Fx(option)291 3649 y(to)i(sp)r(ecify)g(additional)g(recipien) + n(ts)g(without)h(o)n(v)n(erriding)d(the)j(default)f(rep)r(ository)f +-(email)291 3822 y(address.)415 3922 y(If)c(there)f(is)g(no)g(email)g ++(email)291 3748 y(address.)415 3852 y(If)c(there)f(is)g(no)g(email)g + (address)f(asso)r(ciated)g(with)i(the)g(rep)r(ository)-7 +-b(,)22 b(darcs)h(will)g(prompt)291 4022 y(y)n(ou)j(for)h(an)h(email)f +-(address.)p 527 4194 V 527 4269 a Fr(--subject)p 527 +-4324 V 415 4497 a Fx(Use)32 b(the)h Fr(--subject)c Fx(\015ag)i(to)h ++b(,)22 b(darcs)h(will)g(prompt)291 3951 y(y)n(ou)j(for)h(an)h(email)f ++(address.)p 527 4147 V 527 4222 a Fr(--subject)p 527 ++4277 V 415 4473 a Fx(Use)32 b(the)h Fr(--subject)c Fx(\015ag)i(to)h + (set)g(the)h(sub)5 b(ject)32 b(of)g(the)h(e-mail)f(to)g(b)r(e)g(sen)n +-(t.)51 b(If)33 b(y)n(ou)291 4596 y(don't)27 b(pro)n(vide)f(a)h(sub)5 ++(t.)51 b(If)33 b(y)n(ou)291 4573 y(don't)27 b(pro)n(vide)f(a)h(sub)5 + b(ject)27 b(on)g(the)h(command)f(line,)h(darcs)e(will)h(mak)n(e)g(one)g +-(up)g(based)g(on)291 4696 y(names)g(of)g(the)h(patc)n(hes)f(in)h(the)g ++(up)g(based)g(on)291 4673 y(names)g(of)g(the)h(patc)n(hes)f(in)h(the)g + (patc)n(h)f(bundle.)p 527 4869 V 527 4944 a Fr(--matches,)39 + b(--patches,)h(--tags,)g(--no-deps)p 527 4998 V eop end + %%Page: 76 76 +@@ -10064,8 +10063,8 @@ + (olution)e(and)739 3532 y(msm)n(tp)28 b(lo)r(ok)f(lik)n(e)g(this:)739 + 3980 y Fr(evolution)40 b("mailto:\045T?subje)o(ct)o(=\045)o(S&a)o(tt)o + (ach)o(=\045)o(A&c)o(c=)o(\045C)o(&bo)o(dy)o(=\045B)o(")739 +-4080 y(msmtp)h(\045t)i(\045<)739 4594 y Fk(6.6.5)112 +-b(darcs)38 b(apply)739 4846 y Fr(Usage:)j(darcs)h(apply)f([OPTION]...)e ++4080 y(msmtp)h(-t)i(\045<)739 4594 y Fk(6.6.5)112 b(darcs)38 ++b(apply)739 4846 y Fr(Usage:)j(darcs)h(apply)f([OPTION]...)e + ()863 4998 y Fx(Options:)p eop end + %%Page: 77 77 + TeXDict begin 77 76 bop 291 282 a Fu(6.6.)63 b(W)n(ORKING)28 +@@ -10080,131 +10079,133 @@ + (patc)n(hes)465 1016 y Fr(-i)99 b(--interactive)573 b + Fx(prompt)28 b(user)f(in)n(teractiv)n(ely)652 1115 y + Fr(--dry-run)749 b Fx(don't)28 b(actually)f(tak)n(e)g(the)h(action)652 +-1215 y Fr(--mark-conflicts)1797 1223 y Fx(mark)f(con\015icts)652 +-1315 y Fr(--allow-conflict)o(s)398 b Fx(allo)n(w)27 b(con\015icts,)g +-(but)h(don't)g(mark)f(them)652 1452 y Fr(--no-resolve-con)o(fl)o(ic)o +-(ts)1797 1402 y Fx(equiv)-5 b(alen)n(t)28 b(to)f({don)n(t-allo)n +-(w-con\015icts,)e(for)1797 1502 y(bac)n(kw)n(ards)h(compatibilit)n(y) +-652 1628 y Fr(--dont-allow-con)o(fl)o(ic)o(ts)1797 1576 ++1215 y Fr(--xml-output)617 b Fx(generate)27 b(XML)h(formatted)f(output) ++652 1315 y Fr(--mark-conflicts)1797 1323 y Fx(mark)g(con\015icts)652 ++1414 y Fr(--allow-conflict)o(s)398 b Fx(allo)n(w)27 b(con\015icts,)g ++(but)h(don't)g(mark)f(them)652 1552 y Fr(--no-resolve-con)o(fl)o(ic)o ++(ts)1797 1502 y Fx(equiv)-5 b(alen)n(t)28 b(to)f({don)n(t-allo)n ++(w-con\015icts,)e(for)1797 1602 y(bac)n(kw)n(ards)h(compatibilit)n(y) ++652 1727 y Fr(--dont-allow-con)o(fl)o(ic)o(ts)1797 1675 + y Fx(fail)i(on)f(patc)n(hes)g(that)h(create)f(con\015icts)1797 +-1675 y([DEF)-9 b(A)n(UL)i(T])652 1766 y Fr(--external-merge)37 ++1775 y([DEF)-9 b(A)n(UL)i(T])652 1865 y Fr(--external-merge)37 + b(COMMAND)96 b Fx(use)28 b(external)f(to)r(ol)g(to)g(merge)g +-(con\015icts)652 1865 y Fr(--no-test)749 b Fx(don't)28 +-b(run)g(the)g(test)g(script)652 1965 y Fr(--test)881 +-b Fx(run)28 b(the)g(test)g(script)652 2065 y Fr(--leave-test-dir)o(ec)o ++(con\015icts)652 1965 y Fr(--no-test)749 b Fx(don't)28 ++b(run)g(the)g(test)g(script)652 2065 y Fr(--test)881 ++b Fx(run)28 b(the)g(test)g(script)652 2164 y Fr(--leave-test-dir)o(ec)o + (to)o(ry)180 b Fx(don't)28 b(remo)n(v)n(e)e(the)i(test)g(directory)652 +-2164 y Fr(--remove-test-di)o(re)o(ct)o(ory)136 b Fx(remo)n(v)n(e)26 +-b(the)i(test)g(directory)652 2294 y Fr(--repodir)40 b(DIRECTORY)1797 +-2252 y Fx(sp)r(ecify)28 b(the)g(rep)r(ository)e(directory)h(in)g(whic)n +-(h)h(to)1797 2351 y(run)415 2417 y(Adv)-5 b(anced)28 +-b(options:)565 2541 y Fr(--reply)40 b(FROM)1928 2500 ++2264 y Fr(--remove-test-di)o(re)o(ct)o(ory)136 b Fx(remo)n(v)n(e)26 ++b(the)i(test)g(directory)652 2393 y Fr(--repodir)40 b(DIRECTORY)1797 ++2351 y Fx(sp)r(ecify)28 b(the)g(rep)r(ository)e(directory)h(in)g(whic)n ++(h)h(to)1797 2451 y(run)415 2517 y(Adv)-5 b(anced)28 ++b(options:)565 2641 y Fr(--reply)40 b(FROM)1928 2599 + y Fx(reply)27 b(to)h(email-based)e(patc)n(h)i(using)f(FR)n(OM)1928 +-2599 y(address)565 2709 y Fr(--cc)41 b(EMAIL)1928 2661 ++2699 y(address)565 2809 y Fr(--cc)41 b(EMAIL)1928 2761 + y Fx(mail)28 b(results)f(to)g(additional)g(EMAIL\(s\).)1928 +-2761 y(Requires)g({reply)565 2877 y Fr(--happy-forward)o(ing)1928 +-2835 y Fx(forw)n(ard)f(unsigned)h(messages)f(without)i(extra)1928 +-2934 y(header)565 3004 y Fr(--sendmail-comm)o(and)37 ++2861 y(Requires)g({reply)565 2976 y Fr(--happy-forward)o(ing)1928 ++2934 y Fx(forw)n(ard)f(unsigned)h(messages)f(without)i(extra)1928 ++3034 y(header)565 3104 y Fr(--sendmail-comm)o(and)37 + b(COMMAND)227 b Fx(sp)r(ecify)28 b(sendmail)f(command)565 +-3104 y Fr(--ignore-times)1928 3112 y Fx(don't)h(trust)g(the)g(\014le)f +-(mo)r(di\014cation)h(times)565 3203 y Fr(--compress)923 +-b Fx(create)27 b(compressed)f(patc)n(hes)565 3303 y Fr(--dont-compress) ++3203 y Fr(--ignore-times)1928 3211 y Fx(don't)h(trust)g(the)g(\014le)f ++(mo)r(di\014cation)h(times)565 3303 y Fr(--compress)923 ++b Fx(create)27 b(compressed)f(patc)n(hes)565 3403 y Fr(--dont-compress) + 703 b Fx(don't)28 b(create)f(compressed)f(patc)n(hes)565 +-3403 y Fr(--set-scripts-e)o(xec)o(ut)o(ab)o(le)311 b +-Fx(mak)n(e)27 b(scripts)g(executable)565 3502 y Fr(--dont-set-scri)o ++3502 y Fr(--set-scripts-e)o(xec)o(ut)o(ab)o(le)311 b ++Fx(mak)n(e)27 b(scripts)g(executable)565 3602 y Fr(--dont-set-scri)o + (pts)o(-e)o(xe)o(cut)o(ab)o(le)93 b Fx(don't)28 b(mak)n(e)f(scripts)g +-(executable)565 3602 y Fr(--umask)40 b(UMASK)795 b Fx(sp)r(ecify)28 +-b(umask)f(to)h(use)f(when)h(writing)415 3698 y(Apply)d(is)f(used)h(to)f ++(executable)565 3702 y Fr(--umask)40 b(UMASK)795 b Fx(sp)r(ecify)28 ++b(umask)f(to)h(use)f(when)h(writing)415 3797 y(Apply)d(is)f(used)h(to)f + (apply)g(a)g(bundle)h(of)g(patc)n(hes)e(to)i(this)g(rep)r(ository)-7 +-b(.)34 b(Suc)n(h)24 b(a)g(bundle)291 3797 y(ma)n(y)i(b)r(e)i(created)f +-(using)h(send.)415 3897 y(Darcs)22 b(apply)g(accepts)g(a)h(single)f ++b(.)34 b(Suc)n(h)24 b(a)g(bundle)291 3897 y(ma)n(y)i(b)r(e)i(created)f ++(using)h(send.)415 3997 y(Darcs)22 b(apply)g(accepts)g(a)h(single)f + (argumen)n(t,)g(whic)n(h)h(is)g(the)g(name)f(of)h(the)g(patc)n(h)f +-(\014le)h(to)291 3997 y(b)r(e)28 b(applied.)37 b(If)28 ++(\014le)h(to)291 4096 y(b)r(e)28 b(applied.)37 b(If)28 + b(y)n(ou)f(omit)h(this)g(argumen)n(t,)f(the)h(patc)n(h)f(is)h(read)f +-(from)g(standard)g(input.)3117 3967 y Fm(5)291 4096 y ++(from)g(standard)g(input.)3117 4066 y Fm(5)291 4196 y + Fx(This)c(allo)n(ws)g(y)n(ou)g(to)g(use)h(apply)f(with)h(a)g(pip)r(e)g + (from)g(y)n(our)e(email)i(program,)e(for)h(example.)p +-527 4278 2392 4 v 527 4353 a Fr(--verify)p 527 4408 V +-415 4590 a Fx(If)h(y)n(ou)e(sp)r(ecify)i(the)g Fr(--verify)40 ++527 4371 2392 4 v 527 4446 a Fr(--verify)p 527 4501 V ++415 4676 a Fx(If)h(y)n(ou)e(sp)r(ecify)i(the)g Fr(--verify)40 + b(PUBRING)21 b Fx(option,)j(darcs)e(will)h(c)n(hec)n(k)g(that)g(the)h +-(patc)n(h)291 4690 y(w)n(as)d(GPG-signed)g(b)n(y)h(a)g(k)n(ey)g(whic)n ++(patc)n(h)291 4776 y(w)n(as)d(GPG-signed)g(b)n(y)h(a)g(k)n(ey)g(whic)n + (h)g(is)g(in)h Fr(PUBRING)d Fx(and)i(will)g(refuse)g(to)g(apply)g(the)h +-(patc)n(h)291 4790 y(otherwise.)p 291 4842 1146 4 v 383 +-4896 a Fp(5)418 4920 y Fl(One)h(ca)n(v)n(eat:)33 b(don't)25 +-b(name)f(y)n(our)g(patc)n(h)h(\014le)f(\\magic)h(darcs)f(standard)g +-(input",)h(or)e(darcs)h(will)e(read)291 4998 y(from)g(standard)j(input) +-f(instead!)p eop end ++(patc)n(h)p 291 4842 1146 4 v 383 4896 a Fp(5)418 4920 ++y Fl(One)h(ca)n(v)n(eat:)33 b(don't)25 b(name)f(y)n(our)g(patc)n(h)h ++(\014le)f(\\magic)h(darcs)f(standard)g(input",)h(or)e(darcs)h(will)e ++(read)291 4998 y(from)g(standard)j(input)f(instead!)p ++eop end + %%Page: 78 78 + TeXDict begin 78 77 bop 739 282 a Fx(78)1378 b Fu(CHAPTER)27 +-b(6.)64 b(D)n(AR)n(CS)28 b(COMMANDS)p 975 515 2392 4 +-v 975 590 a Fr(--cc,)42 b(--reply)p 975 645 V 863 822 +-a Fx(If)23 b(y)n(ou)f(giv)n(e)f(the)h Fr(--reply)41 b(FROM)21 +-b Fx(option)h(to)g Fr(darcs)41 b(apply)p Fx(,)22 b(it)g(will)h(send)f +-(the)h(results)739 922 y(of)k(the)g(application)f(to)h(the)g(sender)f +-(of)h(the)g(patc)n(h.)37 b(This)26 b(only)h(w)n(orks)e(if)i(the)h(patc) +-n(h)e(is)h(in)739 1021 y(the)k(form)f(of)h(email)f(with)h(its)g +-(headers)f(in)n(tact,)h(so)f(that)h(darcs)f(can)g(actually)g(kno)n(w)g +-(the)739 1121 y(origin)25 b(of)i(the)g(patc)n(h.)36 b(The)27 +-b(reply)f(email)g(will)h(indicate)g(whether)g(or)e(not)i(the)g(patc)n +-(h)f(w)n(as)739 1221 y(successfully)f(applied.)36 b(The)25 +-b Fr(FROM)e Fx(\015ag)i(is)g(the)g(email)g(address)f(that)h(will)h(b)r +-(e)f(used)g(as)g(the)739 1320 y(\\from")j(address)h(when)h(replying.)43 ++b(6.)64 b(D)n(AR)n(CS)28 b(COMMANDS)739 515 y Fx(otherwise.)p ++975 661 2392 4 v 975 736 a Fr(--cc,)42 b(--reply)p 975 ++791 V 863 936 a Fx(If)23 b(y)n(ou)f(giv)n(e)f(the)h Fr(--reply)41 ++b(FROM)21 b Fx(option)h(to)g Fr(darcs)41 b(apply)p Fx(,)22 ++b(it)g(will)h(send)f(the)h(results)739 1036 y(of)k(the)g(application)f ++(to)h(the)g(sender)f(of)h(the)g(patc)n(h.)37 b(This)26 ++b(only)h(w)n(orks)e(if)i(the)h(patc)n(h)e(is)h(in)739 ++1135 y(the)k(form)f(of)h(email)f(with)h(its)g(headers)f(in)n(tact,)h ++(so)f(that)h(darcs)f(can)g(actually)g(kno)n(w)g(the)739 ++1235 y(origin)25 b(of)i(the)g(patc)n(h.)36 b(The)27 b(reply)f(email)g ++(will)h(indicate)g(whether)g(or)e(not)i(the)g(patc)n(h)f(w)n(as)739 ++1335 y(successfully)f(applied.)36 b(The)25 b Fr(FROM)e ++Fx(\015ag)i(is)g(the)g(email)g(address)f(that)h(will)h(b)r(e)f(used)g ++(as)g(the)739 1434 y(\\from")j(address)h(when)h(replying.)43 + b(If)30 b(the)h(darcs)d(apply)i(is)g(b)r(eing)g(done)f(automatically)-7 +-b(,)739 1420 y(it)32 b(is)f(imp)r(ortan)n(t)h(that)g(this)g(address)e ++b(,)739 1534 y(it)32 b(is)f(imp)r(ortan)n(t)h(that)g(this)g(address)e + (not)h(b)r(e)h(the)g(same)g(as)e(the)i(address)f(at)g(whic)n(h)h(the) +-739 1520 y(patc)n(h)27 b(w)n(as)g(receiv)n(ed,)f(in)i(order)e(to)i(a)n +-(v)n(oid)e(automatic)h(email)g(lo)r(ops.)863 1619 y(If)f(y)n(ou)e(w)n ++739 1633 y(patc)n(h)27 b(w)n(as)g(receiv)n(ed,)f(in)i(order)e(to)i(a)n ++(v)n(oid)e(automatic)h(email)g(lo)r(ops.)863 1733 y(If)f(y)n(ou)e(w)n + (an)n(t)g(to)h(also)f(send)h(the)g(apply)g(email)f(to)h(another)f +-(address)g(\(for)g(example,)h(to)739 1719 y(create)f(something)g(lik)n ++(address)g(\(for)g(example,)h(to)739 1833 y(create)f(something)g(lik)n + (e)h(a)g(\\commits")f(mailing)g(list\),)i(y)n(ou)e(can)h(use)g(the)g +-Fr(--cc)f Fx(option)g(to)739 1818 y(sp)r(ecify)32 b(additional)f ++Fr(--cc)f Fx(option)g(to)739 1932 y(sp)r(ecify)32 b(additional)f + (recipien)n(ts.)49 b(Note)32 b(that)g(the)h Fr(--cc)d + Fx(option)h Fs(r)l(e)l(quir)l(es)39 b Fx(the)32 b Fr(--reply)739 +-1918 y Fx(option,)27 b(whic)n(h)h(pro)n(vides)e(the)i(\\F)-7 +-b(rom")26 b(address.)863 2018 y(The)39 b Fr(--reply)d ++2032 y Fx(option,)27 b(whic)n(h)h(pro)n(vides)e(the)i(\\F)-7 ++b(rom")26 b(address.)863 2132 y(The)39 b Fr(--reply)d + Fx(feature)i(of)g(apply)h(is)f(in)n(tended)h(primarily)f(for)g(t)n(w)n +-(o)f(uses.)70 b(When)739 2117 y(used)32 b(b)n(y)f(itself,)i(it)f(is)g ++(o)f(uses.)70 b(When)739 2231 y(used)32 b(b)n(y)f(itself,)i(it)f(is)g + (handy)f(for)h(when)f(y)n(ou)g(w)n(an)n(t)g(to)h(apply)f(patc)n(hes)h +-(sen)n(t)f(to)h(y)n(ou)f(b)n(y)739 2217 y(other)24 b(dev)n(elop)r(ers)g ++(sen)n(t)f(to)h(y)n(ou)f(b)n(y)739 2331 y(other)24 b(dev)n(elop)r(ers)g + (so)h(that)g(they)g(will)g(kno)n(w)g(when)g(their)g(patc)n(h)g(has)f(b) +-r(een)i(applied.)36 b(F)-7 b(or)739 2317 y(example,)27 ++r(een)i(applied.)36 b(F)-7 b(or)739 2430 y(example,)27 + b(in)h(m)n(y)f Fr(.muttrc)e Fx(\(the)j(con\014g)f(\014le)h(for)f(m)n(y) +-g(mailer\))h(I)f(ha)n(v)n(e:)739 2478 y Fr(macro)41 b(pager)h(A)h ++g(mailer\))h(I)f(ha)n(v)n(e:)739 2567 y Fr(macro)41 b(pager)h(A)h + ("dar)o(cs)37 b(apply)42 b(--verbose)e(\\)1088 +-2578 y(--reply)g(droundy@abridgega)o(me)o(.or)o(g)d(--repodir)j +-(~/darcs)739 2740 y Fx(whic)n(h)33 b(allo)n(ws)f(me)h(to)h(apply)f(a)g ++2666 y(--reply)g(droundy@abridgega)o(me)o(.or)o(g)d(--repodir)j ++(~/darcs)739 2803 y Fx(whic)n(h)33 b(allo)n(ws)f(me)h(to)h(apply)f(a)g + (patc)n(h)g(to)g(darcs)f(directly)h(from)g(m)n(y)g(mailer,)h(with)g +-(the)739 2839 y(originator)20 b(of)j(that)f(patc)n(h)h(b)r(eing)f(sen)n ++(the)739 2902 y(originator)20 b(of)j(that)f(patc)n(h)h(b)r(eing)f(sen)n + (t)h(a)f(con\014rmation)f(when)i(the)g(patc)n(h)f(is)h(successfully)739 +-2939 y(applied.)46 b(NOTE:)30 b(In)h(an)f(attempt)h(to)g(mak)n(e)e ++3002 y(applied.)46 b(NOTE:)30 b(In)h(an)f(attempt)h(to)g(mak)n(e)e + (sure)h(no)h(one)f(else)g(can)g(read)g(y)n(our)f(email,)739 +-3038 y(m)n(utt)i(seems)g(to)g(set)g(the)g(umask)f(suc)n(h)h(that)g ++3102 y(m)n(utt)i(seems)g(to)g(set)g(the)g(umask)f(suc)n(h)h(that)g + (patc)n(hes)f(created)g(with)i(the)f(ab)r(o)n(v)n(e)f(macro)739 +-3138 y(are)c(not)i(w)n(orld-readable,)d(so)i(use)g(it)h(with)h(care.) +-863 3238 y(When)k(used)e(in)h(com)n(bination)f(with)h(the)h ++3201 y(are)c(not)i(w)n(orld-readable,)d(so)i(use)g(it)h(with)h(care.) ++863 3301 y(When)k(used)e(in)h(com)n(bination)f(with)h(the)h + Fr(--verify)28 b Fx(option,)33 b(the)f Fr(--reply)d Fx(option)739 +-3337 y(allo)n(ws)20 b(for)h(a)g(nice)h(pushable)f(rep)r(ository)-7 ++3401 y(allo)n(ws)20 b(for)h(a)g(nice)h(pushable)f(rep)r(ository)-7 + b(.)34 b(When)22 b(these)f(t)n(w)n(o)g(options)g(are)g(used)g +-(together,)739 3437 y(an)n(y)33 b(patc)n(hes)h(that)g(don't)h(pass)e ++(together,)739 3500 y(an)n(y)33 b(patc)n(hes)h(that)g(don't)h(pass)e + (the)i(v)n(erify)e(will)h(b)r(e)h(forw)n(arded)d(to)i(the)h +-Fr(FROM)d Fx(address)739 3537 y(of)f(the)h Fr(--reply)d ++Fr(FROM)d Fx(address)739 3600 y(of)f(the)h Fr(--reply)d + Fx(option.)49 b(This)31 b(allo)n(ws)f(y)n(ou)h(to)h(set)f(up)h(a)f(rep) +-r(ository)f(so)h(that)h(an)n(y)n(one)739 3636 y(who)j(is)h(authorized)f ++r(ository)f(so)h(that)h(an)n(y)n(one)739 3699 y(who)j(is)h(authorized)f + (can)g(push)h(to)g(it)g(and)g(ha)n(v)n(e)e(it)i(automatically)f +-(applied,)j(but)e(if)h(a)739 3736 y(stranger)25 b(pushes)i(to)h(it,)f ++(applied,)j(but)e(if)h(a)739 3799 y(stranger)25 b(pushes)i(to)h(it,)f + (the)h(patc)n(h)f(will)h(b)r(e)f(forw)n(arded)f(to)h(y)n(ou.)36 +-b(Please)26 b(\(for)h(y)n(our)f(o)n(wn)739 3835 y(sak)n(e!\))h(b)r(e)h ++b(Please)26 b(\(for)h(y)n(our)f(o)n(wn)739 3899 y(sak)n(e!\))h(b)r(e)h + (certain)g(that)g(the)g Fr(--reply)41 b(FROM)26 b Fx(address)h(is)h +-(di\013eren)n(t)g(from)f(the)i(one)e(used)739 3935 y(to)d(send)g(patc)n ++(di\013eren)n(t)g(from)f(the)i(one)e(used)739 3998 y(to)d(send)g(patc)n + (hes)f(to)h(a)f(pushable)h(rep)r(ository)-7 b(,)23 b(since)h(otherwise) +-f(an)h(unsigned)f(patc)n(h)h(will)739 4035 y(b)r(e)k(forw)n(arded)e(to) ++f(an)h(unsigned)f(patc)n(h)h(will)739 4098 y(b)r(e)k(forw)n(arded)e(to) + h(the)h(rep)r(ository)e(in)i(an)f(in\014nite)i(lo)r(op.)863 +-4134 y(If)j(y)n(ou)f(use)g Fr(darcs)41 b(apply)h(--verify)e(PUBRING)h +-(--reply)28 b Fx(to)j(create)g(a)f(pushable)739 4234 ++4198 y(If)j(y)n(ou)f(use)g Fr(darcs)41 b(apply)h(--verify)e(PUBRING)h ++(--reply)28 b Fx(to)j(create)g(a)f(pushable)739 4297 + y(rep)r(ository)22 b(b)n(y)i(applying)f(patc)n(hes)h(automatically)e + (as)i(they)g(are)f(receiv)n(ed)g(b)n(y)g(email,)i(y)n(ou)739 +-4334 y(will)j(also)e(w)n(an)n(t)h(to)h(use)f(the)h Fr(--dont-allow-con) +-o(fli)o(ct)o(s)22 b Fx(option.)p 975 4511 V 975 4586 +-a Fr(--dont-allow-con)o(fli)o(ct)o(s)p 975 4622 V 739 ++4397 y(will)j(also)e(w)n(an)n(t)h(to)h(use)f(the)h Fr(--dont-allow-con) ++o(fli)o(ct)o(s)22 b Fx(option.)p 975 4542 V 975 4617 ++a Fr(--dont-allow-con)o(fli)o(ct)o(s)p 975 4654 V 739 + 4799 a Fx(The)28 b Fr(--dont-allow-co)o(nf)o(lic)o(ts)21 + b Fx(\015ag)27 b(causes)f(apply)i(to)f(fail)h(when)f(applying)g(a)h + (patc)n(h)739 4899 y(w)n(ould)j(cause)g(con\015icts.)48 +@@ -10248,7 +10249,7 @@ + (if)h(the)f(command)f(exp)r(ects)h(the)h(complete)e(mail)h(on)291 + 3808 y(standard)c(input.)38 b(F)-7 b(or)27 b(example,)g(the)h(command)f + (line)h(for)f(msm)n(tp)h(lo)r(oks)f(lik)n(e)g(this:)291 +-3999 y Fr(msmtp)41 b(\045t)i(\045<)p 527 4188 V 527 4262 ++3999 y Fr(msmtp)41 b(-t)i(\045<)p 527 4188 V 527 4262 + a(--no-test,)c(--test)p 527 4310 V 415 4500 a Fx(If)c(y)n(ou)e(sp)r + (ecify)i(the)g Fr(--test)d Fx(option,)j(apply)f(will)h(run)f(the)h + (test)f(\(if)h(a)f(test)h(exists\))291 4600 y(prior)30 +@@ -10332,39 +10333,40 @@ + b Fx(giv)n(e)27 b(output)h(suitable)f(for)g(get)h({con)n(text)652 + 2076 y Fr(--xml-output)443 b Fx(generate)26 b(XML)i(formatted)g(output) + 652 2175 y Fr(--human-readable)267 b Fx(giv)n(e)27 b(h)n(uman-readable) +-e(output)465 2275 y Fr(-s)99 b(--summary)575 b Fx(summarize)27 +-b(c)n(hanges)652 2375 y Fr(--no-summary)443 b Fx(don't)28 +-b(summarize)f(c)n(hanges)652 2474 y Fr(--reverse)575 ++e(output)652 2275 y Fr(--count)663 b Fx(output)28 b(coun)n(t)g(of)f(c)n ++(hanges)465 2375 y Fr(-s)99 b(--summary)575 b Fx(summarize)27 ++b(c)n(hanges)652 2474 y Fr(--no-summary)443 b Fx(don't)28 ++b(summarize)f(c)n(hanges)652 2574 y Fr(--reverse)575 + b Fx(sho)n(w)27 b(c)n(hanges)f(in)i(rev)n(erse)d(order)652 +-2574 y Fr(--repo)41 b(URL)534 b Fx(sp)r(ecify)28 b(the)g(rep)r(ository) +-e(URL)652 2703 y Fr(--repodir)40 b(DIRECTORY)1623 2661 ++2673 y Fr(--repo)41 b(URL)534 b Fx(sp)r(ecify)28 b(the)g(rep)r(ository) ++e(URL)652 2803 y Fr(--repodir)40 b(DIRECTORY)1623 2761 + y Fx(sp)r(ecify)28 b(the)g(rep)r(ository)e(directory)g(in)i(whic)n(h)g +-(to)1623 2761 y(run)465 2831 y Fr(-a)99 b(--all)751 b ++(to)1623 2861 y(run)465 2930 y Fr(-a)99 b(--all)751 b + Fx(answ)n(er)26 b(y)n(es)h(to)h(all)f(patc)n(hes)465 +-2930 y Fr(-i)99 b(--interactive)399 b Fx(prompt)27 b(user)g(in)n +-(teractiv)n(ely)415 3026 y(Adv)-5 b(anced)28 b(options:)565 +-3160 y Fr(--no-ssh-cm)1144 3108 y Fx(don't)f(use)h(SSH)g(Con)n +-(trolMaster)d(feature)1144 3208 y([DEF)-9 b(A)n(UL)i(T])565 +-3298 y Fr(--ssh-cm)1144 3306 y Fx(use)27 b(SSH)h(Con)n(trolMaster)e +-(feature)415 3394 y(Changes)20 b(giv)n(es)f(a)h(c)n(hangelog-st)n(yle)e ++3030 y Fr(-i)99 b(--interactive)399 b Fx(prompt)27 b(user)g(in)n ++(teractiv)n(ely)415 3126 y(Adv)-5 b(anced)28 b(options:)565 ++3260 y Fr(--no-ssh-cm)1144 3208 y Fx(don't)f(use)h(SSH)g(Con)n ++(trolMaster)d(feature)1144 3308 y([DEF)-9 b(A)n(UL)i(T])565 ++3398 y Fr(--ssh-cm)1144 3406 y Fx(use)27 b(SSH)h(Con)n(trolMaster)e ++(feature)415 3494 y(Changes)20 b(giv)n(es)f(a)h(c)n(hangelog-st)n(yle)e + (summary)i(of)g(the)h(rep)r(ository)e(history)-7 b(,)22 +-b(including)291 3494 y(options)27 b(for)g(altering)f(ho)n(w)h(the)h ++b(including)291 3594 y(options)27 b(for)g(altering)f(ho)n(w)h(the)h + (patc)n(hes)f(are)g(selected)g(and)h(displa)n(y)n(ed.)415 +-3594 y(When)35 b(giv)n(en)f(one)g(or)g(more)g(\014les)g(or)g ++3693 y(When)35 b(giv)n(en)f(one)g(or)g(more)g(\014les)g(or)g + (directories)f(as)h(an)g(argumen)n(t,)i(c)n(hanges)d(lists)291 +-3693 y(only)f(those)g(patc)n(hes)h(whic)n(h)f(a\013ect)h(those)g ++3793 y(only)f(those)g(patc)n(hes)h(whic)n(h)f(a\013ect)h(those)g + (\014les)g(or)f(the)h(con)n(ten)n(ts)f(of)h(those)f(directories)291 +-3793 y(or,)d(of)h(course,)g(the)g(directories)f(themselv)n(es.)44 ++3892 y(or,)d(of)h(course,)g(the)g(directories)f(themselv)n(es.)44 + b(This)30 b(includes)g(c)n(hanges)e(that)j(happ)r(ened)291 +-3892 y(to)c(\014les)h(b)r(efore)f(they)h(w)n(ere)e(mo)n(v)n(ed)h(or)g +-(renamed.)p 527 4075 2392 4 v 527 4150 a Fr(--from-match,)38 +-b(--from-patch,)g(--from-tag)p 527 4205 V 415 4387 a ++3992 y(to)c(\014les)h(b)r(efore)f(they)h(w)n(ere)e(mo)n(v)n(ed)h(or)g ++(renamed.)p 527 4141 2392 4 v 527 4216 a Fr(--from-match,)38 ++b(--from-patch,)g(--from-tag)p 527 4271 V 415 4421 a + Fx(If)30 b(c)n(hanges)d(is)i(giv)n(en)f(a)h Fr(--from-patch)p + Fx(,)24 b Fr(--from-match)p Fx(,)h(or)j Fr(--from-tag)d +-Fx(option,)291 4487 y(it)j(outputs)f(only)h(those)f(c)n(hanges)f(since) +-h(that)h(tag)f(or)g(patc)n(h.)415 4587 y(Without)32 b(an)n(y)e(options) ++Fx(option,)291 4520 y(it)j(outputs)f(only)h(those)f(c)n(hanges)f(since) ++h(that)h(tag)f(or)g(patc)n(h.)415 4620 y(Without)32 b(an)n(y)e(options) + g(to)h(limit)h(the)f(scop)r(e)f(of)h(the)g(c)n(hanges,)g(history)f +-(will)h(b)r(e)g(dis-)291 4686 y(pla)n(y)n(ed)26 b(going)h(bac)n(k)f(as) ++(will)h(b)r(e)g(dis-)291 4719 y(pla)n(y)n(ed)26 b(going)h(bac)n(k)f(as) + h(far)g(as)g(p)r(ossible.)p 527 4869 V 527 4944 a Fr(--context,)39 + b(--human-readable,)e(--xml-output)p 527 4998 V eop end + %%Page: 82 82 +@@ -10386,32 +10388,32 @@ + (su\016cien)n(t)d(information)h Fs(wil)t(l)44 b Fx(b)r(e)34 + b(output)g(for)g(a)f(kno)n(wledgeable)739 1213 y(h)n(uman)27 + b(to)h(recreate)e(the)i(curren)n(t)f(state)g(of)h(the)g(rep)r(ository) +--7 b(.)739 1561 y Fk(6.7.3)112 b(darcs)38 b(sho)m(w)739 +-1755 y Fx(The)24 b(sho)n(w)f(command)g(pro)n(vides)g(access)f(to)i(sev) ++-7 b(.)739 1564 y Fk(6.7.3)112 b(darcs)38 b(sho)m(w)739 ++1758 y Fx(The)24 b(sho)n(w)f(command)g(pro)n(vides)g(access)f(to)i(sev) + n(eral)e(sub)r(commands)i(whic)n(h)g(can)f(b)r(e)h(used)739 +-1855 y(to)j(in)n(v)n(estigate)g(the)h(state)f(of)h(a)f(rep)r(ository)-7 +-b(.)739 2187 y Fv(darcs)33 b(sho)m(w)e(authors)739 2381 ++1858 y(to)j(in)n(v)n(estigate)g(the)h(state)f(of)h(a)f(rep)r(ository)-7 ++b(.)739 2192 y Fv(darcs)33 b(sho)m(w)e(authors)739 2387 + y Fr(Usage:)41 b(darcs)h(show)f(authors)g([OPTION]...)863 +-2502 y Fx(Options:)1013 2648 y Fr(--repodir)f(DIRECTORY)1941 +-2606 y Fx(sp)r(ecify)28 b(the)g(rep)r(ository)d(directory)i(in)h(whic)n +-(h)f(to)1941 2706 y(run)863 2793 y(The)g(authors)f(command)h(writes)f ++2509 y Fx(Options:)1013 2655 y Fr(--repodir)f(DIRECTORY)1941 ++2614 y Fx(sp)r(ecify)28 b(the)g(rep)r(ository)d(directory)i(in)h(whic)n ++(h)f(to)1941 2713 y(run)863 2802 y(The)g(authors)f(command)h(writes)f + (a)h(list)g(of)g(all)g(patc)n(h)g(authors)e(in)j(the)f(rep)r(ository)e +-(to)739 2893 y(standard)i(output.)739 3242 y Fk(6.7.4)112 +-b(darcs)38 b(sho)m(w)g(con)m(ten)m(ts)739 3435 y Fr(Usage:)j(darcs)h +-(show)f(contents)g([OPTION]...)e([FILE]...)863 3557 y +-Fx(Options:)1100 3673 y Fr(--match)i(PATTERN)271 b Fx(select)27 +-b(a)g(single)h(patc)n(h)f(matc)n(hing)g(P)-7 b(A)g(TTERN)913 +-3773 y Fr(-p)99 b(--patch)41 b(REGEXP)315 b Fx(select)27 +-b(a)g(single)h(patc)n(h)f(matc)n(hing)g(REGEXP)913 3872 +-y Fr(-t)99 b(--tag)42 b(REGEXP)402 b Fx(select)27 b(tag)g(matc)n(hing)g +-(REGEXP)1100 4002 y Fr(--repodir)40 b(DIRECTORY)2028 +-3960 y Fx(sp)r(ecify)28 b(the)g(rep)r(ository)e(directory)g(in)i(whic)n +-(h)f(to)2028 4059 y(run)863 4152 y(Sho)n(w)33 b(con)n(ten)n(ts)f(can)h +-(b)r(e)g(used)h(to)e(displa)n(y)h(an)f(earlier)g(v)n(ersion)g(of)h +-(some)f(\014le\(s\).)54 b(If)739 4252 y(y)n(ou)31 b(giv)n(e)g(sho)n(w)f +-(con)n(ten)n(ts)h(no)h(v)n(ersion)e(argumen)n(ts,)i(it)g(displa)n(ys)e +-(the)j(recorded)d(v)n(ersion)739 4351 y(of)d(the)h(\014le\(s\).)739 +-4683 y Fv(darcs)33 b(sho)m(w)e(\014les)739 4877 y Fr(Usage:)41 ++(to)739 2901 y(standard)i(output.)739 3235 y Fv(darcs)33 ++b(sho)m(w)e(con)m(ten)m(ts)739 3430 y Fr(Usage:)41 b(darcs)h(show)f ++(contents)g([OPTION]...)e([FILE]...)863 3552 y Fx(Options:)1100 ++3669 y Fr(--match)i(PATTERN)271 b Fx(select)27 b(a)g(single)h(patc)n(h) ++f(matc)n(hing)g(P)-7 b(A)g(TTERN)913 3768 y Fr(-p)99 ++b(--patch)41 b(REGEXP)315 b Fx(select)27 b(a)g(single)h(patc)n(h)f ++(matc)n(hing)g(REGEXP)913 3868 y Fr(-t)99 b(--tag)42 ++b(REGEXP)402 b Fx(select)27 b(tag)g(matc)n(hing)g(REGEXP)1100 ++3997 y Fr(--repodir)40 b(DIRECTORY)2028 3956 y Fx(sp)r(ecify)28 ++b(the)g(rep)r(ository)e(directory)g(in)i(whic)n(h)f(to)2028 ++4055 y(run)863 4148 y(Sho)n(w)33 b(con)n(ten)n(ts)f(can)h(b)r(e)g(used) ++h(to)e(displa)n(y)h(an)f(earlier)g(v)n(ersion)g(of)h(some)f ++(\014le\(s\).)54 b(If)739 4248 y(y)n(ou)31 b(giv)n(e)g(sho)n(w)f(con)n ++(ten)n(ts)h(no)h(v)n(ersion)e(argumen)n(ts,)i(it)g(displa)n(ys)e(the)j ++(recorded)d(v)n(ersion)739 4347 y(of)d(the)h(\014le\(s\).)739 ++4682 y Fv(darcs)33 b(sho)m(w)e(\014les)739 4877 y Fr(Usage:)41 + b(darcs)h(show)f(files)h([OPTION]...)863 4998 y Fx(Options:)p + eop end + %%Page: 83 83 +@@ -10599,62 +10601,60 @@ + b(6.)64 b(D)n(AR)n(CS)28 b(COMMANDS)863 515 y Fx(Setpref)h(allo)n(ws)e + (y)n(ou)g(to)i(set)f(a)g(preference)f(v)-5 b(alue)28 + b(in)h(a)f(w)n(a)n(y)f(that)h(will)h(propagate)d(to)739 +-615 y(other)h(rep)r(ositories.)863 715 y(V)-7 b(alid)27 ++615 y(other)h(rep)r(ositories.)863 718 y(V)-7 b(alid)27 + b(preferences)f(are:)35 b(test)27 b(predist)f(b)r(oring\014le)g + (binaries\014le.)36 b(If)27 b(y)n(ou)e(just)i(w)n(an)n(t)f(to)739 +-815 y(set)18 b(the)h(pref)f(v)-5 b(alue)19 b(in)f(y)n(our)f(rep)r ++818 y(set)18 b(the)h(pref)f(v)-5 b(alue)19 b(in)f(y)n(our)f(rep)r + (ository)g(only)-7 b(,)20 b(y)n(ou)e(can)g(just)h(edit)f(\\)p +-Fr(_darcs/prefs/pre)o(fs)p Fx(")o(.)739 914 y(Changes)26 ++Fr(_darcs/prefs/pre)o(fs)p Fx(")o(.)739 917 y(Changes)26 + b(y)n(ou)h(mak)n(e)g(in)h(that)g(\014le)g(will)f(b)r(e)h(preserv)n(ed.) +-863 1015 y(The)22 b(\\)p Fr(_darcs/prefs/p)o(ref)o(s)p ++863 1020 y(The)22 b(\\)p Fr(_darcs/prefs/p)o(ref)o(s)p + Fx(")15 b(holds)21 b(the)g(only)g(preferences)f(information)h(that)h +-(can)739 1114 y(propagate)h(b)r(et)n(w)n(een)i(rep)r(ositories)e(b)n(y) ++(can)739 1120 y(propagate)h(b)r(et)n(w)n(een)i(rep)r(ositories)e(b)n(y) + i(pushes)g(and)f(pulls,)i(and)f(the)g(only)g(w)n(a)n(y)e(this)j(hap-) +-739 1214 y(p)r(ens)k(is)h(when)f(the)h(setprefs)e(command)h(is)g(used.) ++739 1219 y(p)r(ens)k(is)h(when)f(the)h(setprefs)e(command)h(is)g(used.) + 45 b(Note)30 b(that)h(although)f(prefs)f(settings)739 +-1314 y(are)36 b(included)i(in)f(patc)n(hes,)i(they)f(are)e ++1319 y(are)36 b(included)i(in)f(patc)n(hes,)i(they)f(are)e + Fs(not)44 b Fx(fully)38 b(v)n(ersion)e(con)n(trolled.)64 +-b(In)37 b(particular,)739 1413 y(dep)r(ending)29 b(on)g(the)h(order)e ++b(In)37 b(particular,)739 1419 y(dep)r(ending)29 b(on)g(the)h(order)e + (in)h(whic)n(h)g(a)g(series)f(of)h(merges)f(is)h(p)r(erformed,)g(y)n +-(ou)g(ma)n(y)f(end)739 1513 y(up)j(with)g(a)f(di\013eren)n(t)h(\014nal) ++(ou)g(ma)n(y)f(end)739 1518 y(up)j(with)g(a)f(di\013eren)n(t)h(\014nal) + g(prefs)f(con\014guration.)45 b(In)31 b(practice)f(I)g(don't)h(exp)r +-(ect)g(this)g(to)739 1612 y(b)r(e)d(a)f(problem,)g(as)g(the)h(prefs)f ++(ect)g(this)g(to)739 1618 y(b)r(e)d(a)f(problem,)g(as)g(the)h(prefs)f + (usually)h(w)n(on't)f(b)r(e)h(c)n(hanged)e(v)n(ery)h(often.)863 +-1713 y(The)32 b(follo)n(wing)e(v)-5 b(alues)31 b(are)f(v)-5 ++1721 y(The)32 b(follo)n(wing)e(v)-5 b(alues)31 b(are)f(v)-5 + b(alid)32 b(preferences)e(options)h(whic)n(h)g(can)g(b)r(e)g +-(con\014gured)739 1812 y(using)c(setpref:)863 1980 y ++(con\014gured)739 1821 y(using)c(setpref:)863 1997 y + Fn(\017)41 b Fx(\\test")27 b(|)h(the)g(command)f(to)h(run)f(as)g(a)g +-(test)h(script.)863 2149 y Fn(\017)41 b Fx(\\predist")27 ++(test)h(script.)863 2176 y Fn(\017)41 b Fx(\\predist")27 + b(|)g(a)g(command)g(to)g(run)h(prior)e(to)h(tarring)f(up)i(a)f +-(distribution)g(tarball.)946 2248 y(T)n(ypically)g(this)h(w)n(ould)f ++(distribution)g(tarball.)946 2276 y(T)n(ypically)g(this)h(w)n(ould)f + (consist)g(of)h(auto)r(conf)f(and/or)f(automak)n(e.)863 +-2417 y Fn(\017)41 b Fx(\\b)r(oring\014le")23 b(|)h(the)g(name)g(of)g(a) ++2455 y Fn(\017)41 b Fx(\\b)r(oring\014le")23 b(|)h(the)g(name)g(of)g(a) + g(\014le)g(to)g(read)f(instead)h(of)g(the)g(\\b)r(oring")e(prefs)i +-(\014le.)863 2585 y Fn(\017)41 b Fx(\\binaries\014le")27 ++(\014le.)863 2635 y Fn(\017)41 b Fx(\\binaries\014le")27 + b(|)h(the)h(name)f(of)g(a)g(\014le)h(to)f(read)f(instead)h(of)g(the)h +-(\\binaries")e(prefs)946 2685 y(\014le.)739 2920 y Fk(6.8.3)112 +-b(darcs)38 b(c)m(hec)m(k)739 3075 y Fr(Usage:)j(darcs)h(check)f +-([OPTION]...)863 3175 y Fx(Options:)1013 3270 y Fr(--complete)662 ++(\\binaries")e(prefs)946 2734 y(\014le.)739 2985 y Fk(6.8.3)112 ++b(darcs)38 b(c)m(hec)m(k)739 3144 y Fr(Usage:)j(darcs)h(check)f ++([OPTION]...)863 3247 y Fx(Options:)1013 3345 y Fr(--complete)662 + b Fx(get)27 b(a)h(complete)f(cop)n(y)g(of)g(the)h(rep)r(ository)1013 +-3410 y Fr(--partial)2115 3357 y Fx(get)f(partial)g(rep)r(ository)f +-(using)h(c)n(hec)n(kp)r(oin)n(t)2115 3457 y(\(old-fashioned)g(format)g +-(only\))1013 3548 y Fr(--verify-hashes)442 b Fx(v)n(erify)27 +-b(v)-5 b(alidit)n(y)27 b(of)h(patc)n(h)f(\014les)1013 +-3647 y Fr(--no-test)706 b Fx(don't)28 b(run)f(the)h(test)g(script)1013 +-3747 y Fr(--test)838 b Fx(run)27 b(the)h(test)g(script)1013 +-3846 y Fr(--leave-test-dir)o(ec)o(tor)o(y)137 b Fx(don't)28 +-b(remo)n(v)n(e)e(the)i(test)g(directory)1013 3946 y Fr +-(--remove-test-di)o(re)o(cto)o(ry)93 b Fx(remo)n(v)n(e)26 +-b(the)i(test)g(directory)1013 4075 y Fr(--repodir)40 +-b(DIRECTORY)2115 4034 y Fx(sp)r(ecify)28 b(the)g(rep)r(ository)e +-(directory)g(in)i(whic)n(h)g(to)2115 4133 y(run)863 4200 ++3484 y Fr(--partial)2115 3432 y Fx(get)f(partial)g(rep)r(ository)f ++(using)h(c)n(hec)n(kp)r(oin)n(t)2115 3532 y(\(old-fashioned)g(format)g ++(only\))1013 3622 y Fr(--no-test)706 b Fx(don't)28 b(run)f(the)h(test)g ++(script)1013 3722 y Fr(--test)838 b Fx(run)27 b(the)h(test)g(script) ++1013 3822 y Fr(--leave-test-dir)o(ec)o(tor)o(y)137 b ++Fx(don't)28 b(remo)n(v)n(e)e(the)i(test)g(directory)1013 ++3921 y Fr(--remove-test-di)o(re)o(cto)o(ry)93 b Fx(remo)n(v)n(e)26 ++b(the)i(test)g(directory)1013 4051 y Fr(--repodir)40 ++b(DIRECTORY)2115 4009 y Fx(sp)r(ecify)28 b(the)g(rep)r(ository)e ++(directory)g(in)i(whic)n(h)g(to)2115 4108 y(run)863 4178 + y(Chec)n(k)f(the)h(rep)r(ository)d(for)i(consistency)-7 + b(.)36 b(Chec)n(k)26 b(v)n(eri\014es)h(that)g(the)h(patc)n(hes)e +-(stored)739 4299 y(in)g(the)g(rep)r(ository)-7 b(,)24 ++(stored)739 4277 y(in)g(the)g(rep)r(ository)-7 b(,)24 + b(when)i(successiv)n(ely)e(applied)h(to)h(an)f(empt)n(y)h(tree,)f(prop) +-r(erly)g(recreate)739 4399 y(the)j(stored)f(pristine)g(tree.)p +-975 4584 2392 4 v 975 4659 a Fr(--complete,)39 b(--partial)p +-975 4714 V 863 4899 a Fx(If)h(y)n(ou)e(ha)n(v)n(e)f(a)i(c)n(hec)n(kp)r ++r(erly)g(recreate)739 4377 y(the)j(stored)f(pristine)g(tree.)p ++975 4573 2392 4 v 975 4648 a Fr(--complete,)39 b(--partial)p ++975 4703 V 863 4899 a Fx(If)h(y)n(ou)e(ha)n(v)n(e)f(a)i(c)n(hec)n(kp)r + (oin)n(t)f(of)h(the)g(rep)r(ository)e(\(as)h(is)h(the)g(case)f(if)i(y)n + (ou)e(got)g(the)739 4998 y(rep)r(ository)18 b(originally)g(using)h + Fr(darcs)41 b(get)i(--partial)p Fx(\),)18 b(b)n(y)h(default)h +@@ -10833,773 +10833,784 @@ + 3788 y Fr(--repodir)40 b(DIRECTORY)1754 3746 y Fx(sp)r(ecify)28 + b(the)g(rep)r(ository)e(directory)g(in)i(whic)n(h)f(to)1754 + 3846 y(run)415 3912 y(Adv)-5 b(anced)28 b(options:)565 +-4006 y Fr(--compress)313 b Fx(create)27 b(compressed)f(patc)n(hes)565 +-4106 y Fr(--dont-compress)93 b Fx(don't)28 b(create)e(compressed)h +-(patc)n(hes)565 4205 y Fr(--ignore-times)1318 4213 y +-Fx(don't)h(trust)f(the)h(\014le)g(mo)r(di\014cation)g(times)565 +-4305 y Fr(--umask)40 b(UMASK)185 b Fx(sp)r(ecify)28 b(umask)f(to)g(use) +-h(when)g(writing)415 4401 y(Amend-record)19 b(is)h(used)h(to)f(replace) +-f(a)h(patc)n(h)g(with)h(a)f(new)n(er)f(v)n(ersion)g(with)h(additional) +-291 4500 y(c)n(hanges.)415 4600 y(W)-9 b(ARNINGS:)36 +-b(Y)-7 b(ou)34 b(should)f(ONL)-7 b(Y)34 b(use)g(amend-record)e(on)i +-(patc)n(hes)f(whic)n(h)h(only)291 4700 y(exist)d(in)h(a)f(single)g(rep) +-r(ository!)46 b(Also,)32 b(running)g(amend-record)d(while)j(another)e +-(user)h(is)291 4799 y(pulling)c(from)h(the)g(same)f(rep)r(ository)f(ma) +-n(y)g(cause)h(rep)r(ository)f(corruption.)415 4899 y(If)36 +-b(y)n(ou)g(pro)n(vide)e(one)i(or)f(more)g(\014les)h(or)f(directories)g +-(as)g(additional)g(argumen)n(ts)g(to)291 4998 y(amend-record,)21 +-b(y)n(ou)i(will)g(only)f(b)r(e)h(prompted)g(to)g(c)n(hanges)e(in)i +-(those)g(\014les)f(or)g(directories.)p eop end ++4006 y Fr(--compress)923 b Fx(create)27 b(compressed)f(patc)n(hes)565 ++4106 y Fr(--dont-compress)703 b Fx(don't)28 b(create)f(compressed)f ++(patc)n(hes)565 4205 y Fr(--ignore-times)1928 4213 y ++Fx(don't)i(trust)g(the)g(\014le)f(mo)r(di\014cation)h(times)565 ++4305 y Fr(--umask)40 b(UMASK)795 b Fx(sp)r(ecify)28 b(umask)f(to)h(use) ++f(when)h(writing)565 4405 y Fr(--set-scripts-e)o(xec)o(ut)o(ab)o(le)311 ++b Fx(mak)n(e)27 b(scripts)g(executable)565 4504 y Fr(--dont-set-scri)o ++(pts)o(-e)o(xe)o(cut)o(ab)o(le)93 b Fx(don't)28 b(mak)n(e)f(scripts)g ++(executable)415 4600 y(Amend-record)19 b(is)h(used)h(to)f(replace)f(a)h ++(patc)n(h)g(with)h(a)f(new)n(er)f(v)n(ersion)g(with)h(additional)291 ++4700 y(c)n(hanges.)415 4799 y(W)-9 b(ARNINGS:)36 b(Y)-7 ++b(ou)34 b(should)f(ONL)-7 b(Y)34 b(use)g(amend-record)e(on)i(patc)n ++(hes)f(whic)n(h)h(only)291 4899 y(exist)d(in)h(a)f(single)g(rep)r ++(ository!)46 b(Also,)32 b(running)g(amend-record)d(while)j(another)e ++(user)h(is)291 4998 y(pulling)c(from)h(the)g(same)f(rep)r(ository)f(ma) ++n(y)g(cause)h(rep)r(ository)f(corruption.)p eop end + %%Page: 90 90 + TeXDict begin 90 89 bop 739 282 a Fx(90)1378 b Fu(CHAPTER)27 +-b(6.)64 b(D)n(AR)n(CS)28 b(COMMANDS)863 515 y Fx(The)37 ++b(6.)64 b(D)n(AR)n(CS)28 b(COMMANDS)863 515 y Fx(If)37 ++b(y)n(ou)e(pro)n(vide)g(one)g(or)g(more)h(\014les)f(or)g(directories)g ++(as)g(additional)h(argumen)n(ts)e(to)739 615 y(amend-record,)22 ++b(y)n(ou)g(will)h(only)f(b)r(e)i(prompted)e(to)h(c)n(hanges)e(in)i ++(those)g(\014les)g(or)f(directories.)863 719 y(The)37 + b(old)g(v)n(ersion)e(of)h(the)i(patc)n(h)e(is)h(lost)f(and)h(the)g(new) +-f(patc)n(h)h(will)g(include)g(b)r(oth)739 615 y(the)32 ++f(patc)n(h)h(will)g(include)g(b)r(oth)739 819 y(the)32 + b(old)f(and)g(the)h(new)f(c)n(hanges.)47 b(This)32 b(is)f(mostly)g(the) +-h(same)f(as)g(unrecording)f(the)h(old)739 715 y(patc)n(h,)g(\014xing)g ++h(same)f(as)g(unrecording)f(the)h(old)739 918 y(patc)n(h,)g(\014xing)g + (the)h(c)n(hanges)d(and)i(recording)e(a)i(new)g(patc)n(h)f(with)i(the)f +-(same)g(name)f(and)739 814 y(description.)863 919 y Fr(amend-record)23 +-b Fx(will)28 b(mo)r(dify)g(the)g(date)f(of)h(the)g(recorded)e(patc)n +-(h.)863 1023 y(If)38 b(y)n(ou)e(con\014gure)f(darcs)h(to)g(run)h(a)f +-(test)h(suite,)i(darcs)d(will)h(run)f(this)h(test)g(on)g(the)739 +-1123 y(amended)28 b(rep)r(ository)e(to)i(mak)n(e)g(sure)f(it)i(is)f(v) +--5 b(alid.)38 b(Darcs)28 b(\014rst)f(creates)g(a)h(pristine)g(cop)n(y) +-739 1222 y(of)34 b(the)i(source)d(tree)h(\(in)h(a)g(temp)r(orary)e +-(directory\),)j(then)f(it)g(runs)f(the)h(test,)i(using)d(its)739 +-1322 y(return)27 b(v)-5 b(alue)28 b(to)f(decide)h(if)g(the)g(amended)f +-(c)n(hange)g(is)g(v)-5 b(alid.)739 1579 y Fk(6.9.2)112 +-b(darcs)38 b(rollbac)m(k)739 1741 y Fr(Usage:)j(darcs)h(rollback)e +-([OPTION]...)f([FILE)i(or)i(DIRECTORY]...)863 1846 y +-Fx(Options:)1100 1983 y Fr(--from-match)c(PATTERN)2202 +-1933 y Fx(select)28 b(c)n(hanges)e(starting)h(with)h(a)f(patc)n(h)2202 +-2032 y(matc)n(hing)g(P)-7 b(A)g(TTERN)1100 2156 y Fr(--from-patch)39 +-b(REGEXP)2202 2106 y Fx(select)28 b(c)n(hanges)e(starting)h(with)h(a)f +-(patc)n(h)2202 2206 y(matc)n(hing)g(REGEXP)1100 2321 +-y Fr(--from-tag)39 b(REGEXP)2202 2280 y Fx(select)28 +-b(c)n(hanges)e(starting)h(with)h(a)f(tag)g(matc)n(hing)2202 +-2379 y(REGEXP)1100 2449 y Fr(--last)41 b(NUMBER)533 b +-Fx(select)28 b(the)g(last)f(NUMBER)h(patc)n(hes)1100 +-2549 y Fr(--matches)40 b(PATTERN)358 b Fx(select)28 b(patc)n(hes)f +-(matc)n(hing)g(P)-7 b(A)g(TTERN)913 2648 y Fr(-p)99 b(--patches)40 ++(same)g(name)f(and)739 1018 y(description.)863 1122 y ++Fr(amend-record)23 b Fx(will)28 b(mo)r(dify)g(the)g(date)f(of)h(the)g ++(recorded)e(patc)n(h.)863 1226 y(If)38 b(y)n(ou)e(con\014gure)f(darcs)h ++(to)g(run)h(a)f(test)h(suite,)i(darcs)d(will)h(run)f(this)h(test)g(on)g ++(the)739 1326 y(amended)21 b(rep)r(ository)e(to)i(mak)n(e)g(sure)f(it)i ++(is)f(v)-5 b(alid.)34 b(Darcs)21 b(\014rst)f(creates)g(a)h(pristine)g ++(cop)n(y)f(of)739 1425 y(the)k(source)e(tree)h(\(in)h(a)f(temp)r(orary) ++f(directory\),)h(then)h(it)g(runs)f(the)h(test,)g(using)f(its)h(return) ++739 1525 y(v)-5 b(alue)18 b(to)g(decide)h(if)g(the)f(amended)h(c)n ++(hange)e(is)h(v)-5 b(alid.)34 b(If)19 b(the)g Fr(--set-scripts-e)o(xec) ++o(ut)o(abl)o(e)739 1624 y Fx(\015ag)h(is)h(passed)f(to)g(amend-record,) ++g(darcs)g(will)h(set)g(scripts)f(executable)g(in)h(the)g(temp)r(orary) ++739 1724 y(test)28 b(directory)e(b)r(efore)h(running)h(the)g(test.)739 ++1980 y Fk(6.9.2)112 b(darcs)38 b(rollbac)m(k)739 2142 ++y Fr(Usage:)j(darcs)h(rollback)e([OPTION]...)f([FILE)i(or)i ++(DIRECTORY]...)863 2246 y Fx(Options:)1100 2382 y Fr(--from-match)c ++(PATTERN)2202 2332 y Fx(select)28 b(c)n(hanges)e(starting)h(with)h(a)f ++(patc)n(h)2202 2432 y(matc)n(hing)g(P)-7 b(A)g(TTERN)1100 ++2555 y Fr(--from-patch)39 b(REGEXP)2202 2506 y Fx(select)28 ++b(c)n(hanges)e(starting)h(with)h(a)f(patc)n(h)2202 2605 ++y(matc)n(hing)g(REGEXP)1100 2721 y Fr(--from-tag)39 b(REGEXP)2202 ++2679 y Fx(select)28 b(c)n(hanges)e(starting)h(with)h(a)f(tag)g(matc)n ++(hing)2202 2779 y(REGEXP)1100 2848 y Fr(--last)41 b(NUMBER)533 ++b Fx(select)28 b(the)g(last)f(NUMBER)h(patc)n(hes)1100 ++2948 y Fr(--matches)40 b(PATTERN)358 b Fx(select)28 b(patc)n(hes)f ++(matc)n(hing)g(P)-7 b(A)g(TTERN)913 3048 y Fr(-p)99 b(--patches)40 + b(REGEXP)402 b Fx(select)28 b(patc)n(hes)f(matc)n(hing)g(REGEXP)913 +-2748 y Fr(-t)99 b(--tags)41 b(REGEXP)533 b Fx(select)28 +-b(tags)e(matc)n(hing)h(REGEXP)913 2847 y Fr(-a)99 b(--all)882 ++3147 y Fr(-t)99 b(--tags)41 b(REGEXP)533 b Fx(select)28 ++b(tags)e(matc)n(hing)h(REGEXP)913 3247 y Fr(-a)99 b(--all)882 + b Fx(answ)n(er)26 b(y)n(es)h(to)h(all)f(patc)n(hes)913 +-2947 y Fr(-i)99 b(--interactive)530 b Fx(prompt)28 b(user)f(in)n +-(teractiv)n(ely)913 3047 y Fr(-A)99 b(--author)40 b(EMAIL)490 +-b Fx(sp)r(ecify)28 b(author)f(id)913 3146 y Fr(-m)99 ++3347 y Fr(-i)99 b(--interactive)530 b Fx(prompt)28 b(user)f(in)n ++(teractiv)n(ely)913 3446 y Fr(-A)99 b(--author)40 b(EMAIL)490 ++b Fx(sp)r(ecify)28 b(author)f(id)913 3546 y Fr(-m)99 + b(--patch-name)39 b(PATCHNAME)139 b Fx(name)28 b(of)f(patc)n(h)1100 +-3246 y Fr(--edit-long-comm)o(ent)267 b Fx(edit)28 b(the)g(long)f +-(commen)n(t)h(b)n(y)f(default)1100 3346 y Fr(--skip-long-comm)o(ent)267 ++3645 y Fr(--edit-long-comm)o(ent)267 b Fx(edit)28 b(the)g(long)f ++(commen)n(t)h(b)n(y)f(default)1100 3745 y Fr(--skip-long-comm)o(ent)267 + b Fx(don't)28 b(giv)n(e)f(a)g(long)g(commen)n(t)1100 +-3445 y Fr(--prompt-long-co)o(mme)o(nt)180 b Fx(prompt)26 ++3845 y Fr(--prompt-long-co)o(mme)o(nt)180 b Fx(prompt)26 + b(for)g(whether)h(to)f(edit)h(the)g(long)f(commen)n(t)1100 +-3545 y Fr(--no-test)706 b Fx(don't)28 b(run)f(the)h(test)g(script)1100 +-3644 y Fr(--test)838 b Fx(run)28 b(the)g(test)f(script)1100 +-3744 y Fr(--leave-test-dir)o(ect)o(or)o(y)137 b Fx(don't)28 +-b(remo)n(v)n(e)e(the)i(test)g(directory)1100 3844 y Fr ++3944 y Fr(--no-test)706 b Fx(don't)28 b(run)f(the)h(test)g(script)1100 ++4044 y Fr(--test)838 b Fx(run)28 b(the)g(test)f(script)1100 ++4144 y Fr(--leave-test-dir)o(ect)o(or)o(y)137 b Fx(don't)28 ++b(remo)n(v)n(e)e(the)i(test)g(directory)1100 4243 y Fr + (--remove-test-di)o(rec)o(to)o(ry)93 b Fx(remo)n(v)n(e)26 +-b(the)i(test)g(directory)1100 3973 y Fr(--repodir)40 +-b(DIRECTORY)2202 3931 y Fx(sp)r(ecify)28 b(the)g(rep)r(ository)e +-(directory)g(in)i(whic)n(h)g(to)2202 4031 y(run)863 4102 +-y(Adv)-5 b(anced)28 b(options:)1013 4201 y Fr(--compress)313 +-b Fx(create)27 b(compressed)f(patc)n(hes)1013 4300 y ++b(the)i(test)g(directory)1100 4372 y Fr(--repodir)40 ++b(DIRECTORY)2202 4331 y Fx(sp)r(ecify)28 b(the)g(rep)r(ository)e ++(directory)g(in)i(whic)n(h)g(to)2202 4430 y(run)863 4501 ++y(Adv)-5 b(anced)28 b(options:)1013 4599 y Fr(--compress)313 ++b Fx(create)27 b(compressed)f(patc)n(hes)1013 4699 y + Fr(--dont-compress)93 b Fx(don't)28 b(create)f(compressed)f(patc)n(hes) +-1013 4400 y Fr(--umask)41 b(UMASK)184 b Fx(sp)r(ecify)28 +-b(umask)f(to)h(use)f(when)h(writing)863 4500 y(Rollbac)n(k)d(is)g(used) ++1013 4799 y Fr(--umask)41 b(UMASK)184 b Fx(sp)r(ecify)28 ++b(umask)f(to)h(use)f(when)h(writing)863 4899 y(Rollbac)n(k)d(is)g(used) + g(to)g(undo)g(the)h(e\013ects)f(of)g(one)g(or)f(more)h(patc)n(hes)f +-(without)i(actually)739 4600 y(deleting)32 b(them.)53 ++(without)i(actually)739 4998 y(deleting)32 b(them.)53 + b(Instead,)33 b(it)g(creates)f(a)g(new)g(patc)n(h)h(rev)n(ersing)d +-(selected)i(p)r(ortions.)51 b(of)739 4700 y(those)22 +-b(c)n(hanges.)33 b(Unlik)n(e)22 b(obliterate)g(and)g(unrecord)f(\(whic) +-n(h)h(accomplish)f(a)h(similar)f(goal\))739 4799 y(rollbac)n(k)h(is)h +-(p)r(erfectly)h(safe,)f(since)h(it)g(lea)n(v)n(es)d(in)j(the)g(rep)r +-(ository)e(a)h(record)f(of)h(its)h(c)n(hanges.)739 4899 +-y(If)29 b(y)n(ou)f(decide)g(y)n(ou)g(didn't)i(w)n(an)n(t)e(to)g(roll)g +-(bac)n(k)g(a)g(patc)n(h)g(after)h(all,)f(y)n(ou)g(can)g(rev)n(erse)f +-(its)739 4998 y(e\013ect)h(b)n(y)f(obliterating)g(the)h(rolled-bac)n(k) +-d(patc)n(h.)p eop end ++(selected)i(p)r(ortions.)51 b(of)p eop end + %%Page: 91 91 + TeXDict begin 91 90 bop 291 282 a Fu(6.9.)63 b(UNDOING,)29 + b(REDOING)f(AND)g(R)n(UNNING)h(IN)f(CIR)n(CLES)566 b +-Fx(91)415 515 y(Rollbac)n(k)22 b(can)h(actually)f(allo)n(w)g(y)n(ou)h +-(to)g(roll)f(bac)n(k)g(a)h(subset)g(of)g(the)h(c)n(hanges)d(made)i(b)n +-(y)291 615 y(the)k(selected)f(patc)n(h)g(or)g(patc)n(hes.)36 +-b(Man)n(y)26 b(of)h(the)g(options)f(a)n(v)-5 b(ailable)25 +-b(in)i(rollbac)n(k)e(b)r(eha)n(v)n(e)291 715 y(similarly)h(to)i(the)g +-(options)f(for)g(unrecord)f(6.9.3)h(and)g(record)f(6.6.1.)291 +-958 y Fk(6.9.3)112 b(darcs)38 b(unrecord)291 1116 y Fr(Usage:)j(darcs)g +-(unrecord)f([OPTION]...)415 1217 y Fx(Options:)652 1351 +-y Fr(--from-match)e(PATTERN)1623 1302 y Fx(select)28 +-b(c)n(hanges)e(starting)g(with)j(a)e(patc)n(h)1623 1401 +-y(matc)n(hing)g(P)-7 b(A)g(TTERN)652 1525 y Fr(--from-patch)38 +-b(REGEXP)1623 1475 y Fx(select)28 b(c)n(hanges)e(starting)g(with)j(a)e +-(patc)n(h)1623 1575 y(matc)n(hing)g(REGEXP)652 1690 y +-Fr(--from-tag)39 b(REGEXP)1623 1649 y Fx(select)28 b(c)n(hanges)e +-(starting)g(with)j(a)e(tag)g(matc)n(hing)1623 1748 y(REGEXP)652 +-1818 y Fr(--last)41 b(NUMBER)402 b Fx(select)28 b(the)g(last)f(NUMBER)h +-(patc)n(hes)652 1917 y Fr(--matches)40 b(PATTERN)227 ++Fx(91)291 515 y(those)21 b(c)n(hanges.)34 b(Unlik)n(e)22 ++b(obliterate)f(and)h(unrecord)f(\(whic)n(h)i(accomplish)e(a)h(similar)f ++(goal\))291 615 y(rollbac)n(k)g(is)j(p)r(erfectly)f(safe,)h(since)f(it) ++h(lea)n(v)n(es)e(in)i(the)g(rep)r(ository)d(a)i(record)f(of)i(its)f(c)n ++(hanges.)291 715 y(If)29 b(y)n(ou)e(decide)i(y)n(ou)f(didn't)h(w)n(an)n ++(t)f(to)h(roll)f(bac)n(k)g(a)g(patc)n(h)g(after)g(all,)h(y)n(ou)f(can)g ++(rev)n(erse)f(its)291 814 y(e\013ect)h(b)n(y)f(obliterating)g(the)h ++(rolled-bac)n(k)d(patc)n(h.)415 921 y(Rollbac)n(k)d(can)h(actually)f ++(allo)n(w)g(y)n(ou)h(to)g(roll)f(bac)n(k)g(a)h(subset)g(of)g(the)h(c)n ++(hanges)d(made)i(b)n(y)291 1020 y(the)k(selected)f(patc)n(h)g(or)g ++(patc)n(hes.)36 b(Man)n(y)26 b(of)h(the)g(options)f(a)n(v)-5 ++b(ailable)25 b(in)i(rollbac)n(k)e(b)r(eha)n(v)n(e)291 ++1120 y(similarly)h(to)i(the)g(options)f(for)g(unrecord)f(6.9.3)h(and)g ++(record)f(6.6.1.)291 1390 y Fk(6.9.3)112 b(darcs)38 b(unrecord)291 ++1556 y Fr(Usage:)j(darcs)g(unrecord)f([OPTION]...)415 ++1662 y Fx(Options:)652 1801 y Fr(--from-match)e(PATTERN)1623 ++1751 y Fx(select)28 b(c)n(hanges)e(starting)g(with)j(a)e(patc)n(h)1623 ++1851 y(matc)n(hing)g(P)-7 b(A)g(TTERN)652 1975 y Fr(--from-patch)38 ++b(REGEXP)1623 1925 y Fx(select)28 b(c)n(hanges)e(starting)g(with)j(a)e ++(patc)n(h)1623 2025 y(matc)n(hing)g(REGEXP)652 2140 y ++Fr(--from-tag)39 b(REGEXP)1623 2098 y Fx(select)28 b(c)n(hanges)e ++(starting)g(with)j(a)e(tag)g(matc)n(hing)1623 2198 y(REGEXP)652 ++2268 y Fr(--last)41 b(NUMBER)402 b Fx(select)28 b(the)g(last)f(NUMBER)h ++(patc)n(hes)652 2367 y Fr(--matches)40 b(PATTERN)227 + b Fx(select)28 b(patc)n(hes)e(matc)n(hing)i(P)-7 b(A)g(TTERN)465 +-2017 y Fr(-p)99 b(--patches)40 b(REGEXP)271 b Fx(select)28 +-b(patc)n(hes)e(matc)n(hing)i(REGEXP)465 2117 y Fr(-t)99 ++2467 y Fr(-p)99 b(--patches)40 b(REGEXP)271 b Fx(select)28 ++b(patc)n(hes)e(matc)n(hing)i(REGEXP)465 2567 y Fr(-t)99 + b(--tags)41 b(REGEXP)402 b Fx(select)28 b(tags)e(matc)n(hing)h(REGEXP) +-652 2216 y Fr(--no-deps)575 b Fx(don't)28 b(automatically)e(ful\014ll)j +-(dep)r(endencies)465 2316 y Fr(-a)99 b(--all)751 b Fx(answ)n(er)26 +-b(y)n(es)h(to)h(all)f(patc)n(hes)465 2416 y Fr(-i)99 ++652 2666 y Fr(--no-deps)575 b Fx(don't)28 b(automatically)e(ful\014ll)j ++(dep)r(endencies)465 2766 y Fr(-a)99 b(--all)751 b Fx(answ)n(er)26 ++b(y)n(es)h(to)h(all)f(patc)n(hes)465 2865 y Fr(-i)99 + b(--interactive)399 b Fx(prompt)27 b(user)g(in)n(teractiv)n(ely)652 +-2545 y Fr(--repodir)40 b(DIRECTORY)1623 2503 y Fx(sp)r(ecify)28 ++2995 y Fr(--repodir)40 b(DIRECTORY)1623 2953 y Fx(sp)r(ecify)28 + b(the)g(rep)r(ository)e(directory)g(in)i(whic)n(h)g(to)1623 +-2603 y(run)415 2671 y(Adv)-5 b(anced)28 b(options:)565 +-2767 y Fr(--compress)313 b Fx(create)27 b(compressed)f(patc)n(hes)565 +-2867 y Fr(--dont-compress)93 b Fx(don't)28 b(create)e(compressed)h +-(patc)n(hes)565 2966 y Fr(--umask)40 b(UMASK)185 b Fx(sp)r(ecify)28 +-b(umask)f(to)g(use)h(when)g(writing)415 3064 y(Unrecord)38 ++3053 y(run)415 3126 y(Adv)-5 b(anced)28 b(options:)565 ++3227 y Fr(--compress)313 b Fx(create)27 b(compressed)f(patc)n(hes)565 ++3326 y Fr(--dont-compress)93 b Fx(don't)28 b(create)e(compressed)h ++(patc)n(hes)565 3426 y Fr(--umask)40 b(UMASK)185 b Fx(sp)r(ecify)28 ++b(umask)f(to)g(use)h(when)g(writing)415 3529 y(Unrecord)38 + b(do)r(es)h(the)h(opp)r(osite)f(of)g(record)f(in)h(that)h(it)g(mak)n +-(es)e(the)h(c)n(hanges)f(from)291 3164 y(patc)n(hes)22 ++(es)e(the)h(c)n(hanges)f(from)291 3628 y(patc)n(hes)22 + b(activ)n(e)g(c)n(hanges)f(again)g(whic)n(h)i(y)n(ou)f(ma)n(y)g(record) + f(or)h(rev)n(ert)f(later.)35 b(The)23 b(w)n(orking)291 +-3264 y(cop)n(y)j(itself)i(will)g(not)g(c)n(hange.)415 +-3366 y(Unrecord)33 b(can)h(b)r(e)g(though)n(t)g(of)g(as)f(undo-record.) ++3728 y(cop)n(y)j(itself)i(will)g(not)g(c)n(hange.)415 ++3835 y(Unrecord)33 b(can)h(b)r(e)g(though)n(t)g(of)g(as)f(undo-record.) + 55 b(If)34 b(a)g(record)e(is)i(follo)n(w)n(ed)f(b)n(y)h(an)291 +-3465 y(unrecord,)26 b(ev)n(erything)f(lo)r(oks)i(lik)n(e)f(b)r(efore)h ++3934 y(unrecord,)26 b(ev)n(erything)f(lo)r(oks)i(lik)n(e)f(b)r(efore)h + (the)g(record;)f(all)h(the)g(previously)f(unrecorded)291 +-3565 y(c)n(hanges)j(are)g(bac)n(k,)i(and)g(can)f(b)r(e)h(recorded)e ++4034 y(c)n(hanges)j(are)g(bac)n(k,)i(and)g(can)f(b)r(e)h(recorded)e + (again)h(in)h(a)f(new)h(patc)n(h.)45 b(The)31 b(unrecorded)291 +-3664 y(patc)n(h)f(ho)n(w)n(ev)n(er)e(is)i(actually)g(remo)n(v)n(ed)f ++4134 y(patc)n(h)f(ho)n(w)n(ev)n(er)e(is)i(actually)g(remo)n(v)n(ed)f + (from)h(y)n(our)g(rep)r(ository)-7 b(,)29 b(so)h(there)g(is)h(no)f(w)n +-(a)n(y)f(to)291 3764 y(record)d(it)i(again)e(to)i(get)f(it)h(bac)n(k.) +-1362 3734 y Fm(6)1398 3764 y Fx(.)415 3866 y(If)j(y)n(ou)f(w)n(an)n(t)g ++(a)n(y)f(to)291 4233 y(record)d(it)i(again)e(to)i(get)f(it)h(bac)n(k.) ++1362 4203 y Fm(6)1398 4233 y Fx(.)415 4340 y(If)j(y)n(ou)f(w)n(an)n(t)g + (to)g(remo)n(v)n(e)f(the)i(c)n(hanges)e(from)h(the)h(w)n(orking)e(cop)n +-(y)g(to)r(o)h(\(where)h(they)291 3965 y(otherwise)17 ++(y)g(to)r(o)h(\(where)h(they)291 4439 y(otherwise)17 + b(will)i(sho)n(w)e(up)i(as)f(unrecorded)f(c)n(hanges)g(again\),)i(y)n + (ou'll)f(also)f(need)i(to)f Fr(darcs)41 b(revert)p Fx(.)291 +-4065 y(T)-7 b(o)27 b(do)g(unrecord)f(and)i(rev)n(ert)e(in)i(one)f(go,)g ++4539 y(T)-7 b(o)27 b(do)g(unrecord)f(and)i(rev)n(ert)e(in)i(one)f(go,)g + (y)n(ou)g(can)g(use)h Fr(darcs)41 b(obliterate)p Fx(.)415 +-4167 y(If)e(y)n(ou)e(don't)h(rev)n(ert)f(after)g(unrecording,)i(then)g +-(the)f(c)n(hanges)f(made)h(b)n(y)g(the)g(un-)291 4266 ++4646 y(If)e(y)n(ou)e(don't)h(rev)n(ert)f(after)g(unrecording,)i(then)g ++(the)f(c)n(hanges)f(made)h(b)n(y)g(the)g(un-)291 4745 + y(recorded)d(patc)n(hes)h(are)f(left)j(in)e(y)n(our)g(w)n(orking)f +-(tree.)63 b(If)37 b(these)g(patc)n(hes)f(are)g(actually)291 +-4366 y(from)c(another)g(rep)r(ository)-7 b(,)33 b(in)n(teraction)f +-(\(either)i(pushes)e(or)h(pulls\))g(with)h(that)f(rep)r(osi-)291 +-4466 y(tory)e(ma)n(y)h(b)r(e)h(massiv)n(ely)e(slo)n(w)n(ed)h(do)n(wn,)h +-(as)f(darcs)f(tries)h(to)h(cop)r(e)f(with)h(the)g(fact)g(that)291 +-4565 y(y)n(ou)h(app)r(ear)f(to)i(ha)n(v)n(e)f(made)g(a)g(large)g(n)n +-(um)n(b)r(er)g(of)h(c)n(hanges)e(that)i(con\015ict)g(with)g(those)291 +-4665 y(presen)n(t)23 b(in)h(the)g(other)f(rep)r(ository)-7 +-b(.)34 b(So)23 b(if)h(y)n(ou)f(really)g(w)n(an)n(t)g(to)g(undo)h(the)g +-(result)f(of)h(a)f Fs(pul)t(l)291 4765 y Fx(op)r(eration,)31 +-b(use)g(obliterate!)47 b(Unrecord)30 b(is)i(primarily)e(in)n(tended)i +-(for)e(when)i(y)n(ou)e(record)p 291 4842 1146 4 v 383 +-4896 a Fp(6)418 4920 y Fl(The)22 b(patc)n(h)h(\014le)f(itself)f(is)g +-(not)i(actually)f(deleted,)h(but)g(its)e(con)n(text)j(is)e(lost,)f(so)h +-(it)g(cannot)h(b)r(e)f(reliably)291 4998 y(read|y)n(our)h(only)h(c)n +-(hoice)h(w)n(ould)f(b)r(e)g(to)g(go)g(in)f(b)n(y)h(hand)h(and)f(read)g +-(its)f(con)n(ten)n(ts.)p eop end ++(tree.)63 b(If)37 b(these)g(patc)n(hes)f(are)g(actually)p ++291 4842 1146 4 v 383 4896 a Fp(6)418 4920 y Fl(The)22 ++b(patc)n(h)h(\014le)f(itself)f(is)g(not)i(actually)f(deleted,)h(but)g ++(its)e(con)n(text)j(is)e(lost,)f(so)h(it)g(cannot)h(b)r(e)f(reliably) ++291 4998 y(read|y)n(our)h(only)h(c)n(hoice)h(w)n(ould)f(b)r(e)g(to)g ++(go)g(in)f(b)n(y)h(hand)h(and)f(read)g(its)f(con)n(ten)n(ts.)p ++eop end + %%Page: 92 92 + TeXDict begin 92 91 bop 739 282 a Fx(92)1378 b Fu(CHAPTER)27 +-b(6.)64 b(D)n(AR)n(CS)28 b(COMMANDS)739 515 y Fx(a)36 +-b(patc)n(h,)j(realize)c(it)i(needs)f(just)i(one)e(more)f(c)n(hange,)j +-(but)f(w)n(ould)f(rather)g(not)g(ha)n(v)n(e)g(a)739 615 +-y(separate)26 b(patc)n(h)h(for)g(just)i(that)f(one)f(c)n(hange.)863 +-715 y Fv(W)-11 b(ARNING:)29 b Fx(Unrecord)g(should)h(not)g(b)r(e)g(run) +-g(when)g(there)f(is)h(a)f(p)r(ossibilit)n(y)h(that)739 +-814 y(another)k(user)h(ma)n(y)g(b)r(e)h(pulling)f(from)h(the)f(same)g +-(rep)r(ository)-7 b(.)59 b(A)n(ttempting)36 b(to)g(do)f(so)739 +-914 y(ma)n(y)27 b(cause)g(rep)r(ository)f(corruption.)p +-975 1090 2392 4 v 975 1165 a Fr(--from-match,)38 b(--from-patch,)h +-(--from-tag,)g(--last)p 975 1220 V 863 1396 a Fx(Usually)g(y)n(ou)f +-(only)g(w)n(an)n(t)h(to)f(unrecord)g(the)h(latest)g(c)n(hanges,)h(and)f +-(almost)f(nev)n(er)739 1495 y(w)n(ould)g(y)n(ou)g(w)n(an)n(t)h(to)f +-(unrecord)g(c)n(hanges)f(b)r(efore)i(a)f(tag|y)n(ou)g(w)n(ould)g(ha)n +-(v)n(e)g(to)g(ha)n(v)n(e)739 1595 y(unrecorded)27 b(the)i(tag)f(as)g(w) +-n(ell)h(to)f(do)h(that.)40 b(Therefore,)28 b(and)g(for)g(e\016ciency)-7 +-b(,)29 b(darcs)f(only)739 1695 y(prompts)f(y)n(ou)g(for)g(the)h(latest) +-f(patc)n(hes,)g(after)h(some)f(optimal)g(tag.)863 1794 ++b(6.)64 b(D)n(AR)n(CS)28 b(COMMANDS)739 515 y Fx(from)33 ++b(another)f(rep)r(ository)-7 b(,)33 b(in)n(teraction)f(\(either)h ++(pushes)g(or)f(pulls\))h(with)h(that)f(rep)r(osi-)739 ++615 y(tory)f(ma)n(y)f(b)r(e)i(massiv)n(ely)f(slo)n(w)n(ed)f(do)n(wn,)i ++(as)f(darcs)f(tries)i(to)f(cop)r(e)g(with)h(the)g(fact)g(that)739 ++715 y(y)n(ou)h(app)r(ear)g(to)g(ha)n(v)n(e)g(made)g(a)h(large)e(n)n(um) ++n(b)r(er)i(of)f(c)n(hanges)g(that)h(con\015ict)f(with)i(those)739 ++814 y(presen)n(t)23 b(in)h(the)g(other)f(rep)r(ository)-7 ++b(.)34 b(So)23 b(if)i(y)n(ou)d(really)h(w)n(an)n(t)g(to)h(undo)f(the)h ++(result)g(of)f(a)g Fs(pul)t(l)739 914 y Fx(op)r(eration,)31 ++b(use)g(obliterate!)48 b(Unrecord)30 b(is)h(primarily)f(in)n(tended)i ++(for)f(when)g(y)n(ou)g(record)739 1013 y(a)36 b(patc)n(h,)j(realize)c ++(it)i(needs)f(just)i(one)e(more)f(c)n(hange,)j(but)f(w)n(ould)f(rather) ++g(not)g(ha)n(v)n(e)g(a)739 1113 y(separate)26 b(patc)n(h)h(for)g(just)i ++(that)f(one)f(c)n(hange.)863 1242 y Fv(W)-11 b(ARNING:)29 ++b Fx(Unrecord)g(should)h(not)g(b)r(e)g(run)g(when)g(there)f(is)h(a)f(p) ++r(ossibilit)n(y)h(that)739 1341 y(another)k(user)h(ma)n(y)g(b)r(e)h ++(pulling)f(from)h(the)f(same)g(rep)r(ository)-7 b(.)59 ++b(A)n(ttempting)36 b(to)g(do)f(so)739 1441 y(ma)n(y)27 ++b(cause)g(rep)r(ository)f(corruption.)p 975 1739 2392 ++4 v 975 1814 a Fr(--from-match,)38 b(--from-patch,)h(--from-tag,)g ++(--last)p 975 1869 V 863 2168 a Fx(Usually)g(y)n(ou)f(only)g(w)n(an)n ++(t)h(to)f(unrecord)g(the)h(latest)g(c)n(hanges,)h(and)f(almost)f(nev)n ++(er)739 2267 y(w)n(ould)g(y)n(ou)g(w)n(an)n(t)h(to)f(unrecord)g(c)n ++(hanges)f(b)r(efore)i(a)f(tag|y)n(ou)g(w)n(ould)g(ha)n(v)n(e)g(to)g(ha) ++n(v)n(e)739 2367 y(unrecorded)27 b(the)i(tag)f(as)g(w)n(ell)h(to)f(do)h ++(that.)40 b(Therefore,)28 b(and)g(for)g(e\016ciency)-7 ++b(,)29 b(darcs)f(only)739 2467 y(prompts)f(y)n(ou)g(for)g(the)h(latest) ++f(patc)n(hes,)g(after)h(some)f(optimal)g(tag.)863 2595 + y(If)35 b(y)n(ou)e(do)g(w)n(an)n(t)h(to)f(unrecord)g(more)g(patc)n(hes) + g(in)i(one)e(go,)i(there)e(are)g(the)i Fr(--from)739 +-1894 y Fx(and)27 b Fr(--last)f Fx(options)h(to)g(set)h(the)g(earliest)e +-(patc)n(h)i(selectable)f(to)g(unrecord.)p 975 2070 V +-975 2145 a Fr(--matches,)40 b(--patches,)f(--tags,)i(--no-deps)p +-975 2200 V 863 2376 a Fx(The)25 b Fr(--patches)p Fx(,)c ++2695 y Fx(and)27 b Fr(--last)f Fx(options)h(to)g(set)h(the)g(earliest)e ++(patc)n(h)i(selectable)f(to)g(unrecord.)p 975 2993 V ++975 3068 a Fr(--matches,)40 b(--patches,)f(--tags,)i(--no-deps)p ++975 3123 V 863 3422 a Fx(The)25 b Fr(--patches)p Fx(,)c + Fr(--matches)p Fx(,)h Fr(--tags)p Fx(,)g(and)j Fr(--no-deps)20 +-b Fx(options)k(can)g(b)r(e)h(used)f(to)739 2475 y(select)j(whic)n(h)h ++b Fx(options)k(can)g(b)r(e)h(used)f(to)739 3521 y(select)j(whic)n(h)h + (patc)n(hes)f(to)g(unrecord,)g(as)g(describ)r(ed)g(in)h(subsection)f +-(6.1.)863 2575 y(With)22 b(these)f(options)f(y)n(ou)g(can)g(sp)r(ecify) ++(6.1.)863 3650 y(With)22 b(these)f(options)f(y)n(ou)g(can)g(sp)r(ecify) + h(what)f(patc)n(h)h(or)f(patc)n(hes)g(to)g(b)r(e)h(prompted)g(for)739 +-2674 y(b)n(y)27 b(unrecord.)36 b(This)28 b(is)g(esp)r(ecially)f(useful) ++3749 y(b)n(y)27 b(unrecord.)36 b(This)28 b(is)g(esp)r(ecially)f(useful) + h(when)g(y)n(ou)f(w)n(an)n(t)g(to)g(unrecord)g(patc)n(hes)g(with)739 +-2774 y(dep)r(endencies,)j(since)g(all)f(the)h(dep)r(enden)n(t)h(patc)n ++3849 y(dep)r(endencies,)j(since)g(all)f(the)h(dep)r(enden)n(t)h(patc)n + (hes)e(\(but)h(no)g(others\))f(will)h(b)r(e)g(included)739 +-2874 y(in)c(the)h(c)n(hoices.)35 b(Or)25 b(if)i(y)n(ou)e(use)h ++3949 y(in)c(the)h(c)n(hoices.)35 b(Or)25 b(if)i(y)n(ou)e(use)h + Fr(--no-deps)c Fx(y)n(ou)j(w)n(on't)h(b)r(e)h(ask)n(ed)e(ab)r(out)h +-(patc)n(hes)f(that)739 2973 y(can't)i(b)r(e)h(unrecorded)f(due)h(to)f +-(dep)r(ending)h(patc)n(hes.)863 3073 y(Selecting)e(patc)n(hes)f(can)g ++(patc)n(hes)f(that)739 4048 y(can't)i(b)r(e)h(unrecorded)f(due)h(to)f ++(dep)r(ending)h(patc)n(hes.)863 4177 y(Selecting)e(patc)n(hes)f(can)g + (b)r(e)h(slo)n(w,)f(so)g(darcs)f(cuts)i(the)g(searc)n(h)e(at)h(the)h +-(last)f(optimized)739 3173 y(tag.)36 b(Use)28 b(the)g ++(last)f(optimized)739 4277 y(tag.)36 b(Use)28 b(the)g + Fr(--from)d Fx(or)i Fr(--last)e Fx(options)i(to)g(searc)n(h)f(more)h +-(or)g(few)n(er)g(patc)n(hes.)739 3404 y Fk(6.9.4)112 +-b(darcs)38 b(obliterate)739 3557 y Fr(Usage:)j(darcs)h(obliterate)d +-([OPTION]...)863 3657 y Fx(Options:)1100 3789 y Fr(--from-match)g +-(PATTERN)2071 3739 y Fx(select)28 b(c)n(hanges)e(starting)h(with)h(a)f +-(patc)n(h)2071 3838 y(matc)n(hing)g(P)-7 b(A)g(TTERN)1100 +-3962 y Fr(--from-patch)39 b(REGEXP)2071 3912 y Fx(select)28 +-b(c)n(hanges)e(starting)h(with)h(a)f(patc)n(h)2071 4012 +-y(matc)n(hing)g(REGEXP)1100 4127 y Fr(--from-tag)39 b(REGEXP)2071 +-4086 y Fx(select)28 b(c)n(hanges)e(starting)h(with)h(a)f(tag)g(matc)n +-(hing)2071 4185 y(REGEXP)1100 4255 y Fr(--last)41 b(NUMBER)402 +-b Fx(select)28 b(the)g(last)f(NUMBER)h(patc)n(hes)1100 +-4355 y Fr(--matches)40 b(PATTERN)227 b Fx(select)28 b(patc)n(hes)f +-(matc)n(hing)g(P)-7 b(A)g(TTERN)913 4454 y Fr(-p)99 b(--patches)40 +-b(REGEXP)271 b Fx(select)28 b(patc)n(hes)f(matc)n(hing)g(REGEXP)913 +-4554 y Fr(-t)99 b(--tags)41 b(REGEXP)402 b Fx(select)28 +-b(tags)f(matc)n(hing)g(REGEXP)1100 4654 y Fr(--no-deps)575 +-b Fx(don't)28 b(automatically)f(ful\014ll)h(dep)r(endencies)913 +-4753 y Fr(-a)99 b(--all)751 b Fx(answ)n(er)27 b(y)n(es)f(to)i(all)f +-(patc)n(hes)913 4853 y Fr(-i)99 b(--interactive)399 b +-Fx(prompt)28 b(user)f(in)n(teractiv)n(ely)1100 4982 y +-Fr(--repodir)40 b(DIRECTORY)2071 4940 y Fx(sp)r(ecify)28 +-b(the)g(rep)r(ository)e(directory)h(in)g(whic)n(h)h(to)2071 +-5040 y(run)p eop end ++(or)g(few)n(er)g(patc)n(hes.)739 4663 y Fk(6.9.4)112 ++b(darcs)38 b(obliterate)739 4870 y Fr(Usage:)j(darcs)h(obliterate)d ++([OPTION]...)863 4998 y Fx(Options:)p eop end + %%Page: 93 93 + TeXDict begin 93 92 bop 291 282 a Fu(6.9.)63 b(UNDOING,)29 + b(REDOING)f(AND)g(R)n(UNNING)h(IN)f(CIR)n(CLES)566 b +-Fx(93)415 515 y(Adv)-5 b(anced)28 b(options:)565 610 +-y Fr(--compress)313 b Fx(create)27 b(compressed)f(patc)n(hes)565 +-710 y Fr(--dont-compress)93 b Fx(don't)28 b(create)e(compressed)h(patc) +-n(hes)565 810 y Fr(--ignore-times)1318 818 y Fx(don't)h(trust)f(the)h +-(\014le)g(mo)r(di\014cation)g(times)565 909 y Fr(--umask)40 +-b(UMASK)185 b Fx(sp)r(ecify)28 b(umask)f(to)g(use)h(when)g(writing)415 +-1006 y(Obliterate)g(completely)h(remo)n(v)n(es)e(recorded)h(patc)n(hes) +-g(from)g(y)n(our)g(lo)r(cal)g(rep)r(ository)-7 b(.)291 +-1106 y(The)30 b(c)n(hanges)f(will)i(b)r(e)g(undone)f(in)h(y)n(our)e(w)n +-(orking)g(cop)n(y)g(and)i(the)g(patc)n(hes)e(will)i(not)g(b)r(e)291 +-1205 y(sho)n(wn)24 b(in)h(y)n(our)e(c)n(hanges)h(list)h(an)n(ymore.)34 +-b(Bew)n(are)23 b(that)i(y)n(ou)f(can)h(lose)f(precious)g(co)r(de)g(b)n +-(y)291 1305 y(obliterating!)415 1405 y(Obliterate)33 ++Fx(93)652 540 y Fr(--from-match)38 b(PATTERN)1623 490 ++y Fx(select)28 b(c)n(hanges)e(starting)g(with)j(a)e(patc)n(h)1623 ++590 y(matc)n(hing)g(P)-7 b(A)g(TTERN)652 713 y Fr(--from-patch)38 ++b(REGEXP)1623 663 y Fx(select)28 b(c)n(hanges)e(starting)g(with)j(a)e ++(patc)n(h)1623 763 y(matc)n(hing)g(REGEXP)652 879 y Fr(--from-tag)39 ++b(REGEXP)1623 837 y Fx(select)28 b(c)n(hanges)e(starting)g(with)j(a)e ++(tag)g(matc)n(hing)1623 936 y(REGEXP)652 1006 y Fr(--last)41 ++b(NUMBER)402 b Fx(select)28 b(the)g(last)f(NUMBER)h(patc)n(hes)652 ++1106 y Fr(--matches)40 b(PATTERN)227 b Fx(select)28 b(patc)n(hes)e ++(matc)n(hing)i(P)-7 b(A)g(TTERN)465 1205 y Fr(-p)99 b(--patches)40 ++b(REGEXP)271 b Fx(select)28 b(patc)n(hes)e(matc)n(hing)i(REGEXP)465 ++1305 y Fr(-t)99 b(--tags)41 b(REGEXP)402 b Fx(select)28 ++b(tags)e(matc)n(hing)h(REGEXP)652 1405 y Fr(--no-deps)575 ++b Fx(don't)28 b(automatically)e(ful\014ll)j(dep)r(endencies)465 ++1504 y Fr(-a)99 b(--all)751 b Fx(answ)n(er)26 b(y)n(es)h(to)h(all)f ++(patc)n(hes)465 1604 y Fr(-i)99 b(--interactive)399 b ++Fx(prompt)27 b(user)g(in)n(teractiv)n(ely)652 1733 y ++Fr(--repodir)40 b(DIRECTORY)1623 1691 y Fx(sp)r(ecify)28 ++b(the)g(rep)r(ository)e(directory)g(in)i(whic)n(h)g(to)1623 ++1791 y(run)415 1860 y(Adv)-5 b(anced)28 b(options:)565 ++1957 y Fr(--compress)313 b Fx(create)27 b(compressed)f(patc)n(hes)565 ++2056 y Fr(--dont-compress)93 b Fx(don't)28 b(create)e(compressed)h ++(patc)n(hes)565 2156 y Fr(--ignore-times)1318 2164 y ++Fx(don't)h(trust)f(the)h(\014le)g(mo)r(di\014cation)g(times)565 ++2256 y Fr(--umask)40 b(UMASK)185 b Fx(sp)r(ecify)28 b(umask)f(to)g(use) ++h(when)g(writing)415 2354 y(Obliterate)g(completely)h(remo)n(v)n(es)e ++(recorded)h(patc)n(hes)g(from)g(y)n(our)g(lo)r(cal)g(rep)r(ository)-7 ++b(.)291 2454 y(The)30 b(c)n(hanges)f(will)i(b)r(e)g(undone)f(in)h(y)n ++(our)e(w)n(orking)g(cop)n(y)g(and)i(the)g(patc)n(hes)e(will)i(not)g(b)r ++(e)291 2553 y(sho)n(wn)24 b(in)h(y)n(our)e(c)n(hanges)h(list)h(an)n ++(ymore.)34 b(Bew)n(are)23 b(that)i(y)n(ou)f(can)h(lose)f(precious)g(co) ++r(de)g(b)n(y)291 2653 y(obliterating!)415 2755 y(Obliterate)33 + b(deletes)g(a)h(patc)n(h)f(from)g(the)h(rep)r(ository)e + Fs(and)43 b Fx(remo)n(v)n(es)31 b(those)i(c)n(hanges)291 +-1505 y(from)d(the)g(w)n(orking)f(directory)-7 b(.)44 ++2855 y(from)d(the)g(w)n(orking)f(directory)-7 b(.)44 + b(It)30 b(is)h(therefore)e(a)h Fs(very)j(danger)l(ous)38 +-b Fx(command.)44 b(When)291 1605 y(there)31 b(are)g(no)g(lo)r(cal)g(c)n ++b Fx(command.)44 b(When)291 2955 y(there)31 b(are)g(no)g(lo)r(cal)g(c)n + (hanges,)g(obliterate)g(is)g(equiv)-5 b(alen)n(t)32 b(to)f(an)g +-(unrecord)g(follo)n(w)n(ed)f(b)n(y)291 1704 y(a)i(rev)n(ert,)g(except)h ++(unrecord)g(follo)n(w)n(ed)f(b)n(y)291 3054 y(a)i(rev)n(ert,)g(except)h + (that)f(rev)n(ert)g(can)g(b)r(e)h(unrev)n(erted.)50 b(In)33 +-b(the)g(case)e(of)i(tags,)g(obliterate)291 1804 y(remo)n(v)n(es)25 ++b(the)g(case)e(of)i(tags,)g(obliterate)291 3154 y(remo)n(v)n(es)25 + b(the)j(tag)f(itself,)h(not)g(an)n(y)f(other)g(patc)n(hes.)415 +-1904 y(Note)i(that)h(unpull)g(w)n(as)e(the)i(old)f(name)g(for)g ++3256 y(Note)i(that)h(unpull)g(w)n(as)e(the)i(old)f(name)g(for)g + (obliterate.)41 b(Unpull)31 b(is)e(still)g(an)g(hidden)291 +-2004 y(alias)d(for)h(obliterate.)415 2105 y Fv(W)-11 ++3356 y(alias)d(for)h(obliterate.)415 3458 y Fv(W)-11 + b(ARNING:)26 b Fx(Obliterate)g(should)h(not)f(b)r(e)h(run)g(when)g +-(there)f(is)h(a)f(p)r(ossibilit)n(y)h(that)291 2204 y(another)34 ++(there)f(is)h(a)f(p)r(ossibilit)n(y)h(that)291 3558 y(another)34 + b(user)h(ma)n(y)g(b)r(e)g(pulling)h(from)f(the)h(same)f(rep)r(ository) +--7 b(.)59 b(A)n(ttempting)36 b(to)f(do)h(so)291 2304 ++-7 b(.)59 b(A)n(ttempting)36 b(to)f(do)h(so)291 3657 + y(ma)n(y)26 b(cause)h(rep)r(ository)f(corruption.)p 527 +-2490 2392 4 v 527 2565 a Fr(--from-match,)38 b(--from-patch,)g +-(--from-tag,)h(--last)p 527 2620 V 415 2806 a Fx(Usually)d(y)n(ou)g ++3851 2392 4 v 527 3926 a Fr(--from-match,)38 b(--from-patch,)g ++(--from-tag,)h(--last)p 527 3981 V 415 4174 a Fx(Usually)d(y)n(ou)g + (only)g(w)n(an)n(t)g(to)g(obliterate)g(the)g(latest)h(c)n(hanges,)g +-(and)f(almost)g(nev)n(er)291 2906 y(w)n(ould)g(y)n(ou)f(w)n(an)n(t)h ++(and)f(almost)g(nev)n(er)291 4274 y(w)n(ould)g(y)n(ou)f(w)n(an)n(t)h + (to)h(obliterate)f(c)n(hanges)f(b)r(efore)h(a)g(tag|y)n(ou)f(w)n(ould)h +-(ha)n(v)n(e)g(to)g(ha)n(v)n(e)291 3005 y(obliterated)28 ++(ha)n(v)n(e)g(to)g(ha)n(v)n(e)291 4374 y(obliterated)28 + b(the)i(tag)e(as)h(w)n(ell)g(to)g(do)g(that.)42 b(Therefore,)29 + b(and)g(for)g(e\016ciency)-7 b(,)29 b(darcs)f(only)291 +-3105 y(prompts)f(y)n(ou)g(for)g(the)h(latest)f(patc)n(hes,)g(after)g +-(some)g(optimal)h(tag.)415 3206 y(If)33 b(y)n(ou)e(do)g(w)n(an)n(t)h ++4473 y(prompts)f(y)n(ou)g(for)g(the)h(latest)f(patc)n(hes,)g(after)g ++(some)g(optimal)h(tag.)415 4576 y(If)33 b(y)n(ou)e(do)g(w)n(an)n(t)h + (to)g(obliterate)f(more)g(patc)n(hes)g(in)h(one)g(go,)g(there)g(are)f +-(the)h Fr(--from)291 3305 y Fx(and)27 b Fr(--last)e Fx(options)i(to)h ++(the)h Fr(--from)291 4675 y Fx(and)27 b Fr(--last)e Fx(options)i(to)h + (set)f(the)h(earliest)f(patc)n(h)g(selectable)g(to)h(obliterate.)p +-527 3491 V 527 3566 a Fr(--matches,)39 b(--patches,)h(--tags,)g +-(--no-deps)p 527 3621 V 415 3807 a Fx(The)25 b Fr(--patches)p +-Fx(,)c Fr(--matches)p Fx(,)g Fr(--tags)p Fx(,)i(and)h +-Fr(--no-deps)d Fx(options)j(can)g(b)r(e)h(used)f(to)291 +-3907 y(select)j(whic)n(h)h(patc)n(hes)f(to)g(obliterate,)g(as)g +-(describ)r(ed)g(in)h(subsection)f(6.1.)415 4008 y(With)22 +-b(these)e(options)g(y)n(ou)g(can)h(sp)r(ecify)g(what)f(patc)n(h)h(or)e +-(patc)n(hes)h(to)h(b)r(e)g(prompted)f(for)291 4107 y(b)n(y)i +-(obliterate.)35 b(This)23 b(is)f(esp)r(ecially)h(useful)g(when)g(y)n +-(ou)f(w)n(an)n(t)g(to)h(obliterate)f(patc)n(hes)g(with)291 +-4207 y(dep)r(endencies,)30 b(since)g(all)f(the)h(dep)r(enden)n(t)g +-(patc)n(hes)f(\(but)i(no)e(others\))g(will)h(b)r(e)g(included)291 +-4307 y(in)c(the)g(c)n(hoices.)36 b(Or)25 b(if)h(y)n(ou)g(use)f +-Fr(--no-deps)e Fx(y)n(ou)i(w)n(on't)h(b)r(e)g(ask)n(ed)f(ab)r(out)h +-(patc)n(hes)g(that)291 4406 y(can't)h(b)r(e)h(obliterated)f(due)h(to)f +-(dep)r(ending)h(patc)n(hes.)415 4507 y(Selecting)e(patc)n(hes)e(can)i +-(b)r(e)f(slo)n(w,)g(so)g(darcs)g(cuts)g(the)h(searc)n(h)e(at)i(the)f +-(last)h(optimized)291 4606 y(tag.)36 b(Use)27 b(the)h +-Fr(--from)e Fx(or)g Fr(--last)f Fx(options)j(to)f(searc)n(h)f(more)h +-(or)g(few)n(er)g(patc)n(hes.)291 4844 y Fk(6.9.5)112 +-b(darcs)38 b(rev)m(ert)291 4998 y Fr(Usage:)j(darcs)g(revert)g +-([OPTION]...)e([FILE)j(or)h(DIRECTORY]...)p eop end ++527 4869 V 527 4944 a Fr(--matches,)39 b(--patches,)h(--tags,)g ++(--no-deps)p 527 4998 V eop end + %%Page: 94 94 + TeXDict begin 94 93 bop 739 282 a Fx(94)1378 b Fu(CHAPTER)27 +-b(6.)64 b(D)n(AR)n(CS)28 b(COMMANDS)863 515 y Fx(Options:)913 +-627 y Fr(-a)99 b(--all)708 b Fx(answ)n(er)26 b(y)n(es)h(to)g(all)h +-(patc)n(hes)913 727 y Fr(-i)99 b(--interactive)356 b +-Fx(prompt)27 b(user)g(in)n(teractiv)n(ely)1100 856 y +-Fr(--repodir)40 b(DIRECTORY)2028 814 y Fx(sp)r(ecify)28 +-b(the)g(rep)r(ository)e(directory)g(in)i(whic)n(h)f(to)2028 +-914 y(run)863 997 y(Adv)-5 b(anced)28 b(options:)1013 +-1109 y Fr(--ignore-times)1723 1117 y Fx(don't)f(trust)h(the)g(\014le)g +-(mo)r(di\014cation)f(times)1013 1209 y Fr(--umask)41 +-b(UMASK)141 b Fx(sp)r(ecify)28 b(umask)f(to)g(use)h(when)f(writing)863 +-1322 y(Rev)n(ert)32 b(is)g(used)g(to)g(undo)g(c)n(hanges)f(made)h(to)g +-(the)g(w)n(orking)f(cop)n(y)g(whic)n(h)h(ha)n(v)n(e)f(not)739 +-1422 y(y)n(et)e(b)r(een)g(recorded.)39 b(Y)-7 b(ou)29 +-b(will)g(b)r(e)g(prompted)g(for)f(whic)n(h)h(c)n(hanges)f(y)n(ou)g +-(wish)g(to)h(undo.)739 1521 y(The)22 b(last)h(rev)n(ert)e(can)h(b)r(e)h +-(undone)f(safely)g(using)g(the)h(unrev)n(ert)e(command)h(if)h(the)g(w)n +-(orking)739 1621 y(cop)n(y)e(w)n(as)g(not)h(mo)r(di\014ed)h(in)f(the)g +-(mean)n(time.)35 b(The)23 b(actions)e(of)h(a)f(rev)n(ert)g(ma)n(y)h(b)r +-(e)g(rev)n(ersed)739 1721 y(using)33 b(the)i(unrev)n(ert)d(command)i +-(\(see)f(subsection)h(6.9.6\).)54 b(Ho)n(w)n(ev)n(er,)34 +-b(if)g(y)n(ou'v)n(e)e(made)739 1820 y(c)n(hanges)26 b(since)h(the)h ++b(6.)64 b(D)n(AR)n(CS)28 b(COMMANDS)863 515 y Fx(The)d ++Fr(--patches)p Fx(,)c Fr(--matches)p Fx(,)h Fr(--tags)p ++Fx(,)g(and)j Fr(--no-deps)20 b Fx(options)k(can)g(b)r(e)h(used)f(to)739 ++615 y(select)j(whic)n(h)h(patc)n(hes)f(to)g(obliterate,)g(as)g(describ) ++r(ed)h(in)f(subsection)h(6.1.)863 723 y(With)22 b(these)f(options)f(y)n ++(ou)g(can)g(sp)r(ecify)h(what)f(patc)n(h)h(or)f(patc)n(hes)g(to)g(b)r ++(e)h(prompted)g(for)739 823 y(b)n(y)h(obliterate.)35 ++b(This)23 b(is)g(esp)r(ecially)f(useful)h(when)g(y)n(ou)f(w)n(an)n(t)h ++(to)f(obliterate)g(patc)n(hes)h(with)739 922 y(dep)r(endencies,)30 ++b(since)g(all)f(the)h(dep)r(enden)n(t)h(patc)n(hes)e(\(but)h(no)g ++(others\))f(will)h(b)r(e)g(included)739 1022 y(in)c(the)h(c)n(hoices.) ++35 b(Or)25 b(if)i(y)n(ou)e(use)h Fr(--no-deps)c Fx(y)n(ou)j(w)n(on't)h ++(b)r(e)h(ask)n(ed)e(ab)r(out)h(patc)n(hes)f(that)739 ++1122 y(can't)i(b)r(e)h(obliterated)f(due)h(to)g(dep)r(ending)g(patc)n ++(hes.)863 1230 y(Selecting)e(patc)n(hes)f(can)g(b)r(e)h(slo)n(w,)f(so)g ++(darcs)f(cuts)i(the)g(searc)n(h)e(at)h(the)h(last)f(optimized)739 ++1330 y(tag.)36 b(Use)28 b(the)g Fr(--from)d Fx(or)i Fr(--last)e ++Fx(options)i(to)g(searc)n(h)f(more)h(or)g(few)n(er)g(patc)n(hes.)739 ++1608 y Fk(6.9.5)112 b(darcs)38 b(rev)m(ert)739 1777 y ++Fr(Usage:)j(darcs)h(revert)f([OPTION]...)e([FILE)i(or)i(DIRECTORY]...) ++863 1886 y Fx(Options:)913 1989 y Fr(-a)99 b(--all)708 ++b Fx(answ)n(er)26 b(y)n(es)h(to)g(all)h(patc)n(hes)913 ++2088 y Fr(-i)99 b(--interactive)356 b Fx(prompt)27 b(user)g(in)n ++(teractiv)n(ely)1100 2217 y Fr(--repodir)40 b(DIRECTORY)2028 ++2176 y Fx(sp)r(ecify)28 b(the)g(rep)r(ository)e(directory)g(in)i(whic)n ++(h)f(to)2028 2275 y(run)863 2350 y(Adv)-5 b(anced)28 ++b(options:)1013 2453 y Fr(--ignore-times)1723 2461 y ++Fx(don't)f(trust)h(the)g(\014le)g(mo)r(di\014cation)f(times)1013 ++2552 y Fr(--umask)41 b(UMASK)141 b Fx(sp)r(ecify)28 b(umask)f(to)g(use) ++h(when)f(writing)863 2657 y(Rev)n(ert)32 b(is)g(used)g(to)g(undo)g(c)n ++(hanges)f(made)h(to)g(the)g(w)n(orking)f(cop)n(y)g(whic)n(h)h(ha)n(v)n ++(e)f(not)739 2757 y(y)n(et)e(b)r(een)g(recorded.)39 b(Y)-7 ++b(ou)29 b(will)g(b)r(e)g(prompted)g(for)f(whic)n(h)h(c)n(hanges)f(y)n ++(ou)g(wish)g(to)h(undo.)739 2856 y(The)22 b(last)h(rev)n(ert)e(can)h(b) ++r(e)h(undone)f(safely)g(using)g(the)h(unrev)n(ert)e(command)h(if)h(the) ++g(w)n(orking)739 2956 y(cop)n(y)e(w)n(as)g(not)h(mo)r(di\014ed)h(in)f ++(the)g(mean)n(time.)35 b(The)23 b(actions)e(of)h(a)f(rev)n(ert)g(ma)n ++(y)h(b)r(e)g(rev)n(ersed)739 3055 y(using)33 b(the)i(unrev)n(ert)d ++(command)i(\(see)f(subsection)h(6.9.6\).)54 b(Ho)n(w)n(ev)n(er,)34 ++b(if)g(y)n(ou'v)n(e)e(made)739 3155 y(c)n(hanges)26 b(since)h(the)h + (rev)n(ert)f(y)n(our)f(mileage)h(ma)n(y)g(v)-5 b(ary)e(,)27 +-b(so)g(please)g(b)r(e)h(careful.)863 1937 y(Y)-7 b(ou)26 ++b(so)g(please)g(b)r(e)h(careful.)863 3263 y(Y)-7 b(ou)26 + b(can)f(giv)n(e)f(rev)n(ert)g(optional)h(argumen)n(ts)f(indicating)h + (\014les)g(or)g(directories.)34 b(If)26 b(y)n(ou)739 +-2037 y(do)h(so)f(it)i(will)f(only)g(prompt)g(y)n(ou)f(to)h(rev)n(ert)f ++3363 y(do)h(so)f(it)i(will)f(only)g(prompt)g(y)n(ou)f(to)h(rev)n(ert)f + (c)n(hanges)f(in)j(those)f(\014les)g(or)f(in)h(\014les)g(in)h(those)739 +-2137 y(directories.)739 2462 y Fk(6.9.6)112 b(darcs)38 +-b(unrev)m(ert)739 2648 y Fr(Usage:)j(darcs)h(unrevert)e([OPTION]...)863 +-2765 y Fx(Options:)1100 2877 y Fr(--ignore-times)2028 +-2885 y Fx(don't)28 b(trust)f(the)h(\014le)g(mo)r(di\014cation)f(times) +-913 2976 y Fr(-a)99 b(--all)708 b Fx(answ)n(er)26 b(y)n(es)h(to)g(all)h +-(patc)n(hes)913 3076 y Fr(-i)99 b(--interactive)356 b +-Fx(prompt)27 b(user)g(in)n(teractiv)n(ely)1100 3205 y +-Fr(--repodir)40 b(DIRECTORY)2028 3164 y Fx(sp)r(ecify)28 ++3463 y(directories.)739 3741 y Fk(6.9.6)112 b(darcs)38 ++b(unrev)m(ert)739 3910 y Fr(Usage:)j(darcs)h(unrevert)e([OPTION]...)863 ++4019 y Fx(Options:)1100 4122 y Fr(--ignore-times)2028 ++4130 y Fx(don't)28 b(trust)f(the)h(\014le)g(mo)r(di\014cation)f(times) ++913 4221 y Fr(-a)99 b(--all)708 b Fx(answ)n(er)26 b(y)n(es)h(to)g(all)h ++(patc)n(hes)913 4321 y Fr(-i)99 b(--interactive)356 b ++Fx(prompt)27 b(user)g(in)n(teractiv)n(ely)1100 4450 y ++Fr(--repodir)40 b(DIRECTORY)2028 4408 y Fx(sp)r(ecify)28 + b(the)g(rep)r(ository)e(directory)g(in)i(whic)n(h)f(to)2028 +-3263 y(run)863 3347 y(Adv)-5 b(anced)28 b(options:)1013 +-3463 y Fr(--umask)41 b(UMASK)97 b Fx(sp)r(ecify)28 b(umask)f(to)h(use)f +-(when)h(writing)863 3581 y(Unrev)n(ert)i(is)g(used)g(to)g(undo)g(the)h ++4508 y(run)863 4583 y(Adv)-5 b(anced)28 b(options:)1013 ++4690 y Fr(--umask)41 b(UMASK)97 b Fx(sp)r(ecify)28 b(umask)f(to)h(use)f ++(when)h(writing)863 4799 y(Unrev)n(ert)i(is)g(used)g(to)g(undo)g(the)h + (results)f(of)g(a)g(rev)n(ert)f(command.)44 b(It)31 b(is)f(only)g +-(guar-)739 3681 y(an)n(teed)g(to)g(w)n(ork)e(prop)r(erly)h(if)i(y)n(ou) ++(guar-)739 4899 y(an)n(teed)g(to)g(w)n(ork)e(prop)r(erly)h(if)i(y)n(ou) + e(ha)n(v)n(en't)g(made)h(an)n(y)g(c)n(hanges)e(since)i(the)g(rev)n(ert) +-f(w)n(as)739 3780 y(p)r(erformed.)863 3897 y(The)21 b(command)f(mak)n +-(es)g(a)g(b)r(est)h(e\013ort)g(to)f(merge)g(the)h(unrev)n(ersion)e +-(with)i(an)n(y)f(c)n(hanges)739 3997 y(y)n(ou)36 b(ha)n(v)n(e)g(since)h +-(made.)66 b(In)37 b(fact,)j(unrev)n(ert)c(should)h(ev)n(en)f(w)n(ork)g +-(if)i(y)n(ou'v)n(e)e(recorded)739 4097 y(c)n(hanges)26 +-b(since)h(rev)n(erting.)739 4464 y Fq(6.10)135 b(Adv)-7 +-b(anced)44 b(examination)j(of)e(the)g(rep)t(ository)739 +-4695 y Fk(6.10.1)112 b(darcs)38 b(di\013)739 4881 y Fr(Usage:)j(darcs)h +-(diff)f([OPTION]...)e([FILE)j(or)h(DIRECTORY]...)863 +-4998 y Fx(Options:)p eop end ++f(w)n(as)739 4998 y(p)r(erformed.)p eop end + %%Page: 95 95 + TeXDict begin 95 94 bop 291 282 a Fu(6.10.)63 b(AD)n(V)-9 + b(ANCED)28 b(EXAMINA)-7 b(TION)29 b(OF)e(THE)g(REPOSITOR)-7 +-b(Y)479 b Fx(95)652 532 y Fr(--to-match)39 b(PATTERN)1710 +-490 y Fx(select)28 b(c)n(hanges)e(up)i(to)f(a)g(patc)n(h)h(matc)n(hing) +-1710 590 y(P)-7 b(A)g(TTERN)652 689 y Fr(--to-patch)39 +-b(REGEXP)1710 647 y Fx(select)28 b(c)n(hanges)e(up)i(to)f(a)g(patc)n(h) +-h(matc)n(hing)1710 747 y(REGEXP)652 846 y Fr(--to-tag)40 +-b(REGEXP)1710 804 y Fx(select)28 b(c)n(hanges)e(up)i(to)f(a)g(tag)g +-(matc)n(hing)1710 904 y(REGEXP)652 1012 y Fr(--from-match)38 +-b(PATTERN)1710 962 y Fx(select)28 b(c)n(hanges)e(starting)h(with)h(a)f +-(patc)n(h)1710 1061 y(matc)n(hing)g(P)-7 b(A)g(TTERN)652 +-1185 y Fr(--from-patch)38 b(REGEXP)1710 1135 y Fx(select)28 +-b(c)n(hanges)e(starting)h(with)h(a)f(patc)n(h)1710 1235 +-y(matc)n(hing)g(REGEXP)652 1350 y Fr(--from-tag)39 b(REGEXP)1710 +-1309 y Fx(select)28 b(c)n(hanges)e(starting)h(with)h(a)f(tag)g(matc)n +-(hing)1710 1408 y(REGEXP)652 1478 y Fr(--match)40 b(PATTERN)402 +-b Fx(select)28 b(a)f(single)g(patc)n(h)g(matc)n(hing)g(P)-7 +-b(A)g(TTERN)465 1578 y Fr(-p)99 b(--patch)40 b(REGEXP)446 +-b Fx(select)28 b(a)f(single)g(patc)n(h)g(matc)n(hing)g(REGEXP)652 +-1677 y Fr(--last)41 b(NUMBER)489 b Fx(select)28 b(the)g(last)f(NUMBER)h +-(patc)n(hes)652 1777 y Fr(--diff-command)38 b(COMMAND)96 +-b Fx(sp)r(ecify)28 b(di\013)g(command)g(\(ignores)e({di\013-opts\))652 +-1876 y Fr(--diff-opts)39 b(OPTIONS)227 b Fx(options)27 +-b(to)h(pass)f(to)g(di\013)465 1976 y Fr(-u)99 b(--unified)662 +-b Fx(pass)27 b(-u)h(option)f(to)g(di\013)652 2105 y Fr(--repodir)40 +-b(DIRECTORY)1710 2064 y Fx(sp)r(ecify)28 b(the)g(rep)r(ository)e +-(directory)g(in)i(whic)n(h)g(to)1710 2163 y(run)652 2263 +-y Fr(--store-in-memor)o(y)1710 2221 y Fx(do)g(patc)n(h)f(application)g +-(in)h(memory)e(rather)h(than)1710 2321 y(on)h(disk)415 +-2387 y(Di\013)38 b(can)f(b)r(e)h(used)f(to)g(create)f(a)h(di\013)h(b)r ++b(Y)479 b Fx(95)415 515 y(The)21 b(command)f(mak)n(es)g(a)g(b)r(est)h ++(e\013ort)f(to)h(merge)f(the)h(unrev)n(ersion)d(with)j(an)n(y)f(c)n ++(hanges)291 615 y(y)n(ou)36 b(ha)n(v)n(e)g(since)h(made.)65 ++b(In)38 b(fact,)h(unrev)n(ert)d(should)h(ev)n(en)g(w)n(ork)f(if)h(y)n ++(ou'v)n(e)f(recorded)291 715 y(c)n(hanges)26 b(since)h(rev)n(erting.) ++291 1000 y Fq(6.10)135 b(Adv)-7 b(anced)44 b(examination)i(of)g(the)f ++(rep)t(ository)291 1202 y Fk(6.10.1)112 b(darcs)38 b(di\013)291 ++1359 y Fr(Usage:)j(darcs)g(diff)h([OPTION]...)d([FILE)j(or)g ++(DIRECTORY]...)415 1461 y Fx(Options:)652 1587 y Fr(--to-match)d ++(PATTERN)1710 1545 y Fx(select)28 b(c)n(hanges)e(up)i(to)f(a)g(patc)n ++(h)h(matc)n(hing)1710 1645 y(P)-7 b(A)g(TTERN)652 1744 ++y Fr(--to-patch)39 b(REGEXP)1710 1702 y Fx(select)28 ++b(c)n(hanges)e(up)i(to)f(a)g(patc)n(h)h(matc)n(hing)1710 ++1802 y(REGEXP)652 1901 y Fr(--to-tag)40 b(REGEXP)1710 ++1859 y Fx(select)28 b(c)n(hanges)e(up)i(to)f(a)g(tag)g(matc)n(hing)1710 ++1959 y(REGEXP)652 2067 y Fr(--from-match)38 b(PATTERN)1710 ++2017 y Fx(select)28 b(c)n(hanges)e(starting)h(with)h(a)f(patc)n(h)1710 ++2116 y(matc)n(hing)g(P)-7 b(A)g(TTERN)652 2240 y Fr(--from-patch)38 ++b(REGEXP)1710 2190 y Fx(select)28 b(c)n(hanges)e(starting)h(with)h(a)f ++(patc)n(h)1710 2290 y(matc)n(hing)g(REGEXP)652 2405 y ++Fr(--from-tag)39 b(REGEXP)1710 2364 y Fx(select)28 b(c)n(hanges)e ++(starting)h(with)h(a)f(tag)g(matc)n(hing)1710 2463 y(REGEXP)652 ++2533 y Fr(--match)40 b(PATTERN)402 b Fx(select)28 b(a)f(single)g(patc)n ++(h)g(matc)n(hing)g(P)-7 b(A)g(TTERN)465 2633 y Fr(-p)99 ++b(--patch)40 b(REGEXP)446 b Fx(select)28 b(a)f(single)g(patc)n(h)g ++(matc)n(hing)g(REGEXP)652 2732 y Fr(--last)41 b(NUMBER)489 ++b Fx(select)28 b(the)g(last)f(NUMBER)h(patc)n(hes)652 ++2832 y Fr(--diff-command)38 b(COMMAND)96 b Fx(sp)r(ecify)28 ++b(di\013)g(command)g(\(ignores)e({di\013-opts\))652 2931 ++y Fr(--diff-opts)39 b(OPTIONS)227 b Fx(options)27 b(to)h(pass)f(to)g ++(di\013)465 3031 y Fr(-u)99 b(--unified)662 b Fx(pass)27 ++b(-u)h(option)f(to)g(di\013)652 3160 y Fr(--repodir)40 ++b(DIRECTORY)1710 3119 y Fx(sp)r(ecify)28 b(the)g(rep)r(ository)e ++(directory)g(in)i(whic)n(h)g(to)1710 3218 y(run)652 3318 ++y Fr(--store-in-memor)o(y)1710 3276 y Fx(do)g(patc)n(h)f(application)g ++(in)h(memory)e(rather)h(than)1710 3376 y(on)h(disk)415 ++3444 y(Di\013)38 b(can)f(b)r(e)h(used)f(to)g(create)f(a)h(di\013)h(b)r + (et)n(w)n(een)f(t)n(w)n(o)g(v)n(ersions)e(whic)n(h)i(are)g(in)g(y)n +-(our)291 2486 y(rep)r(ository)-7 b(.)35 b(Sp)r(ecifying)26 ++(our)291 3543 y(rep)r(ository)-7 b(.)35 b(Sp)r(ecifying)26 + b(just)h({from-patc)n(h)e(will)i(get)f(y)n(ou)g(a)g(di\013)h(against)e +-(y)n(our)h(w)n(orking)291 2586 y(cop)n(y)-7 b(.)34 b(If)24 ++(y)n(our)h(w)n(orking)291 3643 y(cop)n(y)-7 b(.)34 b(If)24 + b(y)n(ou)f(giv)n(e)g(di\013)h(no)f(v)n(ersion)f(argumen)n(ts,)h(it)h + (giv)n(es)e(y)n(ou)h(the)h(same)f(information)g(as)291 +-2685 y(whatsnew)k(except)g(that)h(the)g(patc)n(h)g(is)f(formatted)g(as) +-g(the)h(output)h(of)e(a)g(di\013)i(command)p 527 2862 +-2392 4 v 527 2936 a Fr(--diff-opts)p 527 2991 V 415 3168 ++3742 y(whatsnew)k(except)g(that)h(the)g(patc)n(h)g(is)f(formatted)g(as) ++g(the)h(output)h(of)e(a)g(di\013)i(command)p 527 3933 ++2392 4 v 527 4008 a Fr(--diff-opts)p 527 4063 V 415 4254 + a Fx(Di\013)d(calls)e(an)h(external)f(\\di\013)6 b(")26 + b(command)e(to)h(do)g(the)g(actual)g(w)n(ork,)f(and)h(passes)f(an)n(y) +-291 3267 y(unrecognized)i(\015ags)h(to)g(this)h(di\013)g(command.)37 +-b(Th)n(us)27 b(y)n(ou)g(can)g(call)291 3428 y Fr(\045)43 ++291 4353 y(unrecognized)i(\015ags)h(to)g(this)h(di\013)g(command.)37 ++b(Th)n(us)27 b(y)n(ou)g(can)g(call)291 4527 y Fr(\045)43 + b(darcs)e(diff)h(-t)h(0.9.8)e(-t)i(0.9.10)e(--)i(-u)291 +-3589 y Fx(to)22 b(get)g(a)g(di\013)h(in)f(the)h(uni\014ed)g(format.)34 ++4700 y Fx(to)22 b(get)g(a)g(di\013)h(in)f(the)h(uni\014ed)g(format.)34 + b(Actually)-7 b(,)24 b(thanks)e(to)g(the)h(w)n(onders)d(of)j(getopt)f +-(y)n(ou)291 3689 y(need)28 b(the)h(\\)p Fr(--)p Fx(")e(sho)n(wn)h(ab)r ++(y)n(ou)291 4799 y(need)28 b(the)h(\\)p Fr(--)p Fx(")e(sho)n(wn)h(ab)r + (o)n(v)n(e)g(b)r(efore)g(an)n(y)g(argumen)n(ts)f(to)i(di\013.)41 +-b(Y)-7 b(ou)29 b(can)f(also)g(sp)r(ecify)291 3788 y(additional)f ++b(Y)-7 b(ou)29 b(can)f(also)g(sp)r(ecify)291 4899 y(additional)f + (argumen)n(ts)g(to)h(di\013)h(using)f(the)h Fr(--diff-opts)24 + b Fx(\015ag.)38 b(The)28 b(ab)r(o)n(v)n(e)f(command)291 +-3888 y(w)n(ould)g(lo)r(ok)g(lik)n(e)g(this:)291 4049 +-y Fr(\045)43 b(darcs)e(diff)h(--diff-opts)d(-u)k(-t)g(0.9.8)e(-t)i +-(0.9.10)291 4210 y Fx(This)30 b(ma)n(y)f(not)h(seem)g(lik)n(e)g(an)f +-(impro)n(v)n(emen)n(t,)h(but)g(it)h(really)e(pa)n(ys)g(o\013)h(when)g +-(y)n(ou)g(w)n(an)n(t)291 4310 y(to)d(alw)n(a)n(ys)f(giv)n(e)g(di\013)j +-(the)f(same)f(options.)36 b(Y)-7 b(ou)28 b(can)f(do)g(this)h(b)n(y)f +-(adding)291 4470 y Fr(\045)43 b(diff)f(diff-opts)e(-udp)291 +-4631 y Fx(to)27 b(y)n(our)f Fr(_darcs/prefs/defa)o(ult)o(s)21 +-b Fx(\014le.)415 4731 y(If)30 b(y)n(ou)e(w)n(an)n(t)g(to)h(view)g(only) +-g(the)g(di\013erences)g(to)g(one)f(or)g(more)h(\014les,)g(y)n(ou)f(can) +-h(do)g(so)291 4831 y(with)f(a)f(command)g(suc)n(h)g(as)291 +-4992 y Fr(\045)43 b(darcs)e(diff)h(foo.c)g(bar.c)f(baz/)p +-eop end ++4998 y(w)n(ould)g(lo)r(ok)g(lik)n(e)g(this:)p eop end + %%Page: 96 96 + TeXDict begin 96 95 bop 739 282 a Fx(96)1378 b Fu(CHAPTER)27 +-b(6.)64 b(D)n(AR)n(CS)28 b(COMMANDS)p 975 515 2392 4 +-v 975 590 a Fr(--diff-command)p 975 627 V 863 811 a Fx(Y)-7 +-b(ou)36 b(can)g(use)g(a)f(di\013eren)n(t)h(program)e(to)i(view)f +-(di\013erences)h(b)n(y)g(including)g(the)g(\015ag)739 +-910 y Fr(--diff-command)p Fx(,)22 b(e.g.)739 1077 y Fr(--diff-command) +-38 b('opendiff)i(\0451)i(\0452'.)739 1245 y Fx(The)35 +-b Fr(\0451)f Fx(and)h Fr(\0452)f Fx(are)g(replaced)g(with)h(the)g(t)n +-(w)n(o)g(v)n(ersions)e(to)h(b)r(e)i(merged.)58 b(The)35 +-b(ab)r(o)n(v)n(e)739 1344 y(example)27 b(w)n(orks)f(with)j(the)f +-(FileMerge.app)e(to)r(ol)i(that)g(comes)f(with)h(Apple's)g(dev)n(elop)r +-(er)739 1444 y(to)r(ols.)36 b(T)-7 b(o)28 b(use)f(xxdi\013,)h(y)n(ou)f +-(w)n(ould)g(use)739 1611 y Fr(--diff-command)38 b('xxdiff)i(\0451)j +-(\0452')739 1778 y Fx(T)-7 b(o)27 b(use)h Fr(kdiff3)p +-Fx(,)d(y)n(ou)i(can)g(use)739 1946 y Fr(--diff-command)38 +-b('kdiff3)i(\0451)j(\0452')863 2113 y Fx(Note)25 b(that)g(the)h +-(command)e(is)h(split)g(in)n(to)f(space-separated)f(w)n(ords)g(and)i +-(the)g(\014rst)g(one)739 2212 y(is)38 b Fr(exec)p Fx(ed)e(with)i(the)h +-(rest)e(as)g(argumen)n(ts|it)g(is)h(not)g(a)f(shell)h(command.)67 +-b(Also)38 b(the)739 2312 y(substitution)31 b(of)f(the)h +-Fr(\045)f Fx(escap)r(es)g(is)g(only)g(done)g(on)h(complete)f(w)n(ords.) +-44 b(See)30 b(6.1)g(for)g(ho)n(w)739 2411 y(y)n(ou)d(migh)n(t)g(w)n +-(ork)f(around)h(this)h(fact,)g(for)f(example,)g(with)h(Emacs')f +-(Edi\013)g(pac)n(k)-5 b(age.)863 2511 y(Note)28 b(also)f(that)g(the)h ++b(6.)64 b(D)n(AR)n(CS)28 b(COMMANDS)739 515 y Fr(\045)43 ++b(darcs)f(diff)g(--diff-opts)d(-u)j(-t)h(0.9.8)f(-t)g(0.9.10)739 ++663 y Fx(This)30 b(ma)n(y)f(not)h(seem)g(lik)n(e)g(an)g(impro)n(v)n ++(emen)n(t,)f(but)i(it)f(really)f(pa)n(ys)g(o\013)h(when)h(y)n(ou)e(w)n ++(an)n(t)739 763 y(to)e(alw)n(a)n(ys)f(giv)n(e)h(di\013)h(the)g(same)f ++(options.)36 b(Y)-7 b(ou)28 b(can)f(do)g(this)h(b)n(y)g(adding)739 ++911 y Fr(\045)43 b(diff)f(diff-opts)e(-udp)739 1059 y ++Fx(to)27 b(y)n(our)g Fr(_darcs/prefs/de)o(fau)o(lt)o(s)22 ++b Fx(\014le.)863 1158 y(If)30 b(y)n(ou)e(w)n(an)n(t)h(to)f(view)h(only) ++g(the)g(di\013erences)g(to)g(one)g(or)f(more)g(\014les,)h(y)n(ou)g(can) ++f(do)h(so)739 1258 y(with)f(a)f(command)g(suc)n(h)h(as)739 ++1406 y Fr(\045)43 b(darcs)f(diff)g(foo.c)f(bar.c)h(baz/)p ++975 1566 2392 4 v 975 1641 a(--diff-command)p 975 1677 ++V 863 1837 a Fx(Y)-7 b(ou)36 b(can)g(use)g(a)f(di\013eren)n(t)h ++(program)e(to)i(view)f(di\013erences)h(b)n(y)g(including)g(the)g ++(\015ag)739 1937 y Fr(--diff-command)p Fx(,)22 b(e.g.)739 ++2085 y Fr(--diff-command)38 b('opendiff)i(\0451)i(\0452'.)739 ++2233 y Fx(The)35 b Fr(\0451)f Fx(and)h Fr(\0452)f Fx(are)g(replaced)g ++(with)h(the)g(t)n(w)n(o)g(v)n(ersions)e(to)h(b)r(e)i(merged.)58 ++b(The)35 b(ab)r(o)n(v)n(e)739 2333 y(example)27 b(w)n(orks)f(with)j ++(the)f(FileMerge.app)e(to)r(ol)i(that)g(comes)f(with)h(Apple's)g(dev)n ++(elop)r(er)739 2432 y(to)r(ols.)36 b(T)-7 b(o)28 b(use)f(xxdi\013,)h(y) ++n(ou)f(w)n(ould)g(use)739 2580 y Fr(--diff-command)38 ++b('xxdiff)i(\0451)j(\0452')739 2728 y Fx(T)-7 b(o)27 ++b(use)h Fr(kdiff3)p Fx(,)d(y)n(ou)i(can)g(use)739 2876 ++y Fr(--diff-command)38 b('kdiff3)i(\0451)j(\0452')863 ++3024 y Fx(Note)25 b(that)g(the)h(command)e(is)h(split)g(in)n(to)f ++(space-separated)f(w)n(ords)g(and)i(the)g(\014rst)g(one)739 ++3124 y(is)38 b Fr(exec)p Fx(ed)e(with)i(the)h(rest)e(as)g(argumen)n ++(ts|it)g(is)h(not)g(a)f(shell)h(command.)67 b(Also)38 ++b(the)739 3223 y(substitution)31 b(of)f(the)h Fr(\045)f ++Fx(escap)r(es)g(is)g(only)g(done)g(on)h(complete)f(w)n(ords.)44 ++b(See)30 b(6.1)g(for)g(ho)n(w)739 3323 y(y)n(ou)d(migh)n(t)g(w)n(ork)f ++(around)h(this)h(fact,)g(for)f(example,)g(with)h(Emacs')f(Edi\013)g ++(pac)n(k)-5 b(age.)863 3423 y(Note)28 b(also)f(that)g(the)h + Fr(--diff-opts)c Fx(\015ag)i(is)i(ignored)e(if)i(y)n(ou)f(use)h(this)g +-(option.)739 2746 y Fk(6.10.2)112 b(darcs)38 b(annotate)739 +-2899 y Fr(Usage:)j(darcs)h(annotate)e([OPTION]...)f([FILE)i(or)i +-(DIRECTORY]...)863 2999 y Fx(Options:)913 3094 y Fr(-s)99 +-b(--summary)532 b Fx(summarize)27 b(c)n(hanges)1100 3193 ++(option.)739 3651 y Fk(6.10.2)112 b(darcs)38 b(annotate)739 ++3804 y Fr(Usage:)j(darcs)h(annotate)e([OPTION]...)f([FILE)i(or)i ++(DIRECTORY]...)863 3904 y Fx(Options:)913 3998 y Fr(-s)99 ++b(--summary)532 b Fx(summarize)27 b(c)n(hanges)1100 4098 + y Fr(--no-summary)400 b Fx(don't)28 b(summarize)e(c)n(hanges)913 +-3323 y Fr(-u)99 b(--unified)2028 3281 y Fx(output)28 ++4227 y Fr(-u)99 b(--unified)2028 4185 y Fx(output)28 + b(patc)n(h)f(in)h(a)f(darcs-sp)r(eci\014c)f(format)2028 +-3381 y(similar)h(to)g(di\013)h(-u)1100 3450 y Fr(--human-readable)224 +-b Fx(giv)n(e)26 b(h)n(uman-readable)g(output)1100 3550 ++4285 y(similar)h(to)g(di\013)h(-u)1100 4355 y Fr(--human-readable)224 ++b Fx(giv)n(e)26 b(h)n(uman-readable)g(output)1100 4454 + y Fr(--xml-output)400 b Fx(generate)26 b(XML)i(formatted)f(output)1100 +-3650 y Fr(--match)41 b(PATTERN)271 b Fx(select)27 b(a)g(single)h(patc)n +-(h)f(matc)n(hing)g(P)-7 b(A)g(TTERN)913 3749 y Fr(-p)99 ++4554 y Fr(--match)41 b(PATTERN)271 b Fx(select)27 b(a)g(single)h(patc)n ++(h)f(matc)n(hing)g(P)-7 b(A)g(TTERN)913 4654 y Fr(-p)99 + b(--patch)41 b(REGEXP)315 b Fx(select)27 b(a)g(single)h(patc)n(h)f +-(matc)n(hing)g(REGEXP)913 3849 y Fr(-t)99 b(--tag)42 ++(matc)n(hing)g(REGEXP)913 4753 y Fr(-t)99 b(--tag)42 + b(REGEXP)402 b Fx(select)27 b(tag)g(matc)n(hing)g(REGEXP)1100 +-3949 y Fr(--creator-hash)38 b(HASH)98 b Fx(sp)r(ecify)28 ++4853 y Fr(--creator-hash)38 b(HASH)98 b Fx(sp)r(ecify)28 + b(hash)f(of)g(creator)f(patc)n(h)i(\(see)f(do)r(cs\))1100 +-4078 y Fr(--repodir)40 b(DIRECTORY)2028 4036 y Fx(sp)r(ecify)28 ++4982 y Fr(--repodir)40 b(DIRECTORY)2028 4940 y Fx(sp)r(ecify)28 + b(the)g(rep)r(ository)e(directory)g(in)i(whic)n(h)f(to)2028 +-4136 y(run)863 4202 y(Displa)n(y)43 b(whic)n(h)h(patc)n(h)f(last)g(mo)r +-(di\014ed)h(something.)83 b(Annotate)44 b(displa)n(ys)e(whic)n(h)739 +-4302 y(patc)n(hes)c(created)g(or)g(last)g(mo)r(di\014ed)i(a)e +-(directory)f(\014le)i(or)f(line.)71 b(It)39 b(can)f(also)g(displa)n(y) +-739 4401 y(the)28 b(con)n(ten)n(ts)f(of)g(a)h(particular)e(patc)n(h)h +-(in)h(darcs)e(format.)p 975 4585 V 975 4660 a Fr(--human-readable)o(,) +-38 b(--summary,)h(--unified,)h(--xml--output)p 975 4715 +-V 863 4899 a Fx(When)33 b(called)f(with)h(just)g(a)f(patc)n(h)g(name,)i +-(annotate)d(outputs)i(the)g(patc)n(h)f(in)g(darcs)739 +-4998 y(format,)27 b(whic)n(h)h(is)f(the)h(same)f(as)g +-Fr(--human-readable)o Fx(.)p eop end ++5040 y(run)p eop end + %%Page: 97 97 + TeXDict begin 97 96 bop 291 282 a Fu(6.10.)63 b(AD)n(V)-9 + b(ANCED)28 b(EXAMINA)-7 b(TION)29 b(OF)e(THE)g(REPOSITOR)-7 +-b(Y)479 b Fx(97)415 515 y Fr(--xml-output)23 b Fx(is)k(the)h +-(alternativ)n(e)f(to)g Fr(--human-readable)o Fx(.)415 +-621 y Fr(--summary)15 b Fx(can)j(b)r(e)h(used)f(with)h(either)f(the)h +-Fr(--xml-output)13 b Fx(or)18 b(the)h Fr(--human-readabl)o(e)291 +-721 y Fx(options)k(to)g(alter)g(the)h(results.)35 b(It)24 +-b(is)g(do)r(cumen)n(ted)f(fully)i(in)e(the)h(`common)g(options')f(p)r +-(or-)291 821 y(tion)k(of)h(the)g(man)n(ual.)415 927 y(Giving)h(the)g +-Fr(--unified)d Fx(\015ag)i(implies)h Fr(--human-readable)p +-Fx(,)23 b(and)29 b(causes)f(the)h(out-)291 1026 y(put)37 +-b(to)g(remain)g(in)g(a)g(darcs-sp)r(eci\014c)f(format)g(that)i(is)f +-(similar)f(to)h(that)g(pro)r(duced)g(b)n(y)291 1126 y +-Fr(diff)42 b(--unified)p Fx(.)415 1232 y(If)20 b(a)f(directory)f(name)h +-(is)g(giv)n(en,)h(annotate)f(will)h(output)g(details)f(of)g(the)h(last) +-f(mo)r(difying)291 1332 y(patc)n(h)24 b(for)h(eac)n(h)f(\014le)h(in)g +-(the)h(directory)e(and)g(the)i(directory)e(itself.)36 +-b(The)25 b(details)g(lo)r(ok)f(lik)n(e)291 1431 y(this:)334 +-1646 y Fr(#)43 b(Created)e(by)i([bounce)d(handling)h(patch)334 +-1746 y(#)i(mark**20040526202)o(21)o(6])81 b(as)43 b(./test/m7/bounc)o +-(e_h)o(an)o(dl)o(ing)o(.p)o(l)465 1846 y(bounce_handling.)o(pl)415 +-2054 y Fx(If)31 b(a)g(patc)n(h)f(name)h(and)g(a)f(directory)g(are)g +-(giv)n(en,)g(these)h(details)g(are)f(output)h(for)g(the)291 +-2154 y(time)c(after)g(that)h(patc)n(h)e(w)n(as)h(applied.)36 +-b(If)28 b(a)f(directory)f(and)h(a)f(tag)h(name)g(are)f(giv)n(en,)h(the) +-291 2253 y(details)g(of)g(the)h(patc)n(hes)f(in)n(v)n(olv)n(ed)g(in)g +-(the)h(sp)r(eci\014ed)g(tagged)f(v)n(ersion)f(will)i(b)r(e)g(output.) +-415 2359 y(If)33 b(a)f(\014le)h(name)g(is)f(giv)n(en,)h(the)g(last)g +-(mo)r(difying)g(patc)n(h)f(details)g(of)h(that)g(\014le)g(will)g(b)r(e) +-291 2459 y(output,)23 b(along)d(with)i(markup)f(indicating)h(patc)n(h)f +-(details)h(when)f(eac)n(h)g(line)h(w)n(as)f(last)g(\(and)291 +-2559 y(p)r(erhaps)27 b(next\))h(mo)r(di\014ed.)p 527 +-2767 2392 4 v 527 2842 a Fr(--creator-hash)38 b(HASH)p +-527 2878 V 415 3087 a Fx(The)27 b Fr(--creator-hash)21 +-b Fx(option)26 b(should)h(only)f(b)r(e)h(used)g(in)g(com)n(bination)f +-(with)h(a)g(\014le)291 3187 y(or)h(directory)f(to)i(b)r(e)g(annotated.) ++b(Y)479 b Fx(97)415 515 y(Displa)n(y)43 b(whic)n(h)g(patc)n(h)g(last)h ++(mo)r(di\014ed)f(something.)84 b(Annotate)44 b(displa)n(ys)e(whic)n(h) ++291 615 y(patc)n(hes)c(created)g(or)g(last)g(mo)r(di\014ed)h(a)g ++(directory)e(\014le)i(or)f(line.)71 b(It)39 b(can)f(also)g(displa)n(y) ++291 715 y(the)28 b(con)n(ten)n(ts)e(of)i(a)f(particular)g(patc)n(h)g ++(in)h(darcs)e(format.)p 527 916 2392 4 v 527 990 a Fr(--human-readable) ++o(,)37 b(--summary,)j(--unified,)f(--xml--output)p 527 ++1045 V 415 1246 a Fx(When)33 b(called)f(with)h(just)g(a)f(patc)n(h)g ++(name,)h(annotate)f(outputs)h(the)f(patc)n(h)g(in)h(darcs)291 ++1346 y(format,)27 b(whic)n(h)g(is)h(the)g(same)f(as)g ++Fr(--human-readabl)o(e)p Fx(.)415 1450 y Fr(--xml-output)c ++Fx(is)k(the)h(alternativ)n(e)f(to)g Fr(--human-readable)o ++Fx(.)415 1554 y Fr(--summary)15 b Fx(can)j(b)r(e)h(used)f(with)h ++(either)f(the)h Fr(--xml-output)13 b Fx(or)18 b(the)h ++Fr(--human-readabl)o(e)291 1654 y Fx(options)k(to)g(alter)g(the)h ++(results.)35 b(It)24 b(is)g(do)r(cumen)n(ted)f(fully)i(in)e(the)h ++(`common)g(options')f(p)r(or-)291 1754 y(tion)k(of)h(the)g(man)n(ual.) ++415 1858 y(Giving)h(the)g Fr(--unified)d Fx(\015ag)i(implies)h ++Fr(--human-readable)p Fx(,)23 b(and)29 b(causes)f(the)h(out-)291 ++1957 y(put)37 b(to)g(remain)g(in)g(a)g(darcs-sp)r(eci\014c)f(format)g ++(that)i(is)f(similar)f(to)h(that)g(pro)r(duced)g(b)n(y)291 ++2057 y Fr(diff)42 b(--unified)p Fx(.)415 2161 y(If)20 ++b(a)f(directory)f(name)h(is)g(giv)n(en,)h(annotate)f(will)h(output)g ++(details)f(of)g(the)h(last)f(mo)r(difying)291 2261 y(patc)n(h)24 ++b(for)h(eac)n(h)f(\014le)h(in)g(the)h(directory)e(and)g(the)i ++(directory)e(itself.)36 b(The)25 b(details)g(lo)r(ok)f(lik)n(e)291 ++2360 y(this:)334 2566 y Fr(#)43 b(Created)e(by)i([bounce)d(handling)h ++(patch)334 2666 y(#)i(mark**20040526202)o(21)o(6])81 ++b(as)43 b(./test/m7/bounc)o(e_h)o(an)o(dl)o(ing)o(.p)o(l)465 ++2765 y(bounce_handling.)o(pl)415 2966 y Fx(If)31 b(a)g(patc)n(h)f(name) ++h(and)g(a)f(directory)g(are)g(giv)n(en,)g(these)h(details)g(are)f ++(output)h(for)g(the)291 3066 y(time)c(after)g(that)h(patc)n(h)e(w)n(as) ++h(applied.)36 b(If)28 b(a)f(directory)f(and)h(a)f(tag)h(name)g(are)f ++(giv)n(en,)h(the)291 3166 y(details)g(of)g(the)h(patc)n(hes)f(in)n(v)n ++(olv)n(ed)g(in)g(the)h(sp)r(eci\014ed)g(tagged)f(v)n(ersion)f(will)i(b) ++r(e)g(output.)415 3270 y(If)33 b(a)f(\014le)h(name)g(is)f(giv)n(en,)h ++(the)g(last)g(mo)r(difying)g(patc)n(h)f(details)g(of)h(that)g(\014le)g ++(will)g(b)r(e)291 3369 y(output,)23 b(along)d(with)i(markup)f ++(indicating)h(patc)n(h)f(details)h(when)f(eac)n(h)g(line)h(w)n(as)f ++(last)g(\(and)291 3469 y(p)r(erhaps)27 b(next\))h(mo)r(di\014ed.)p ++527 3670 V 527 3745 a Fr(--creator-hash)38 b(HASH)p 527 ++3781 V 415 3982 a Fx(The)27 b Fr(--creator-hash)21 b ++Fx(option)26 b(should)h(only)f(b)r(e)h(used)g(in)g(com)n(bination)f ++(with)h(a)g(\014le)291 4082 y(or)h(directory)f(to)i(b)r(e)g(annotated.) + 41 b(In)29 b(this)g(case,)f(the)i(name)e(of)h(that)g(\014le)g(or)f +-(directory)g(is)291 3286 y(in)n(terpreted)f(to)h(b)r(e)g(its)h(name)e ++(directory)g(is)291 4181 y(in)n(terpreted)f(to)h(b)r(e)g(its)h(name)e + Fs(at)j(the)h(time)f(it)g(was)h(cr)l(e)l(ate)l(d)p Fx(,)d(and)g(the)g +-(hash)g(giv)n(en)f(along)291 3386 y(with)41 b Fr(--creator-hash)34 ++(hash)g(giv)n(en)f(along)291 4281 y(with)41 b Fr(--creator-hash)34 + b Fx(indicates)41 b(the)f(patc)n(h)h(that)f(created)g(the)h(\014le)f +-(or)g(directory)-7 b(.)291 3485 y(This)26 b(allo)n(ws)f(y)n(ou)h(to)g ++(or)g(directory)-7 b(.)291 4381 y(This)26 b(allo)n(ws)f(y)n(ou)h(to)g + (\(relativ)n(ely\))g(easily)f(examine)h(a)g(\014le)h(ev)n(en)f(if)h(it) +-g(has)f(b)r(een)h(renamed)291 3585 y(m)n(ultiple)h(times.)291 +-3852 y Fk(6.10.3)112 b(darcs)38 b(sho)m(w)291 4017 y ++g(has)f(b)r(een)h(renamed)291 4480 y(m)n(ultiple)h(times.)291 ++4737 y Fk(6.10.3)112 b(darcs)38 b(sho)m(w)291 4899 y + Fx(The)24 b(sho)n(w)e(command)i(pro)n(vides)e(access)h(to)h(sev)n(eral) + e(sub)r(commands)h(whic)n(h)h(can)g(b)r(e)g(used)291 +-4117 y(to)j(in)n(v)n(estigate)f(the)i(state)g(of)f(a)g(rep)r(ository)-7 +-b(.)291 4367 y Fv(darcs)32 b(sho)m(w)g(authors)291 4532 +-y Fr(Usage:)41 b(darcs)g(show)h(authors)f([OPTION]...)415 +-4638 y Fx(Options:)565 4769 y Fr(--repodir)e(DIRECTORY)1492 +-4727 y Fx(sp)r(ecify)28 b(the)g(rep)r(ository)e(directory)g(in)i(whic)n +-(h)g(to)1492 4826 y(run)415 4899 y(The)f(authors)f(command)h(writes)f +-(a)h(list)g(of)g(all)g(patc)n(h)f(authors)g(in)h(the)h(rep)r(ository)d +-(to)291 4998 y(standard)h(output.)p eop end ++4998 y(to)j(in)n(v)n(estigate)f(the)i(state)g(of)f(a)g(rep)r(ository)-7 ++b(.)p eop end + %%Page: 98 98 + TeXDict begin 98 97 bop 739 282 a Fx(98)1378 b Fu(CHAPTER)27 +-b(6.)64 b(D)n(AR)n(CS)28 b(COMMANDS)739 515 y Fk(6.10.4)112 +-b(darcs)38 b(sho)m(w)g(con)m(ten)m(ts)739 674 y Fr(Usage:)j(darcs)h +-(show)f(contents)g([OPTION]...)e([FILE]...)863 777 y +-Fx(Options:)1100 874 y Fr(--match)i(PATTERN)271 b Fx(select)27 +-b(a)g(single)h(patc)n(h)f(matc)n(hing)g(P)-7 b(A)g(TTERN)913 +-974 y Fr(-p)99 b(--patch)41 b(REGEXP)315 b Fx(select)27 +-b(a)g(single)h(patc)n(h)f(matc)n(hing)g(REGEXP)913 1073 +-y Fr(-t)99 b(--tag)42 b(REGEXP)402 b Fx(select)27 b(tag)g(matc)n(hing)g +-(REGEXP)1100 1203 y Fr(--repodir)40 b(DIRECTORY)2028 +-1161 y Fx(sp)r(ecify)28 b(the)g(rep)r(ository)e(directory)g(in)i(whic)n +-(h)f(to)2028 1261 y(run)863 1334 y(Sho)n(w)33 b(con)n(ten)n(ts)f(can)h +-(b)r(e)g(used)h(to)e(displa)n(y)h(an)f(earlier)g(v)n(ersion)g(of)h +-(some)f(\014le\(s\).)54 b(If)739 1434 y(y)n(ou)31 b(giv)n(e)g(sho)n(w)f +-(con)n(ten)n(ts)h(no)h(v)n(ersion)e(argumen)n(ts,)i(it)g(displa)n(ys)e +-(the)j(recorded)d(v)n(ersion)739 1534 y(of)d(the)h(\014le\(s\).)739 +-1766 y Fv(darcs)33 b(sho)m(w)e(\014les)739 1925 y Fr(Usage:)41 +-b(darcs)h(show)f(files)h([OPTION]...)863 2027 y Fx(Options:)1100 +-2125 y Fr(--files)620 b Fx(include)28 b(\014les)f(in)h(output)g([DEF)-9 +-b(A)n(UL)i(T])1100 2224 y Fr(--no-files)488 b Fx(don't)28 +-b(include)g(\014les)f(in)h(output)1100 2324 y Fr(--directories)356 ++b(6.)64 b(D)n(AR)n(CS)28 b(COMMANDS)739 515 y Fv(darcs)33 ++b(sho)m(w)e(authors)739 681 y Fr(Usage:)41 b(darcs)h(show)f(authors)g ++([OPTION]...)863 787 y Fx(Options:)1013 917 y Fr(--repodir)f(DIRECTORY) ++1941 875 y Fx(sp)r(ecify)28 b(the)g(rep)r(ository)d(directory)i(in)h ++(whic)n(h)f(to)1941 975 y(run)863 1047 y(The)g(authors)f(command)h ++(writes)f(a)h(list)g(of)g(all)g(patc)n(h)g(authors)e(in)j(the)f(rep)r ++(ository)e(to)739 1147 y(standard)i(output.)739 1397 ++y Fv(darcs)33 b(sho)m(w)e(con)m(ten)m(ts)739 1562 y Fr(Usage:)41 ++b(darcs)h(show)f(contents)g([OPTION]...)e([FILE]...)863 ++1668 y Fx(Options:)1100 1769 y Fr(--match)i(PATTERN)271 ++b Fx(select)27 b(a)g(single)h(patc)n(h)f(matc)n(hing)g(P)-7 ++b(A)g(TTERN)913 1868 y Fr(-p)99 b(--patch)41 b(REGEXP)315 ++b Fx(select)27 b(a)g(single)h(patc)n(h)f(matc)n(hing)g(REGEXP)913 ++1968 y Fr(-t)99 b(--tag)42 b(REGEXP)402 b Fx(select)27 ++b(tag)g(matc)n(hing)g(REGEXP)1100 2097 y Fr(--repodir)40 ++b(DIRECTORY)2028 2056 y Fx(sp)r(ecify)28 b(the)g(rep)r(ository)e ++(directory)g(in)i(whic)n(h)f(to)2028 2155 y(run)863 2232 ++y(Sho)n(w)33 b(con)n(ten)n(ts)f(can)h(b)r(e)g(used)h(to)e(displa)n(y)h ++(an)f(earlier)g(v)n(ersion)g(of)h(some)f(\014le\(s\).)54 ++b(If)739 2332 y(y)n(ou)31 b(giv)n(e)g(sho)n(w)f(con)n(ten)n(ts)h(no)h ++(v)n(ersion)e(argumen)n(ts,)i(it)g(displa)n(ys)e(the)j(recorded)d(v)n ++(ersion)739 2432 y(of)d(the)h(\014le\(s\).)739 2682 y ++Fv(darcs)33 b(sho)m(w)e(\014les)739 2847 y Fr(Usage:)41 ++b(darcs)h(show)f(files)h([OPTION]...)863 2953 y Fx(Options:)1100 ++3054 y Fr(--files)620 b Fx(include)28 b(\014les)f(in)h(output)g([DEF)-9 ++b(A)n(UL)i(T])1100 3153 y Fr(--no-files)488 b Fx(don't)28 ++b(include)g(\014les)f(in)h(output)1100 3253 y Fr(--directories)356 + b Fx(include)28 b(directories)e(in)i(output)g([DEF)-9 +-b(A)n(UL)i(T])1100 2424 y Fr(--no-directories)224 b Fx(don't)28 +-b(include)g(directories)e(in)i(output)1100 2563 y Fr(--pending)2028 +-2511 y Fx(re\015ect)f(p)r(ending)h(patc)n(hes)f(in)h(output)2028 +-2611 y([DEF)-9 b(A)n(UL)i(T])1100 2701 y Fr(--no-pending)400 ++b(A)n(UL)i(T])1100 3352 y Fr(--no-directories)224 b Fx(don't)28 ++b(include)g(directories)e(in)i(output)1100 3492 y Fr(--pending)2028 ++3440 y Fx(re\015ect)f(p)r(ending)h(patc)n(hes)f(in)h(output)2028 ++3540 y([DEF)-9 b(A)n(UL)i(T])1100 3630 y Fr(--no-pending)400 + b Fx(only)27 b(included)h(recorded)e(patc)n(hes)h(in)h(output)913 +-2801 y Fr(-0)99 b(--null)664 b Fx(separate)26 b(\014le)i(names)f(b)n(y) +-g(NUL)h(c)n(haracters)1100 2930 y Fr(--repodir)40 b(DIRECTORY)2028 +-2888 y Fx(sp)r(ecify)28 b(the)g(rep)r(ository)e(directory)g(in)i(whic)n +-(h)f(to)2028 2988 y(run)863 3057 y(The)d(\014les)g(command)f(lists)h ++3730 y Fr(-0)99 b(--null)664 b Fx(separate)26 b(\014le)i(names)f(b)n(y) ++g(NUL)h(c)n(haracters)1100 3859 y Fr(--repodir)40 b(DIRECTORY)2028 ++3817 y Fx(sp)r(ecify)28 b(the)g(rep)r(ository)e(directory)g(in)i(whic)n ++(h)f(to)2028 3917 y(run)863 3989 y(The)d(\014les)g(command)f(lists)h + (the)g(v)n(ersion-con)n(trolled)d(\014les)i(in)h(the)g(w)n(orking)e +-(cop)n(y)-7 b(.)35 b(The)739 3157 y(similar)27 b(manifest)h(command,)f ++(cop)n(y)-7 b(.)35 b(The)739 4089 y(similar)27 b(manifest)h(command,)f + (lists)g(the)h(same)f(\014les,)h(excluding)f(an)n(y)g(directories.)863 +-3259 y(By)i(default)h(\(and)g(if)f(the)h Fr(--pending)c ++4195 y(By)i(default)h(\(and)g(if)f(the)h Fr(--pending)c + Fx(option)j(is)g(sp)r(eci\014ed\),)h(the)g(e\013ect)g(of)f(p)r(ending) +-739 3359 y(patc)n(hes)j(on)g(the)h(rep)r(ository)e(is)h(tak)n(en)g(in)n ++739 4295 y(patc)n(hes)j(on)g(the)h(rep)r(ository)e(is)h(tak)n(en)g(in)n + (to)h(accoun)n(t.)50 b(In)33 b(other)f(w)n(ords,)g(if)i(y)n(ou)d(add)i +-(a)739 3459 y(\014le)24 b(using)g Fr(darcs)42 b(add)p ++(a)739 4394 y(\014le)24 b(using)g Fr(darcs)42 b(add)p + Fx(,)24 b(it)g(immediately)h(app)r(ears)e(in)h(the)h(output)g(of)f +-Fr(query)41 b(manifest)p Fx(,)739 3558 y(ev)n(en)32 b(if)g(it)h(is)f ++Fr(query)41 b(manifest)p Fx(,)739 4494 y(ev)n(en)32 b(if)g(it)h(is)f + (not)g(y)n(et)g(recorded.)49 b(If)33 b(y)n(ou)e(sp)r(ecify)h(the)h +-Fr(--no-pending)27 b Fx(option,)33 b Fr(query)739 3658 ++Fr(--no-pending)27 b Fx(option,)33 b Fr(query)739 4594 + y(manifest)24 b Fx(will)k(only)f(list)h(recorded)e(\014les)i(\(and)f +-(directories\).)863 3761 y(The)35 b Fr(--files)c Fx(and)k ++(directories\).)863 4700 y(The)35 b Fr(--files)c Fx(and)k + Fr(--directories)29 b Fx(options)k(con)n(trol)g(whether)i(\014les)f +-(and)g(direc-)739 3860 y(tories)k(are)h(included)h(in)f(the)h(output.) ++(and)g(direc-)739 4799 y(tories)k(are)h(included)h(in)f(the)h(output.) + 73 b(The)39 b Fr(--no-files)d Fx(and)j Fr(--no-directories)739 +-3960 y Fx(options)28 b(ha)n(v)n(e)g(the)i(rev)n(erse)d(e\013ect.)42 ++4899 y Fx(options)28 b(ha)n(v)n(e)g(the)i(rev)n(erse)d(e\013ect.)42 + b(The)29 b(default)h(is)f(to)f(include)i(\014les,)f(but)h(not)f +-(directo-)739 4059 y(ries.)863 4162 y(If)39 b(y)n(ou)f(sp)r(ecify)g +-(the)h Fr(--null)d Fx(option,)k(the)f(\014le)f(names)g(are)g(written)g +-(to)g(standard)739 4262 y(output)28 b(in)g(unescap)r(ed)f(form,)g(and)g +-(separated)f(b)n(y)i(ASCI)r(I)g(NUL)g(b)n(ytes.)36 b(This)27 +-b(format)g(is)739 4361 y(suitable)g(for)g(further)h(automatic)f(pro)r +-(cessing)f(\(for)h(example,)h(using)f Fr(xargs)41 b(-0)p +-Fx(\).)739 4594 y Fv(darcs)33 b(sho)m(w)e(tags)739 4752 +-y Fr(Usage:)41 b(darcs)h(show)f(tags)h([OPTION]...)863 +-4855 y Fx(Options:)1013 4982 y Fr(--repodir)e(DIRECTORY)1941 +-4940 y Fx(sp)r(ecify)28 b(the)g(rep)r(ository)d(directory)i(in)h(whic)n +-(h)f(to)1941 5040 y(run)p eop end ++(directo-)739 4998 y(ries.)p eop end + %%Page: 99 99 +-TeXDict begin 99 98 bop 291 282 a Fu(6.11.)63 b(RAREL)-7 +-b(Y)28 b(NEEDED)f(AND)i(OBSCURE)e(COMMANDS)621 b Fx(99)415 +-515 y(The)37 b(tags)f(command)h(writes)g(a)f(list)i(of)f(all)g(tags)f +-(in)h(the)h(rep)r(ository)d(to)i(standard)291 615 y(output.)415 +-715 y(T)-7 b(ab)29 b(c)n(haracters)d(\(ASCI)r(I)k(c)n(haracter)c(9\))j +-(in)g(tag)f(names)g(are)g(c)n(hanged)f(to)i(spaces)e(for)291 +-814 y(b)r(etter)h(in)n(terop)r(erabilit)n(y)e(with)i(shell)f(to)r(ols.) +-37 b(A)28 b(w)n(arning)e(is)h(prin)n(ted)h(if)g(this)g(happ)r(ens.)291 +-1029 y Fv(darcs)k(sho)m(w)g(rep)s(o)291 1182 y Fr(Usage:)41 +-b(darcs)g(show)h(repo)g([OPTION]...)415 1282 y Fx(Options:)565 +-1406 y Fr(--repodir)d(DIRECTORY)1492 1364 y Fx(sp)r(ecify)28 +-b(the)g(rep)r(ository)e(directory)g(in)i(whic)n(h)g(to)1492 +-1464 y(run)565 1533 y Fr(--files)619 b Fx(include)28 +-b(\014les)g(in)g(output)g([DEF)-9 b(A)n(UL)i(T])565 1633 ++TeXDict begin 99 98 bop 291 282 a Fu(6.10.)63 b(AD)n(V)-9 ++b(ANCED)28 b(EXAMINA)-7 b(TION)29 b(OF)e(THE)g(REPOSITOR)-7 ++b(Y)479 b Fx(99)415 515 y(If)39 b(y)n(ou)e(sp)r(ecify)i(the)g ++Fr(--null)c Fx(option,)41 b(the)e(\014le)f(names)g(are)f(written)i(to)f ++(standard)291 615 y(output)28 b(in)f(unescap)r(ed)g(form,)h(and)f ++(separated)f(b)n(y)h(ASCI)r(I)h(NUL)g(b)n(ytes.)37 b(This)27 ++b(format)g(is)291 715 y(suitable)g(for)g(further)h(automatic)f(pro)r ++(cessing)f(\(for)h(example,)g(using)h Fr(xargs)41 b(-0)p ++Fx(\).)291 955 y Fv(darcs)32 b(sho)m(w)g(tags)291 1116 ++y Fr(Usage:)41 b(darcs)g(show)h(tags)g([OPTION]...)415 ++1220 y Fx(Options:)565 1349 y Fr(--repodir)d(DIRECTORY)1492 ++1307 y Fx(sp)r(ecify)28 b(the)g(rep)r(ository)e(directory)g(in)i(whic)n ++(h)g(to)1492 1407 y(run)415 1477 y(The)37 b(tags)f(command)h(writes)g ++(a)f(list)i(of)f(all)g(tags)f(in)h(the)h(rep)r(ository)d(to)i(standard) ++291 1577 y(output.)415 1681 y(T)-7 b(ab)29 b(c)n(haracters)d(\(ASCI)r ++(I)k(c)n(haracter)c(9\))j(in)g(tag)f(names)g(are)g(c)n(hanged)f(to)i ++(spaces)e(for)291 1781 y(b)r(etter)h(in)n(terop)r(erabilit)n(y)e(with)i ++(shell)f(to)r(ols.)37 b(A)28 b(w)n(arning)e(is)h(prin)n(ted)h(if)g ++(this)g(happ)r(ens.)291 2021 y Fv(darcs)k(sho)m(w)g(rep)s(o)291 ++2182 y Fr(Usage:)41 b(darcs)g(show)h(repo)g([OPTION]...)415 ++2286 y Fx(Options:)565 2415 y Fr(--repodir)d(DIRECTORY)1492 ++2373 y Fx(sp)r(ecify)28 b(the)g(rep)r(ository)e(directory)g(in)i(whic)n ++(h)g(to)1492 2473 y(run)565 2542 y Fr(--files)619 b Fx(include)28 ++b(\014les)g(in)g(output)g([DEF)-9 b(A)n(UL)i(T])565 2642 + y Fr(--no-files)487 b Fx(don't)28 b(include)g(\014les)g(in)f(output)565 +-1733 y Fr(--xml-output)399 b Fx(generate)27 b(XML)h(formatted)f(output) +-415 1828 y(The)e Fr(show)42 b(repo)23 b Fx(displa)n(ys)g(information)h ++2742 y Fr(--xml-output)399 b Fx(generate)27 b(XML)h(formatted)f(output) ++415 2842 y(The)e Fr(show)42 b(repo)23 b Fx(displa)n(ys)g(information)h + (ab)r(out)h(the)f(curren)n(t)g(rep)r(ository:)34 b(the)25 +-b(lo)r(ca-)291 1928 y(tion,)i(the)h(t)n(yp)r(e,)g(etc.)415 +-2028 y(This)23 b(is)f(pro)n(vided)f(as)h(informational)g(output)h(for)f ++b(lo)r(ca-)291 2942 y(tion,)i(the)h(t)n(yp)r(e,)g(etc.)415 ++3046 y(This)23 b(is)f(pro)n(vided)f(as)h(informational)g(output)h(for)f + (t)n(w)n(o)f(purp)r(oses:)34 b(curious)21 b(users)h(and)291 +-2127 y(scripts)d(in)n(v)n(oking)g(darcs.)34 b(F)-7 b(or)19 ++3146 y(scripts)d(in)n(v)n(oking)g(darcs.)34 b(F)-7 b(or)19 + b(the)i(latter,)g(this)g(information)f(can)g(b)r(e)g(parsed)g(to)g +-(facilitate)291 2227 y(the)34 b(script;)j(for)c(example,)i ++(facilitate)291 3245 y(the)34 b(script;)j(for)c(example,)i + Fr(darcs)42 b(show)g(repo)g(|)h(grep)f(Root:)f(|)j(awk)e({print)f($2}) +-291 2327 y Fx(can)36 b(b)r(e)h(used)f(to)g(lo)r(cate)g(the)h(top-lev)n ++291 3345 y Fx(can)36 b(b)r(e)h(used)f(to)g(lo)r(cate)g(the)h(top-lev)n + (el)f Fr(_darcs)e Fx(directory)h(from)h(an)n(yplace)f(within)i(a)291 +-2426 y(darcs)26 b(rep)r(ository)g(w)n(orking)g(directory)-7 +-b(.)p 527 2603 2392 4 v 527 2678 a Fr(--files,)40 b(--no-files)p +-527 2726 V 415 2903 a Fx(If)29 b(the)h Fr(--files)c Fx(option)i(is)h ++3444 y(darcs)26 b(rep)r(ository)g(w)n(orking)g(directory)-7 ++b(.)p 527 3645 2392 4 v 527 3720 a Fr(--files,)40 b(--no-files)p ++527 3768 V 415 3969 a Fx(If)29 b(the)h Fr(--files)c Fx(option)i(is)h + (sp)r(eci\014ed)g(\(the)h(default\),)g(then)f(the)g Fr(show)42 +-b(repo)27 b Fx(op)r(era-)291 3002 y(tion)f(will)h(read)e(patc)n(h)h ++b(repo)27 b Fx(op)r(era-)291 4069 y(tion)f(will)h(read)e(patc)n(h)h + (information)g(from)g(the)h(rep)r(ository)e(and)h(displa)n(y)g(the)h(n) +-n(um)n(b)r(er)f(of)291 3102 y(patc)n(hes)g(in)h(the)g(rep)r(ository)-7 ++n(um)n(b)r(er)f(of)291 4168 y(patc)n(hes)g(in)h(the)g(rep)r(ository)-7 + b(.)35 b(The)27 b Fr(--no-files)c Fx(option)j(can)h(b)r(e)g(used)g(to)g +-(suppress)f(this)291 3202 y(op)r(eration)g(\(and)i(impro)n(v)n(e)e(p)r +-(erformance\).)p 527 3378 V 527 3453 a Fr(--human-readable)o(,)37 +-b(--xml-output)p 527 3508 V 415 3685 a Fx(By)24 b(default,)i(the)f ++(suppress)f(this)291 4268 y(op)r(eration)g(\(and)i(impro)n(v)n(e)e(p)r ++(erformance\).)p 527 4469 V 527 4543 a Fr(--human-readable)o(,)37 ++b(--xml-output)p 527 4598 V 415 4799 a Fx(By)24 b(default,)i(the)f + Fr(show)42 b(repo)23 b Fx(displa)n(ys)g(output)i(in)g(h)n(uman)f +-(readable)g(form,)g(but)i(the)291 3785 y Fr(--xml-output)16 ++(readable)g(form,)g(but)i(the)291 4899 y Fr(--xml-output)16 + b Fx(option)21 b(can)g(b)r(e)h(used)f(to)h(obtain)f(XML-formatted)g(to) +-g(facilitate)h(regular)291 3884 y(parsing)k(b)n(y)h(external)g(to)r +-(ols.)291 4158 y Fq(6.11)135 b(Rarely)46 b(needed)f(and)g(obscure)g +-(commands)291 4356 y Fk(6.11.1)112 b(darcs)38 b(con)m(v)m(ert)291 +-4510 y Fr(Usage:)j(darcs)g(convert)g([OPTION]...)e()g +-([])415 4609 y Fx(Options:)565 4703 y Fr(--repo-name)g +-(DIRECTORY)444 b Fx(path)28 b(of)f(output)i(directory)565 +-4803 y Fr(--set-scripts-e)o(xec)o(ut)o(ab)o(le)311 b +-Fx(mak)n(e)27 b(scripts)g(executable)565 4903 y Fr(--dont-set-scri)o +-(pts)o(-e)o(xe)o(cut)o(ab)o(le)93 b Fx(don't)28 b(mak)n(e)f(scripts)g +-(executable)415 4998 y(Adv)-5 b(anced)28 b(options:)p +-eop end ++g(facilitate)h(regular)291 4998 y(parsing)k(b)n(y)h(external)g(to)r ++(ols.)p eop end + %%Page: 100 100 + TeXDict begin 100 99 bop 739 282 a Fx(100)1336 b Fu(CHAPTER)27 +-b(6.)64 b(D)n(AR)n(CS)28 b(COMMANDS)1013 542 y Fr(--no-ssh-cm)1592 +-490 y Fx(don't)g(use)f(SSH)h(Con)n(trolMaster)e(feature)1592 +-590 y([DEF)-9 b(A)n(UL)i(T])1013 680 y Fr(--ssh-cm)1592 +-688 y Fx(use)27 b(SSH)i(Con)n(trolMaster)c(feature)863 +-777 y(Y)-7 b(ou)31 b(ma)n(y)f(sp)r(ecify)h(the)f(name)h(of)f(the)h(rep) +-r(ository)e(created)g(b)n(y)i(pro)n(viding)e(a)h(second)739 +-876 y(argumen)n(t)c(to)i(con)n(v)n(ert,)e(whic)n(h)i(is)f(a)g +-(directory)g(name.)739 1112 y Fk(6.11.2)112 b(darcs)38 +-b(mark-con\015icts)739 1267 y Fr(Usage:)j(darcs)h(mark-conflicts)37 +-b([OPTION]...)863 1367 y Fx(Options:)1013 1462 y Fr(--ignore-times)1941 +-1470 y Fx(don't)27 b(trust)h(the)g(\014le)g(mo)r(di\014cation)f(times) +-1013 1591 y Fr(--repodir)40 b(DIRECTORY)1941 1549 y Fx(sp)r(ecify)28 ++b(6.)64 b(D)n(AR)n(CS)28 b(COMMANDS)739 515 y Fq(6.11)135 ++b(Rarely)47 b(needed)e(and)f(obscure)h(commands)739 714 ++y Fk(6.11.1)112 b(darcs)38 b(con)m(v)m(ert)739 867 y ++Fr(Usage:)j(darcs)h(convert)e([OPTION]...)f()g ++([])863 967 y Fx(Options:)1013 1061 y Fr(--repo-name)g ++(DIRECTORY)444 b Fx(path)28 b(of)g(output)g(directory)1013 ++1160 y Fr(--set-scripts-ex)o(ec)o(uta)o(bl)o(e)311 b ++Fx(mak)n(e)27 b(scripts)g(executable)1013 1260 y Fr(--dont-set-scrip)o ++(ts)o(-ex)o(ec)o(uta)o(bl)o(e)93 b Fx(don't)28 b(mak)n(e)f(scripts)g ++(executable)863 1356 y(Adv)-5 b(anced)28 b(options:)1013 ++1490 y Fr(--no-ssh-cm)1592 1438 y Fx(don't)g(use)f(SSH)h(Con)n ++(trolMaster)e(feature)1592 1538 y([DEF)-9 b(A)n(UL)i(T])1013 ++1628 y Fr(--ssh-cm)1592 1636 y Fx(use)27 b(SSH)i(Con)n(trolMaster)c ++(feature)863 1724 y(Y)-7 b(ou)31 b(ma)n(y)f(sp)r(ecify)h(the)f(name)h ++(of)f(the)h(rep)r(ository)e(created)g(b)n(y)i(pro)n(viding)e(a)h ++(second)739 1824 y(argumen)n(t)c(to)i(con)n(v)n(ert,)e(whic)n(h)i(is)f ++(a)g(directory)g(name.)739 2050 y Fk(6.11.2)112 b(darcs)38 ++b(mark-con\015icts)739 2203 y Fr(Usage:)j(darcs)h(mark-conflicts)37 ++b([OPTION]...)863 2302 y Fx(Options:)1013 2397 y Fr(--ignore-times)1941 ++2405 y Fx(don't)27 b(trust)h(the)g(\014le)g(mo)r(di\014cation)f(times) ++1013 2526 y Fr(--repodir)40 b(DIRECTORY)1941 2484 y Fx(sp)r(ecify)28 + b(the)g(rep)r(ository)d(directory)i(in)h(whic)n(h)f(to)1941 +-1649 y(run)863 1716 y(Adv)-5 b(anced)28 b(options:)1013 +-1815 y Fr(--umask)41 b(UMASK)97 b Fx(sp)r(ecify)28 b(umask)f(to)h(use)f +-(when)h(writing)863 1916 y(Mark-con\015icts)e(is)h(used)h(to)f(mark)f ++2584 y(run)863 2650 y(Adv)-5 b(anced)28 b(options:)1013 ++2748 y Fr(--umask)41 b(UMASK)97 b Fx(sp)r(ecify)28 b(umask)f(to)h(use)f ++(when)h(writing)863 2849 y(Mark-con\015icts)e(is)h(used)h(to)f(mark)f + (and)h(resolv)n(e)f(an)n(y)h(con\015icts)g(that)g(ma)n(y)g(exist)g(in)h +-(a)739 2016 y(rep)r(ository)-7 b(.)35 b(Note)27 b(that)g(this)g ++(a)739 2949 y(rep)r(ository)-7 b(.)35 b(Note)27 b(that)g(this)g + (trashes)f(an)n(y)g(unrecorded)f(c)n(hanges)h(in)h(the)g(w)n(orking)e +-(cop)n(y)-7 b(.)739 2252 y Fk(6.11.3)112 b(darcs)38 b(dist)739 +-2407 y Fr(Usage:)j(darcs)h(dist)f([OPTION]...)863 2507 +-y Fx(Options:)913 2602 y Fr(-d)99 b(--dist-name)39 b(DISTNAME)2071 +-2610 y Fx(name)28 b(of)f(v)n(ersion)1100 2731 y Fr(--repodir)40 +-b(DIRECTORY)2071 2689 y Fx(sp)r(ecify)28 b(the)g(rep)r(ository)e +-(directory)h(in)g(whic)n(h)h(to)2071 2789 y(run)863 2856 +-y(Create)f(a)g(distribution)h(tarball.)863 2956 y(Dist)e(is)e(a)h ++(cop)n(y)-7 b(.)739 3175 y Fk(6.11.3)112 b(darcs)38 b(dist)739 ++3328 y Fr(Usage:)j(darcs)h(dist)f([OPTION]...)863 3427 ++y Fx(Options:)913 3522 y Fr(-d)99 b(--dist-name)39 b(DISTNAME)2071 ++3530 y Fx(name)28 b(of)f(v)n(ersion)1100 3651 y Fr(--repodir)40 ++b(DIRECTORY)2071 3609 y Fx(sp)r(ecify)28 b(the)g(rep)r(ository)e ++(directory)h(in)g(whic)n(h)h(to)2071 3709 y(run)863 3775 ++y(Create)f(a)g(distribution)h(tarball.)863 3874 y(Dist)e(is)e(a)h + (handy)f(to)r(ol)g(for)h(implemen)n(ting)g(a)f("mak)n(e)f(dist")i +-(target)f(in)g(y)n(our)g(mak)n(e\014le.)739 3056 y(It)39 ++(target)f(in)g(y)n(our)g(mak)n(e\014le.)739 3974 y(It)39 + b(creates)f(a)g(tarball)g(of)h(the)g(recorded)f(edition)h(of)g(y)n(our) + e(tree.)71 b(Basically)-7 b(,)40 b(y)n(ou)e(will)739 +-3155 y(t)n(ypically)27 b(use)g(it)h(in)g(a)f(mak)n(e\014le)g(rule)h +-(suc)n(h)f(as)739 3324 y Fr(dist:)913 3424 y(darcs)42 ++4074 y(t)n(ypically)27 b(use)g(it)h(in)g(a)f(mak)n(e\014le)g(rule)h ++(suc)n(h)f(as)739 4210 y Fr(dist:)913 4309 y(darcs)42 + b(dist)g(--dist-name)d(darcs-`./darcs)f(--version`)739 +-3592 y(darcs)j(dist)29 b Fx(then)h(simply)g(creates)f(a)g(clean)h(cop)n ++4445 y(darcs)j(dist)29 b Fx(then)h(simply)g(creates)f(a)g(clean)h(cop)n + (y)f(of)h(the)g(source)e(tree,)j(whic)n(h)e(it)i(then)739 +-3691 y(tars)f(and)h(gzips.)48 b(If)31 b(y)n(ou)g(use)g(programs)e(suc)n ++4545 y(tars)f(and)h(gzips.)48 b(If)31 b(y)n(ou)g(use)g(programs)e(suc)n + (h)i(as)g(auto)r(conf)g(or)f(automak)n(e,)h(y)n(ou)f(really)739 +-3791 y(should)d(run)g(them)h(on)f(the)h(clean)f(tree)g(b)r(efore)h ++4645 y(should)d(run)g(them)h(on)f(the)h(clean)f(tree)g(b)r(efore)h + (tarring)e(it)h(up)h(and)f(distributing)h(it.)37 b(Y)-7 +-b(ou)739 3891 y(can)25 b(do)f(this)i(using)e(the)i(pref)f(v)-5 ++b(ou)739 4744 y(can)25 b(do)f(this)i(using)e(the)i(pref)f(v)-5 + b(alue)25 b(\\predist",)f(whic)n(h)h(is)g(a)g(shell)g(command)f(that)h +-(is)g(run)739 3990 y(prior)h(to)i(tarring)e(up)i(the)g(distribution:) +-739 4159 y Fr(\045)43 b(darcs)f(setpref)e(predist)h("autoconf)f(&&)j +-(automake")739 4395 y Fk(6.11.4)112 b(darcs)38 b(trac)m(kdo)m(wn)739 +-4549 y Fr(Usage:)j(darcs)h(trackdown)d([OPTION]...)g([[INITIALIZATION]) +-e(COMMAND])863 4650 y Fx(Options:)1013 4774 y Fr(--repodir)j(DIRECTORY) +-1941 4733 y Fx(sp)r(ecify)28 b(the)g(rep)r(ository)d(directory)i(in)h +-(whic)n(h)f(to)1941 4832 y(run)863 4899 y(T)-7 b(rac)n(kdo)n(wn)39 +-b(tries)h(to)h(\014nd)g(the)g(most)g(recen)n(t)f(v)n(ersion)f(in)i(the) +-g(rep)r(ository)e(whic)n(h)739 4998 y(passes)32 b(a)g(test.)53 +-b(Giv)n(en)33 b(no)g(argumen)n(ts,)g(it)g(uses)f(the)i(default)f(rep)r +-(ository)e(test.)53 b(Giv)n(en)p eop end ++(is)g(run)739 4844 y(prior)h(to)i(tarring)e(up)i(the)g(distribution:) ++739 4980 y Fr(\045)43 b(darcs)f(setpref)e(predist)h("autoconf)f(&&)j ++(automake")p eop end + %%Page: 101 101 + TeXDict begin 101 100 bop 291 282 a Fu(6.11.)63 b(RAREL)-7 + b(Y)28 b(NEEDED)f(AND)i(OBSCURE)e(COMMANDS)579 b Fx(101)291 +-515 y(one)31 b(argumen)n(t,)g(it)h(treats)f(it)h(as)f(a)g(test)h +-(command.)48 b(Giv)n(en)31 b(t)n(w)n(o)g(argumen)n(ts,)g(the)h(\014rst) +-291 615 y(is)f(an)f(initialization)h(command)g(with)h(is)f(run)g(only)f +-(once,)i(and)f(the)h(second)e(is)h(the)h(test)291 715 +-y(command.)415 815 y(T)-7 b(rac)n(kdo)n(wn)28 b(is)h(helpful)i(for)e +-(lo)r(cating)g(when)h(something)f(w)n(as)g(brok)n(en.)42 +-b(It)30 b(creates)e(a)291 914 y(temp)r(orary)d(directory)h(with)h(the)g +-(latest)g(rep)r(ository)e(con)n(ten)n(t)i(in)g(it)g(and)g(cd)g(to)g +-(it.)37 b(First,)291 1014 y(and)27 b(only)g(once,)g(it)h(runs)g(the)g +-(initialization)f(command)g(if)h(an)n(y)-7 b(,)27 b(for)g(example)291 +-1182 y Fr('autoconf;)39 b(./configure)g(>/dev/null')291 +-1350 y Fx(Then)27 b(it)h(runs)g(the)g(test)f(command,)h(for)f(example) +-291 1518 y Fr('make)41 b(&&)i(cd)g(tests)e(&&)i(sh)g(/tmp/test.sh')291 +-1686 y Fx(While)25 b(the)h(test)f(command)g(exits)g(with)h(an)f(error)e +-(return)i(co)r(de,)g(darcs)f(\\unapplies")g(one)291 1786 +-y(patc)n(h)g(from)g(the)h(v)n(ersion)e(con)n(trolled)g(\014les)i(to)f +-(retriev)n(e)f(an)h(earlier)g(v)n(ersion,)f(and)i(rep)r(eats)291 +-1885 y(the)c(test)h(command.)34 b(If)22 b(the)g(test)g(command)f ++515 y Fk(6.11.4)112 b(darcs)38 b(trac)m(kdo)m(wn)291 ++669 y Fr(Usage:)j(darcs)g(trackdown)f([OPTION]...)f([[INITIALIZATION)o ++(])f(COMMAND])415 768 y Fx(Options:)565 892 y Fr(--repodir)h(DIRECTORY) ++1492 850 y Fx(sp)r(ecify)28 b(the)g(rep)r(ository)e(directory)g(in)i ++(whic)n(h)g(to)1492 950 y(run)415 1016 y(Adv)-5 b(anced)28 ++b(options:)565 1110 y Fr(--set-scripts-e)o(xec)o(ut)o(ab)o(le)311 ++b Fx(mak)n(e)27 b(scripts)g(executable)565 1210 y Fr(--dont-set-scri)o ++(pts)o(-e)o(xe)o(cut)o(ab)o(le)93 b Fx(don't)28 b(mak)n(e)f(scripts)g ++(executable)415 1306 y(T)-7 b(rac)n(kdo)n(wn)39 b(tries)h(to)h(\014nd)g ++(the)g(most)g(recen)n(t)f(v)n(ersion)f(in)i(the)g(rep)r(ository)e(whic) ++n(h)291 1405 y(passes)31 b(a)i(test.)53 b(Giv)n(en)33 ++b(no)f(argumen)n(ts,)h(it)h(uses)e(the)h(default)h(rep)r(ository)d ++(test.)53 b(Giv)n(en)291 1505 y(one)31 b(argumen)n(t,)g(it)h(treats)f ++(it)h(as)f(a)g(test)h(command.)48 b(Giv)n(en)31 b(t)n(w)n(o)g(argumen)n ++(ts,)g(the)h(\014rst)291 1604 y(is)f(an)f(initialization)h(command)g ++(with)h(is)f(run)g(only)f(once,)i(and)f(the)h(second)e(is)h(the)h(test) ++291 1704 y(command.)415 1804 y(T)-7 b(rac)n(kdo)n(wn)28 ++b(is)h(helpful)i(for)e(lo)r(cating)g(when)h(something)f(w)n(as)g(brok)n ++(en.)42 b(It)30 b(creates)e(a)291 1903 y(temp)r(orary)d(directory)h ++(with)h(the)g(latest)g(rep)r(ository)e(con)n(ten)n(t)i(in)g(it)g(and)g ++(cd)g(to)g(it.)37 b(First,)291 2003 y(and)27 b(only)g(once,)g(it)h ++(runs)g(the)g(initialization)f(command)g(if)h(an)n(y)-7 ++b(,)27 b(for)g(example)291 2162 y Fr('autoconf;)39 b(./configure)g ++(>/dev/null')291 2321 y Fx(Then)27 b(it)h(runs)g(the)g(test)f(command,) ++h(for)f(example)291 2480 y Fr('make)41 b(&&)i(cd)g(tests)e(&&)i(sh)g ++(/tmp/test.sh')291 2640 y Fx(While)25 b(the)h(test)f(command)g(exits)g ++(with)h(an)f(error)e(return)i(co)r(de,)g(darcs)f(\\unapplies")g(one)291 ++2739 y(patc)n(h)g(from)g(the)h(v)n(ersion)e(con)n(trolled)g(\014les)i ++(to)f(retriev)n(e)f(an)h(earlier)g(v)n(ersion,)f(and)i(rep)r(eats)291 ++2839 y(the)c(test)h(command.)34 b(If)22 b(the)g(test)g(command)f + (\014nally)g(succeeds,)h(the)g(name)f(of)g(the)h(h)n(un)n(ted)291 +-1985 y(do)n(wn)27 b(patc)n(h)g(is)g(found)h(in)g(the)g(output)g(b)r +-(efore)g(the)g(last)f(test)h(run.)415 2085 y(FIXME:)38 ++2938 y(do)n(wn)27 b(patc)n(h)g(is)g(found)h(in)g(the)g(output)g(b)r ++(efore)g(the)g(last)f(test)h(run.)415 3038 y(FIXME:)38 + b(It)g(is)g(still)g(rather)e(primitiv)n(e.)68 b(Curren)n(tly)36 + b(it)j(just)f(go)r(es)f(bac)n(k)g(o)n(v)n(er)f(the)291 +-2185 y(history)31 b(in)h(rev)n(erse)e(order)h(trying)g(eac)n(h)g(v)n ++3138 y(history)31 b(in)h(rev)n(erse)e(order)h(trying)g(eac)n(h)g(v)n + (ersion.)48 b(I'd)33 b(lik)n(e)e(for)h(it)g(to)g(explore)f(di\013eren)n +-(t)291 2284 y(patc)n(h)j(com)n(binations,)h(to)f(try)g(to)h(\014nd)g ++(t)291 3237 y(patc)n(h)j(com)n(binations,)h(to)f(try)g(to)h(\014nd)g + (the)f(minim)n(um)i(n)n(um)n(b)r(er)e(of)g(patc)n(hes)g(that)h(y)n(ou) +-291 2384 y(w)n(ould)27 b(need)g(to)h(obliterate)f(in)h(order)e(to)h +-(mak)n(e)g(the)h(test)g(succeed.)415 2484 y(FIXME:)e(I)h(also)e(w)n ++291 3337 y(w)n(ould)27 b(need)g(to)h(obliterate)f(in)h(order)e(to)h ++(mak)n(e)g(the)h(test)g(succeed.)415 3437 y(FIXME:)e(I)h(also)e(w)n + (ould)g(lik)n(e)h(to)g(add)g(an)g(in)n(terface)g(b)n(y)g(whic)n(h)g(y)n +-(ou)f(can)h(tell)g(it)h(whic)n(h)291 2584 y(patc)n(hes)f(it)i(should)f ++(ou)f(can)h(tell)g(it)h(whic)n(h)291 3536 y(patc)n(hes)f(it)i(should)f + (consider)g(not)g(including.)37 b(Without)28 b(suc)n(h)f(a)g(feature,)g +-(the)h(follo)n(wing)291 2683 y(command:)291 2852 y Fr(\045)43 +-b(darcs)e(trackdown)f('make)i(&&)g(false')291 3020 y ++(the)h(follo)n(wing)291 3636 y(command:)291 3795 y Fr(\045)43 ++b(darcs)e(trackdown)f('make)i(&&)g(false')291 3954 y + Fx(w)n(ould)29 b(result)h(in)h(compiling)e(ev)n(ery)g(v)n(ersion)g(in)h + (the)h(rep)r(ository{whic)n(h)d(is)i(a)g(rather)f(te-)291 +-3119 y(dious)e(prosp)r(ect.)291 3338 y Fv(Example)k(usage)291 +-3492 y Fx(If)d(y)n(ou)g(w)n(an)n(t)f(to)i(\014nd)f(the)h(last)f(v)n ++4054 y(dious)e(prosp)r(ect.)291 4268 y Fv(Example)k(usage)291 ++4421 y Fx(If)d(y)n(ou)g(w)n(an)n(t)f(to)i(\014nd)f(the)h(last)f(v)n + (ersion)f(of)h(darcs)f(that)i(had)f(a)g(FIXME)g(note)h(in)f(the)h +-(\014le)291 3592 y(Record.lhs,)d(y)n(ou)h(could)h(run)291 +-3760 y Fr(\045)43 b(darcs)e(trackdown)f('grep)i(FIXME)f(Record.lhs')415 +-3928 y Fx(T)-7 b(o)27 b(\014nd)h(the)g(latest)g(v)n(ersion)e(that)i +-(compiles,)f(y)n(ou)g(can)g(run)291 4096 y Fr(\045)43 ++(\014le)291 4521 y(Record.lhs,)d(y)n(ou)h(could)h(run)291 ++4680 y Fr(\045)43 b(darcs)e(trackdown)f('grep)i(FIXME)f(Record.lhs')415 ++4839 y Fx(T)-7 b(o)27 b(\014nd)h(the)g(latest)g(v)n(ersion)e(that)i ++(compiles,)f(y)n(ou)g(can)g(run)291 4998 y Fr(\045)43 + b(darcs)e(trackdown)f('autoconf')g('./configure)e(&&)43 +-b(make')415 4264 y Fx(T)-7 b(rac)n(kdo)n(wn)28 b(can)i(also)f(b)r(e)i +-(used)f(to)g(see)g(ho)n(w)g(other)f(features)h(of)g(the)h(co)r(de)f(c)n +-(hanged)291 4364 y(with)e(time.)37 b(F)-7 b(or)27 b(example)291 +-4532 y Fr(\045)43 b(darcs)e(trackdown)f('autoconf;)g(./configure')e(\\) +-421 4631 y("make)k(darcs)f(>)j(/dev/null)39 b(&&)k(cd)g(~/darcs)e(&&)h +-(time)g(darcs)g(check)f(&&)i(false")291 4799 y Fx(w)n(ould)28 +-b(let)h(y)n(ou)f(see)h(ho)n(w)f(long)g(`darcs)g(c)n(hec)n(k')g(tak)n +-(es)g(to)g(run)h(on)g(eac)n(h)f(previous)f(v)n(ersion)291 +-4899 y(of)34 b(darcs)g(that)h(will)g(actually)f(compile.)58 +-b(The)34 b(\\)p Fr(&&)43 b(false)p Fx(")32 b(ensures)i(that)h(trac)n +-(kdo)n(wn)291 4998 y(k)n(eeps)26 b(going.)p eop end ++b(make')p eop end + %%Page: 102 102 + TeXDict begin 102 101 bop 739 282 a Fx(102)1336 b Fu(CHAPTER)27 +-b(6.)64 b(D)n(AR)n(CS)28 b(COMMANDS)739 515 y Fk(6.11.5)112 +-b(darcs)38 b(repair)739 669 y Fr(Usage:)j(darcs)h(repair)f([OPTION]...) +-863 768 y Fx(Options:)1013 892 y Fr(--repodir)f(DIRECTORY)1941 +-850 y Fx(sp)r(ecify)28 b(the)g(rep)r(ository)d(directory)i(in)h(whic)n +-(h)f(to)1941 950 y(run)863 1016 y(Adv)-5 b(anced)28 b(options:)1013 +-1114 y Fr(--umask)41 b(UMASK)97 b Fx(sp)r(ecify)28 b(umask)f(to)h(use)f +-(when)h(writing)863 1215 y(Repair)f(attempts)h(to)g(\014x)f(corruption) ++b(6.)64 b(D)n(AR)n(CS)28 b(COMMANDS)863 515 y Fx(T)-7 ++b(rac)n(kdo)n(wn)29 b(can)g(also)h(b)r(e)g(used)g(to)h(see)e(ho)n(w)h ++(other)g(features)f(of)i(the)f(co)r(de)g(c)n(hanged)739 ++615 y(with)e(time.)37 b(F)-7 b(or)27 b(example)739 781 ++y Fr(\045)43 b(darcs)f(trackdown)d('autoconf;)h(./configure')f(\\)870 ++881 y("make)i(darcs)h(>)h(/dev/null)d(&&)i(cd)h(~/darcs)e(&&)i(time)f ++(darcs)f(check)h(&&)g(false")739 1047 y Fx(w)n(ould)28 ++b(let)h(y)n(ou)g(see)f(ho)n(w)g(long)g(`darcs)g(c)n(hec)n(k')g(tak)n ++(es)g(to)h(run)f(on)h(eac)n(h)f(previous)g(v)n(ersion)739 ++1146 y(of)35 b(darcs)e(that)i(will)g(actually)f(compile.)58 ++b(The)35 b(\\)p Fr(&&)42 b(false)p Fx(")32 b(ensures)i(that)h(trac)n ++(kdo)n(wn)739 1246 y(k)n(eeps)27 b(going.)739 1478 y ++Fk(6.11.5)112 b(darcs)38 b(repair)739 1632 y Fr(Usage:)j(darcs)h ++(repair)f([OPTION]...)863 1731 y Fx(Options:)1013 1855 ++y Fr(--repodir)f(DIRECTORY)1941 1813 y Fx(sp)r(ecify)28 ++b(the)g(rep)r(ository)d(directory)i(in)h(whic)n(h)f(to)1941 ++1913 y(run)863 1979 y(Adv)-5 b(anced)28 b(options:)1013 ++2077 y Fr(--umask)41 b(UMASK)97 b Fx(sp)r(ecify)28 b(umask)f(to)h(use)f ++(when)h(writing)863 2178 y(Repair)f(attempts)h(to)g(\014x)f(corruption) + g(that)h(ma)n(y)f(ha)n(v)n(e)f(en)n(tered)h(y)n(our)f(rep)r(ository)-7 +-b(.)863 1315 y(Repair)33 b(curren)n(tly)f(will)h(only)f(repair)g ++b(.)863 2278 y(Repair)33 b(curren)n(tly)f(will)h(only)f(repair)g + (damage)g(to)h(the)g(pristine)g(tree.)53 b(F)-7 b(ortunately)739 +-1414 y(this)28 b(is)f(just)h(the)g(sort)f(of)h(corruption)e(that)i(is)f ++2377 y(this)28 b(is)f(just)h(the)g(sort)f(of)h(corruption)e(that)i(is)f + (most)h(lik)n(ely)f(to)g(happ)r(en.)p eop end + %%Page: 103 103 + TeXDict begin 103 102 bop 291 1140 a Ft(App)5 b(endix)64 +diff -ruN darcs-2.0.0/src/DateMatcher.lhs darcs-2.0.2/src/DateMatcher.lhs +--- darcs-2.0.0/src/DateMatcher.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/DateMatcher.lhs 2008-06-24 01:23:12.000000000 +0000 +@@ -17,7 +17,10 @@ + + + \begin{code} +-module DateMatcher ( parseDateMatcher ) where ++{-# OPTIONS_GHC -fglasgow-exts #-} ++module DateMatcher ( parseDateMatcher ++ -- for debugging only ++ , DateMatcher(..), getMatchers ) where + + import Control.Exception ( catchJust, userErrors ) + import Data.Maybe ( isJust ) +@@ -28,7 +31,7 @@ + unsetTime, + ) + import Control.Monad ( liftM ) +-import Text.ParserCombinators.Parsec ( eof, parse ) ++import Text.ParserCombinators.Parsec ( eof, parse, ParseError ) + + -- note that we avoid comparing the fields ctYear, etc directly + -- because we want to avoid timezone-related issues (our +@@ -58,6 +61,9 @@ + (addToClockTime interval clockA) + (toClockTime calB) + where interval ++ | isJust (mctSec a) = second ++ | isJust (mctMin a) = minute ++ | isJust (mctHour a) = hour + | isJust (mctYDay a) = day + | mctWeek a = maybe week (const day) (mctWDay a) + | isJust (mctDay a) = day +@@ -67,31 +73,21 @@ + month = TimeDiff 0 1 0 0 0 0 0 + week = TimeDiff 0 0 7 0 0 0 0 + day = TimeDiff 0 0 1 0 0 0 0 ++ hour = TimeDiff 0 0 0 1 0 0 0 ++ minute = TimeDiff 0 0 0 0 1 0 0 ++ second = TimeDiff 0 0 0 0 0 1 0 + -- + clockA = toClockTime $ unsafeToCalendarTime a + calB = resetCalendar b_ + ++data DateMatcher = forall d . (Show d) => ++ DM String -- name ++ (Either ParseError d) -- parser ++ (d -> CalendarTime -> Bool) -- matcher ++ + parseDateMatcher :: String -> IO (CalendarTime -> Bool) + parseDateMatcher d = +- do rightNow <- now +- let midnightToday = unsetTime rightNow +- mRightNow = toMCalendarTime rightNow +- tzNow <- getLocalTz +- let -- note that the order of these is quite important as some matchers +- -- can match the same date. +- thingsToTry = +- [ tryOr (englishLast midnightToday) (\(a,_) -> cDateRange a rightNow) +- , tryOr (englishDateTime midnightToday) withinDay +- , tryOr (englishInterval rightNow) (uncurry cDateRange) +- , tryOr (iso8601_interval tzNow) matchIsoInterval +- , tryDateOr ] +- tryOr p m next = either (const next) m $ +- parse (tillEof p) "" d +- tryDateOr next = either (const next) (samePartialDate) $ +- parseDate tzNow d +- matchIsoInterval (Left dur) = dateRange (dur `subtractFromMCal` mRightNow) mRightNow +- matchIsoInterval (Right (a,b)) = dateRange a b +- let matcher = foldr ($) (error "Can't support fancy dates.") thingsToTry ++ do matcher <- tryMatchers `fmap` getMatchers d + -- Hack: test the matcher against the current date and discard the results. + -- We just want to make sure it won't throw any exceptions when we use it for real. + matcher `liftM` now >>= (`seq` return matcher) +@@ -103,7 +99,42 @@ + else error e + where + catchUserError = catchJust userErrors ++ ++getMatchers :: String -> IO [DateMatcher] ++getMatchers d = ++ do rightNow <- now ++ let midnightToday = unsetTime rightNow ++ mRightNow = toMCalendarTime rightNow ++ matchIsoInterval (Left dur) = dateRange (dur `subtractFromMCal` mRightNow) mRightNow ++ matchIsoInterval (Right (a,b)) = dateRange a b ++ tzNow <- getLocalTz ++ return -- note that the order of these is quite important as some matchers ++ -- can match the same date. ++ [ DM "from English date" ++ (parseDateWith $ englishLast midnightToday) ++ (\(a,_) -> cDateRange a rightNow) ++ , DM "specific English date" ++ (parseDateWith $ englishDateTime midnightToday) ++ withinDay ++ , DM "English interval" ++ (parseDateWith $ englishInterval rightNow) ++ (uncurry cDateRange) ++ , DM "ISO 8601 interval" ++ (parseDateWith $ iso8601_interval tzNow) ++ matchIsoInterval ++ , DM "CVS, ISO 8601, or old style date" ++ (parseDate tzNow d) ++ samePartialDate ] ++ where + tillEof p = do { x <- p; eof; return x } ++ parseDateWith p = parse (tillEof p) "" d ++ ++tryMatchers :: [DateMatcher] -> (CalendarTime -> Bool) ++tryMatchers (DM _ parsed matcher : ms) = ++ case parsed of ++ Left _ -> tryMatchers ms ++ Right d -> matcher d ++tryMatchers [] = error "Can't support fancy dates." + + now :: IO CalendarTime + now = getClockTime >>= toCalendarTime +diff -ruN darcs-2.0.0/src/DateTester.lhs darcs-2.0.2/src/DateTester.lhs +--- darcs-2.0.0/src/DateTester.lhs 1970-01-01 00:00:00.000000000 +0000 ++++ darcs-2.0.2/src/DateTester.lhs 2008-06-24 01:23:12.000000000 +0000 +@@ -0,0 +1,57 @@ ++% Copyright (C) 2008 Eric Kow ++% ++% This program is free software; you can redistribute it and/or modify ++% it under the terms of the GNU General Public License as published by ++% the Free Software Foundation; either version 2, or (at your option) ++% any later version. ++% ++% This program is distributed in the hope that it will be useful, ++% but WITHOUT ANY WARRANTY; without even the implied warranty of ++% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++% GNU General Public License for more details. ++% ++% You should have received a copy of the GNU General Public License ++% along with this program; see the file COPYING. If not, write to ++% the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ++% Boston, MA 02110-1301, USA. ++ ++To be loaded with GHCi ++ ++\begin{verbatim} ++make ghci ++Prelude>:l DateTester ++*DateTester>testDate "2008/05/22 10:34" ++*DateTester>testDateAt "2006-03-22 09:36" "2008/05/22 10:34" ++\end{verbatim} ++ ++You could also just compile it if you want, but I don't see ++the point. ++ ++\begin{code} ++module DateTester where ++ ++import DateMatcher ++import IsoDate ++import System.Time ++import System.IO.Unsafe ( unsafePerformIO ) ++ ++testDate :: String -> IO () ++testDate d = ++ do now <- getClockTime >>= toCalendarTime ++ testDateAtCal now d ++ ++testDateAt :: String -> String -> IO () ++testDateAt iso d = testDateAtCal (readUTCDate iso) d ++ ++testDateAtCal :: CalendarTime -> String -> IO () ++testDateAtCal c d = ++ do ms <- getMatchers d ++ putStr . unlines . map (showMatcher c) $ ms ++ ++showMatcher :: CalendarTime -> DateMatcher -> String ++showMatcher now (DM n p m) = ++ "==== " ++ n ++ " ====\n" ++ ++ (case p of ++ Left err -> shows err "" ++ Right x -> show x ++ "\n" ++ (show $ m x now)) ++\end{code} +diff -ruN darcs-2.0.0/src/English.lhs darcs-2.0.2/src/English.lhs +--- darcs-2.0.0/src/English.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/English.lhs 2008-06-24 01:23:12.000000000 +0000 +@@ -19,24 +19,26 @@ + \begin{code} + module English where + +-englishNum :: Nounlike n => Int -> n -> ShowS +-englishNum x = if x < 2 then singular else plural ++englishNum :: Numbered n => Int -> n -> ShowS ++englishNum x = if x == 1 then singular else plural + +-class Nounlike a where ++class Numbered a where + plural :: a -> ShowS + singular :: a -> ShowS + + newtype Noun = Noun String + +-instance Nounlike Noun where ++instance Numbered Noun where + plural (Noun "") = id ++ -- note that this is wrong! consider 'cat-es' and 'dog-es' ++ -- but it works for darcs 'patch-es' and 'change-s' + plural (Noun s) | last s == 'e' = showString s . showChar 's' + plural (Noun s) = showString s . showString "es" + singular (Noun s) = showString s + + data This = This Noun + +-instance Nounlike This where ++instance Numbered This where + plural (This s) = showString "these " . plural s + singular (This s) = showString "this " . singular s + \end{code} +diff -ruN darcs-2.0.0/src/Exec.lhs darcs-2.0.2/src/Exec.lhs +--- darcs-2.0.0/src/Exec.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Exec.lhs 2008-06-24 01:23:12.000000000 +0000 +@@ -17,8 +17,9 @@ + + + \begin{code} +-{-# OPTIONS -fffi -fglasgow-exts #-} ++{-# OPTIONS_GHC -cpp -fffi -fglasgow-exts #-} + module Exec ( exec, exec_interactive, ++ withoutNonBlock, + Redirects, Redirect(..), + ExecException(..) + ) where +@@ -28,11 +29,16 @@ + #ifndef WIN32 + import Control.Exception ( bracket ) + import System.Posix.Env ( setEnv, getEnv, unsetEnv ) +-import System.Posix.IO ( setFdOption, FdOption(..), stdInput ) ++import System.Posix.IO ( queryFdOption, setFdOption, FdOption(..), stdInput ) + import System.IO ( stdin ) ++#else ++import Control.Exception ( catchJust, Exception(IOException) ) ++-- WARNING: isInfixOf is not present in ghc 6.4.2! ++import Data.List ( isInfixOf ) + #endif + +-import System ( system, ExitCode (..) ) ++import System.Exit ( ExitCode (..) ) ++import System.Cmd ( system ) + import System.IO ( IOMode(..), openBinaryFile, stdout ) + import System.Process + import GHC.Handle ( hDuplicate ) +@@ -92,7 +98,7 @@ + h_stdout <- redirect out WriteMode + h_stderr <- redirect err WriteMode + -- putStrLn (unwords (cmd:args ++ map show [inp,out,err])) +- bracketOnError ++ withExit127 $ bracketOnError + (do whenDebugMode $ putStrLn $ unwords $ cmd:args ++ ["; #"] ++ map show [inp,out,err] + runProcess cmd args Nothing Nothing h_stdin h_stdout h_stderr) + (terminateProcess) +@@ -118,23 +124,56 @@ + exec_interactive cmd arg = do + let var = "DARCS_ARGUMENT" + stdin `seq` return () +- bracket +- (do setFdOption stdInput NonBlockingRead False +- oldval <- getEnv var ++ withoutNonBlock $ bracket ++ (do oldval <- getEnv var + setEnv var arg True + return oldval) + (\oldval -> +- do setFdOption stdInput NonBlockingRead True +- case oldval of ++ do case oldval of + Nothing -> unsetEnv var + Just val -> setEnv var val True) +- (\_ -> system $ cmd++" \"$"++var++"\"") ++ (\_ -> withExit127 $ system $ cmd++" \"$"++var++"\"") + + #else + + exec_interactive cmd arg = do + system $ cmd ++ " " ++ arg + #endif +-\end{code} + ++withoutNonBlock :: IO a -> IO a ++ ++#ifndef WIN32 ++{- ++Do IO without NonBlockingRead on stdInput. ++ ++This is needed when running unsuspecting external commands with interactive ++mode - if read from terminal is non-blocking also write to terminal is ++non-blocking. ++-} ++withoutNonBlock x = ++ do nb <- queryFdOption stdInput NonBlockingRead ++ if nb ++ then bracket ++ (do setFdOption stdInput NonBlockingRead False) ++ (\_ -> setFdOption stdInput NonBlockingRead True) ++ (\_ -> x) ++ else do x ++#else ++withoutNonBlock x = do x ++#endif ++ ++{- ++Ensure that we exit 127 if the thing we are trying to run does not exist ++(Only needed under Windows) ++-} ++withExit127 :: IO ExitCode -> IO ExitCode ++#ifdef WIN32 ++withExit127 a = catchJust notFoundError a (const $ return $ ExitFailure 127) + ++notFoundError :: Exception -> Maybe () ++notFoundError (IOException e) | "runProcess: does not exist" `isInfixOf` show e = Just () ++notFoundError _ = Nothing ++#else ++withExit127 = id ++#endif ++\end{code} +diff -ruN darcs-2.0.0/src/FastPackedString.hs darcs-2.0.2/src/FastPackedString.hs +--- darcs-2.0.0/src/FastPackedString.hs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/FastPackedString.hs 2008-06-24 01:23:12.000000000 +0000 +@@ -1,4 +1,4 @@ +-{-# OPTIONS -fffi -cpp #-} ++{-# OPTIONS_GHC -fffi -cpp #-} + ----------------------------------------------------------------------------- + -- | + -- Module : FastPackedString +@@ -58,7 +58,6 @@ + indexPSW, -- :: PackedString -> Int -> Word8 + reversePS, -- :: PackedString -> PackedString + concatPS, -- :: [PackedString] -> PackedString +- concatLenPS, -- :: Int -> [PackedString] -> PackedString + takePS, -- :: Int -> PackedString -> PackedString + dropPS, -- :: Int -> PackedString -> PackedString + splitAtPS, -- :: Int -> PackedString -> (PackedString, PackedString) +@@ -102,7 +101,7 @@ + import Foreign.Marshal.Array ( pokeArray, mallocArray, + peekArray, advancePtr ) + import Foreign.C.String +-import Foreign.C.Types ( CInt, ) ++import Foreign.C.Types ( CInt, CSize ) + import Data.Bits ( rotateL ) + import Data.Char + import Data.Word +@@ -115,7 +114,7 @@ + + import System.IO ( openBinaryFile, ) + +-import Foreign.Ptr ( nullPtr, plusPtr, minusPtr, Ptr ) ++import Foreign.Ptr ( nullPtr, plusPtr, Ptr ) + import Foreign.ForeignPtr( ForeignPtr, withForeignPtr ) + #if defined(__GLASGOW_HASKELL__) + import qualified Foreign.Concurrent as FC ( newForeignPtr ) +@@ -126,7 +125,8 @@ + import Foreign.ForeignPtr ( addForeignPtrFinalizer ) + import Foreign.Ptr ( FunPtr ) + #endif +-import qualified Data.ByteString.Char8 as B ++import qualified Data.ByteString as B ++import qualified Data.ByteString.Char8 as BC + import qualified Data.ByteString.Internal as BI + import qualified Data.ByteString.Unsafe as BU + +@@ -159,7 +159,7 @@ + + -- | A space-efficient representation of a 'String', which supports various + -- efficient operations. A 'PackedString' contains full Unicode 'Char's. +-type PackedString = B.ByteString ++type PackedString = BC.ByteString + + -- ----------------------------------------------------------------------------- + -- unsafeWithInternals +@@ -185,16 +185,17 @@ + -- Constructor functions + + nilPS :: PackedString +-nilPS = B.empty ++nilPS = BC.empty + + -- | Convert a 'String' into a 'PackedString' + packString :: String -> PackedString +-packString = B.pack ++packString = BC.pack ++ + packWords :: [Word8] -> PackedString + packWords s = createPS (length s) $ \p -> pokeArray p s + + withCStringPS :: PackedString -> (CString -> IO a) -> IO a +-withCStringPS = B.useAsCString ++withCStringPS = BC.useAsCString + + unsafeWithCStringLenPS :: PackedString -> ((CString, Int) -> IO a) -> IO a + unsafeWithCStringLenPS = BU.unsafeUseAsCStringLen +@@ -204,7 +205,7 @@ + + -- | Convert a 'PackedString' into a 'String' + unpackPS :: PackedString -> String +-unpackPS = B.unpack ++unpackPS = BC.unpack + + unpackPSfromUTF8 :: PackedString -> String + unpackPSfromUTF8 ps = +@@ -228,19 +229,19 @@ + + {-# INLINE lengthPS #-} + lengthPS :: PackedString -> Int +-lengthPS = B.length ++lengthPS = BC.length + + {-# INLINE indexPSW #-} + indexPSW :: PackedString -> Int -> Word8 +-indexPSW ps i = BI.c2w $ B.index ps i ++indexPSW ps i = BI.c2w $ BC.index ps i + + {-# INLINE indexPS #-} + indexPS :: PackedString -> Int -> Char +-indexPS p i = B.index p i ++indexPS p i = BC.index p i + + {-# INLINE lastPS #-} + lastPS :: PackedString -> Char +-lastPS = B.last ++lastPS = BC.last + + {-# INLINE ifHeadThenTail #-} + ifHeadThenTail :: Word8 -> PackedString -> Maybe PackedString +@@ -253,49 +254,49 @@ + + {-# INLINE headPS #-} + headPS :: PackedString -> Char +-headPS = B.head ++headPS = BC.head + + -- | Extract the elements after the head of a packed string, which must be non-empty. + {-# INLINE tailPS #-} + tailPS :: PackedString -> PackedString +-tailPS = B.tail ++tailPS = BC.tail + + -- | Return all the elements of a packed string except the last one. + -- The string must be finite and non-empty. + {-# INLINE initPS #-} + initPS :: PackedString -> PackedString +-initPS = B.init ++initPS = BC.init + + {-# INLINE nullPS #-} + nullPS :: PackedString -> Bool +-nullPS = B.null ++nullPS = BC.null + + appendPS :: PackedString -> PackedString -> PackedString +-appendPS = B.append ++appendPS = BC.append + + {-# INLINE takePS #-} + takePS :: Int -> PackedString -> PackedString +-takePS = B.take ++takePS = BC.take + + {-# INLINE dropPS #-} + dropPS :: Int -> PackedString -> PackedString +-dropPS = B.drop ++dropPS = BC.drop + + {-# INLINE splitAtPS #-} + splitAtPS :: Int -> PackedString -> (PackedString, PackedString) +-splitAtPS = B.splitAt ++splitAtPS = BC.splitAt + + -- This must be fast, it's used heavily in Printer. -- jch + anyPS :: (Char -> Bool) -> PackedString -> Bool +-anyPS = B.any ++anyPS = BC.any + + {-# INLINE takeWhilePS #-} + takeWhilePS :: (Char -> Bool) -> PackedString -> PackedString +-takeWhilePS = B.takeWhile ++takeWhilePS = BC.takeWhile + + {-# INLINE dropWhilePS #-} + dropWhilePS :: (Char -> Bool) -> PackedString -> PackedString +-dropWhilePS = B.dropWhile ++dropWhilePS = BC.dropWhile + + {-# INLINE dropWhitePS #-} + dropWhitePS :: PackedString -> PackedString +@@ -324,10 +325,10 @@ + :: Ptr Word8 -> CInt -> IO CInt + + spanEndPS :: (Char -> Bool) -> PackedString -> (PackedString, PackedString) +-spanEndPS = B.spanEnd ++spanEndPS = BC.spanEnd + + breakPS :: (Char -> Bool) -> PackedString -> (PackedString, PackedString) +-breakPS = B.break ++breakPS = BC.break + + {-# INLINE breakOnPS #-} + breakOnPS :: Char -> PackedString -> (PackedString, PackedString) +@@ -374,6 +375,8 @@ + then return (BI.fromForeignPtr x s l, nilPS) + else return (BI.fromForeignPtr x s i, BI.fromForeignPtr x (s+i) (l-i)) + ++-- TODO: replace breakFirstPS and breakLastPS with definitions based on ++-- ByteString's break/breakEnd + {-# INLINE breakFirstPS #-} + breakFirstPS :: Char -> PackedString -> Maybe (PackedString,PackedString) + breakFirstPS c p = case findPS c p of +@@ -386,67 +389,68 @@ + Nothing -> Nothing + Just n -> Just (takePS n p, dropPS (n+1) p) + +--- TODO: re-express in B.ByteString terms and rename ++-- TODO: rename + {-# INLINE linesPS #-} + linesPS :: PackedString -> [PackedString] +-linesPS ps = case wfindPS (BI.c2w '\n') ps of ++linesPS ps ++ | ps == BC.empty = [BC.pack ""] ++ | otherwise = BC.split '\n' ps ++{- QuickCheck property: ++ ++import Test.QuickCheck ++import qualified Data.ByteString.Char8 as BC ++import Data.Char ++instance Arbitrary BC.ByteString where ++ arbitrary = fmap BC.pack arbitrary ++instance Arbitrary Char where ++ arbitrary = chr `fmap` choose (32,127) ++deepCheck = check (defaultConfig { configMaxTest = 10000}) ++testLines = deepCheck (\x -> (linesPS x == linesPSOld x)) ++linesPSOld ps = case BC.elemIndex '\n' ps of + Nothing -> [ps] +- Just n -> takePS n ps : linesPS (dropPS (n+1) ps) ++ Just n -> takePS n ps : linesPS (dropPS (n+1) ps) -} + +--- TODO: rename +-unlinesPS :: [PackedString] -> PackedString +-unlinesPS = B.concat . L.intersperse newline +- where newline = packString "\n" ++{-| This function acts exactly like the "Prelude" unlines function, or like ++"Data.ByteString.Char8" 'unlines', but with one important difference: it will ++produce a string which may not end with a newline! That is: + +-reversePS :: PackedString -> PackedString +-reversePS = B.reverse ++> unlinesPS ["foo", "bar"] + +-concatPS :: [PackedString] -> PackedString +-concatPS = B.concat ++evaluates to \"foo\nbar\", not \"foo\nbar\n"! This point should hold true for ++'linesPS' as well. + +--- ----------------------------------------------------------------------------- +--- concatLenPS ++TODO: rename this function. -} ++{-# INLINE unlinesPS #-} ++unlinesPS :: [PackedString] -> PackedString ++unlinesPS [] = BC.empty ++unlinesPS x = BC.init $ BC.unlines x ++{- QuickCheck property: ++ ++testUnlines = deepCheck (\x -> (unlinesPS x == unlinesPSOld x)) ++unlinesPSOld ss = BC.concat $ intersperse_newlines ss ++ where intersperse_newlines (a:b:s) = a : newline : intersperse_newlines (b:s) ++ intersperse_newlines s = s ++ newline = BC.pack "\n" -} + +--- | Camse as concatPS only you tell it how big the result will be. +--- If you lie thenBad Things will happen. ++reversePS :: PackedString -> PackedString ++reversePS = BC.reverse + +-concatLenPS :: Int -> [PackedString] -> PackedString +-concatLenPS n [] = n `seq` nilPS +-concatLenPS _ [ps] = ps +-concatLenPS total_length pss = createPS total_length $ \p-> cpPSs p pss +- where cpPSs :: Ptr Word8 -> [PackedString] -> IO () +- cpPSs p (ps:rest) = +- case BI.toForeignPtr ps of +- (x,s,l) -> +- do withForeignPtr x $ \pf -> +- BI.memcpy p (pf `plusPtr` s) (fromIntegral l) +- cpPSs (p `plusPtr` l) rest +- cpPSs _ [] = return () ++concatPS :: [PackedString] -> PackedString ++concatPS = BC.concat + + {-# INLINE findPS #-} + findPS :: Char -> PackedString -> Maybe Int +-findPS = B.elemIndex +- +-{-# INLINE wfindPS #-} +-wfindPS :: Word8 -> PackedString -> Maybe Int +-wfindPS c ps = +- case BI.toForeignPtr ps of +- (x,s,l) -> +- unsafePerformIO $ withForeignPtr x $ \p-> +- do let p' = p `plusPtr` s +- q <- BI.memchr p' (fromIntegral c) (fromIntegral l) +- return $ if q == nullPtr then Nothing +- else Just (q `minusPtr` p') ++findPS = BC.elemIndex + + {-# INLINE findLastPS #-} + findLastPS :: Char -> PackedString -> Maybe Int +-findLastPS = B.elemIndexEnd ++findLastPS = BC.elemIndexEnd + + ------------------------------------------------------------ + + {-# INLINE splitPS #-} + splitPS :: Char -> PackedString -> [PackedString] +-splitPS = B.split ++splitPS = BC.split + + -- ----------------------------------------------------------------------------- + -- hPutPS +@@ -474,11 +478,11 @@ + -- ----------------------------------------------------------------------------- + -- hGetContentsPS + +--- | Read entire handle contents into a 'PackedString'. ++-- | Read entire handle contents into a 'PackedString'. Note that since we use strict ++-- ByteString, hGetContentsPS is not lazy either (unlike most 'getContents' functions). + -- + -- NOTE: as with 'hGetPS', the string representation in the file is + -- assumed to be ISO-8859-1. +- + hGetContentsPS :: Handle -> IO PackedString + hGetContentsPS = B.hGetContents -- ratify hGetContents: just a Data.ByteString import + +@@ -590,9 +594,9 @@ + + #if defined(__GLASGOW_HASKELL__) + foreign import ccall unsafe "static fpstring.h my_mmap" my_mmap +- :: CInt -> CInt -> IO (Ptr Word8) ++ :: CSize -> CInt -> IO (Ptr Word8) + foreign import ccall unsafe "static sys/mman.h munmap" c_munmap +- :: Ptr Word8 -> CInt -> IO CInt ++ :: Ptr Word8 -> CSize -> IO CInt + foreign import ccall unsafe "static unistd.h close" c_close + :: CInt -> IO CInt + #endif +@@ -646,7 +650,7 @@ + -- remainder of its input. + + readIntPS :: PackedString -> Maybe (Int, PackedString) +-readIntPS = B.readInt . B.dropWhile isSpace ++readIntPS = BC.readInt . BC.dropWhile isSpace + + -- ------------------------------------------------------------------------- + -- fromPS2Hex +diff -ruN darcs-2.0.0/src/FileSystem.hs darcs-2.0.2/src/FileSystem.hs +--- darcs-2.0.0/src/FileSystem.hs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/FileSystem.hs 2008-06-24 01:23:12.000000000 +0000 +@@ -1,3 +1,4 @@ ++{-# OPTIONS_GHC -cpp #-} + -- Copyright (C) 2004 Karel Gardas + -- + -- This program is free software; you can redistribute it and/or modify +diff -ruN darcs-2.0.0/src/fpstring.c darcs-2.0.2/src/fpstring.c +--- darcs-2.0.0/src/fpstring.c 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/fpstring.c 2008-06-24 01:23:12.000000000 +0000 +@@ -14,10 +14,11 @@ + * Fifth Floor, Boston, MA 02110-1301, USA. + * + */ ++#include "fpstring.h" ++ + #include + #include + #include +-#include + + #ifdef _WIN32 + #include +@@ -25,8 +26,6 @@ + #include + #endif + +-#include "fpstring.h" +- + /* A locale-independent isspace(3) so patches are interpreted the same + * everywhere. */ + #define ISSPACE(c) \ +@@ -54,10 +53,10 @@ + + int has_funky_char(const char *s, int len) + { +- /* We'll assume memchr(3) is faster than a simplistic loop that +- * checks each char against the two sought values, and NUL is more +- * likely than DOS's Ctrl-Z. */ +- return !!(memchr(s, 0, len) || memchr(s, 26, len)); ++ // We check first for the more likely \0 so we can break out of ++ // memchr that much sooner. ++ return !!(memchr(s, 0, len) || memchr(s, 26, len)); ++ + } + + // mmapping... +@@ -68,14 +67,9 @@ + * of mmap in FastPackedString. Most arguments are ignored... + */ + +-char *my_mmap(int length, int fd) ++char *my_mmap(size_t length, int fd) + { +- HANDLE file = (HANDLE)_get_osfhandle(fd); +- HANDLE hnd = CreateFileMapping(file, 0, PAGE_READONLY, 0, 0, 0); +- DWORD offhi = 0, offlo = 0; +- SIZE_T size = 0; +- char *p = MapViewOfFile(hnd, FILE_MAP_READ, offhi, offlo, size); +- return p; ++ exit(1); /* mmap is not implemented on Windows */ + } + + int munmap(void *start, size_t length) +@@ -85,7 +79,7 @@ + + #else + +-char *my_mmap(int len, int fd) { ++char *my_mmap(size_t len, int fd) { + void *maybeok = mmap(NULL, len, PROT_READ, MAP_SHARED, fd, 0); + if (maybeok == MAP_FAILED) return NULL; + else return (char *)maybeok; +diff -ruN darcs-2.0.0/src/fpstring.h darcs-2.0.2/src/fpstring.h +--- darcs-2.0.0/src/fpstring.h 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/fpstring.h 2008-06-24 01:23:12.000000000 +0000 +@@ -1,4 +1,5 @@ + #include ++#include + + int wfindps_helper(char c, const char *s, int len); + void debug_free(void *p); +@@ -8,7 +9,7 @@ + int first_nonwhite(const char *s, int len); + int has_funky_char(const char *s, int len); + +-char *my_mmap(int len, int fd); ++char *my_mmap(size_t len, int fd); + + int utf8_to_ints(HsInt *pwc, const unsigned char *s, int n); + +diff -ruN darcs-2.0.0/src/gitlib.c darcs-2.0.2/src/gitlib.c +--- darcs-2.0.0/src/gitlib.c 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/gitlib.c 1970-01-01 00:00:00.000000000 +0000 +@@ -1,480 +0,0 @@ +-/* +- Copyright (C) 2005 Juliusz Chroboczek +- +- This program is free software; you can redistribute it and/or modify +- it under the terms of the GNU General Public License as published by +- the Free Software Foundation; either version 2, or (at your option) +- any later version. +- +- This program is distributed in the hope that it will be useful, +- but WITHOUT ANY WARRANTY; without even the implied warranty of +- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- GNU General Public License for more details. +- +- You should have received a copy of the GNU General Public License +- along with this program; see the file COPYING. If not, write to +- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +- Boston, MA 02110-1301, USA. +-*/ +- +-#define _GNU_SOURCE +- +-#include +-#include +-#include +-#include +-#include +- +-#include "gitlib.h" +- +-struct git_file * +-git_read_file(const unsigned char *string) +-{ +- unsigned long length; +- unsigned char *data; +- unsigned char sha1[20]; +- char type[20]; +- struct git_file *retval; +- int rc; +- +- rc = get_sha1_hex(string, sha1); +- if(rc != 0) { +- fprintf(stderr, "Incorrect sha1 hash %s\n", string); +- return NULL; +- } +- +- data = read_sha1_file(sha1, type, &length); +- if(data == NULL) +- return NULL; +- +- retval = malloc(sizeof(struct git_file)); +- retval->data = data; +- retval->type = strdup(type); +- retval->length = length; +- return retval; +-} +- +-void +-git_file_done(struct git_file *f) +-{ +- free(f->data); +- free(f->type); +- free(f); +-} +- +-unsigned char * +-git_head(char *s) +-{ +- char buf[41]; +- int fd, rc; +- fd = open(s, O_RDONLY); +- if(fd < 0) { +- perror("open(head)"); +- return NULL; +- } +- +- rc = read(fd, buf, 41); +- if(rc < 41) { +- perror("read(head)"); +- return NULL; +- } +- if(buf[40] != '\n') +- return NULL; +- +- buf[40] = '\0'; +- +- return strdup(buf); +-} +- +-int +-git_update_head(char *name, char *head) +-{ +- int fd, rc; +- char buf[41]; +- +- if(strlen(head) != 40) { +- fprintf(stderr, "Attempt to write an incorrect head.\n"); +- return -1; +- } +- +- /* HEAD must be updated in-place in case it is a symlink. */ +- fd = open(name, O_CREAT | O_TRUNC | O_WRONLY, 0666); +- if(fd < 0) { +- perror("open(head)"); +- return -1; +- } +- +- strcpy(buf, head); +- buf[40] = '\n'; +- do { +- rc = write(fd, buf, 41); +- } while(rc < 0 && errno == EINTR); +- +- if(rc < 0) { +- close(fd); +- perror("write(head)"); +- return -1; +- } else if(rc != 41) { +- close(fd); +- fprintf(stderr, "write(head): partial write.\n"); +- return -1; +- } +- +- close(fd); +- return 1; +-} +- +-unsigned int +-git_default_file_mode(unsigned int treep) +-{ +- return treep ? S_IFDIR : 0100644; +-} +- +-int +-git_is_tree(unsigned int mode) +-{ +- return S_ISDIR(mode); +-} +- +-struct git_tree_iterator * +-git_tree_begin(unsigned char *data, unsigned long length) +-{ +- struct git_tree_iterator *iter; +- +- iter = malloc(sizeof(struct git_tree_iterator)); +- if(iter == NULL) +- return NULL; +- +- iter->data = data; +- iter->length = length; +- iter->offset = 0; +- return iter; +-} +- +-struct git_file_info * +-git_tree_next(struct git_tree_iterator *iter) +-{ +- int len, rc, path; +- unsigned char *ppath; +- struct git_file_info *info; +- +- if(iter->offset >= iter->length) +- return NULL; +- +- len = strlen(iter->data + iter->offset); +- ppath = strchr(iter->data + iter->offset, ' '); +- path = ppath - (iter->data + iter->offset) + 1; +- +- if(ppath == NULL || path < 2 || path > 15 || path >= len || +- iter->length < iter->offset + len + 20) { +- fprintf(stderr, "Corrupt Git tree file.\n"); +- return NULL; +- } +- +- info = malloc(sizeof(struct git_file_info)); +- if(info == NULL) { +- fprintf(stderr, "Couldn't malloc"); +- return NULL; +- } +- +- rc = sscanf(iter->data + iter->offset, "%o", &info->mode); +- if(rc != 1) { +- fprintf(stderr, "Corrupt Git tree file -- couldn't parse mode.\n"); +- return NULL; +- } +- +- info->name = malloc(len - path + 1); +- if(info->name == NULL) { +- fprintf(stderr, "Couldn't malloc"); +- return NULL; +- } +- memcpy(info->name, iter->data + iter->offset + path, len - path); +- info->name[len-path] = '\0'; +- +- memcpy(info->sha1, iter->data + iter->offset + len + 1, 20); +- iter->offset = iter->offset + len + 1 + 20; +- +- return info; +-} +- +-void +-git_file_info_done(struct git_file_info *info) +-{ +- free(info->name); +- free(info); +-} +- +-void +-git_tree_done(struct git_tree_iterator *iter) +-{ +- free(iter); +-} +- +-char * +-git_parse_time(unsigned long sec) +-{ +- char buf[100]; +- struct tm *tm; +- time_t time; +- size_t len; +- char *ret; +- +- time = sec; +- tm = gmtime(&time); +- len = strftime(buf, 100, "%Y%m%d%H%M%S", tm); +- ret = malloc(len + 1); +- memcpy(ret, buf, len); +- ret[len] = '\0'; +- return ret; +-} +- +-#if defined __GLIBC__ +-#define HAVE_TM_GMTOFF +-#ifndef __UCLIBC__ +-#define HAVE_TIMEGM +-#endif +-#define HAVE_SETENV +-#endif +- +-#ifdef BSD +-#define HAVE_TM_GMTOFF +-#define HAVE_SETENV +-#endif +- +-#ifdef __CYGWIN__ +-#define HAVE_SETENV +-#endif +- +-#define HAVE_TZSET +- +-/* Like mktime(3), but UTC rather than local time */ +-#if defined(HAVE_TIMEGM) +-time_t +-mktime_gmt(struct tm *tm) +-{ +- return timegm(tm); +-} +-#elif defined(HAVE_TM_GMTOFF) +-time_t +-mktime_gmt(struct tm *tm) +-{ +- time_t t; +- struct tm *ltm; +- +- t = mktime(tm); +- if(t < 0) +- return -1; +- ltm = localtime(&t); +- if(ltm == NULL) +- return -1; +- return t + ltm->tm_gmtoff; +-} +-#elif defined(HAVE_TZSET) +-#ifdef HAVE_SETENV +-/* Taken from the Linux timegm(3) man page. */ +-time_t +-mktime_gmt(struct tm *tm) +-{ +- time_t t; +- char *tz; +- +- tz = getenv("TZ"); +- setenv("TZ", "", 1); +- tzset(); +- t = mktime(tm); +- if(tz) +- setenv("TZ", tz, 1); +- else +- unsetenv("TZ"); +- tzset(); +- return t; +-} +-#else +-#error no mktime_gmt implementation on this platform +-#endif +-#error no mktime_gmt implementation on this platform +-#endif +- +-unsigned long +-git_format_time(char *string) +-{ +- struct tm tm; +- char *rc; +- +- rc = strptime(string, "%Y%m%d%H%M%S", &tm); +- if(rc == NULL) +- return 0; +- return mktime_gmt(&tm); +-} +- +-struct cache_entry * +-git_cache_entry(char *name) +-{ +- int pos, entries; +- +- if(active_cache == NULL) { +- entries = read_cache(); +- if(entries < 0) { +- fprintf(stderr, "Cannot read Git cache"); +- return NULL; +- } +- } +- +- if(active_cache == NULL) +- return NULL; +- +- while(name[0] == '.' && name[1] == '/') +- name += 2; +- +- pos = cache_name_pos(name, strlen(name)); +- if(pos < 0) +- return NULL; +- +- return active_cache[pos]; +-} +- +-unsigned char * +-git_cache_entry_sha1(struct cache_entry *entry) +-{ +- return entry->sha1; +-} +- +-unsigned int +-git_cache_entry_size(struct cache_entry *entry) +-{ +- return ntohl(entry->ce_size); +-} +- +-unsigned int +-git_cache_entry_mtime(struct cache_entry *entry) +-{ +- return ntohl(entry->ce_mtime.sec); +-} +- +-int +-git_validate(char *string, char *sha_b, int n) +-{ +- int rc; +- char sha_a[20]; +- +- rc = get_sha1_hex(string, sha_a); +- if(rc != 0) { +- fprintf(stderr, "Incorrect sha1 hash %s\n", string); +- return -1; +- } +- rc = memcmp(sha_a, sha_b, 20); +- return rc == 0; +-} +- +-struct git_file_info * +-git_write_file(char *type, char *name, unsigned mode, +- char *contents, unsigned int length) +-{ +- int rc; +- char sha1[20]; +- struct git_file_info *info; +- +- rc = write_sha1_file(contents, length, type, sha1); +- +- if(rc < 0) { +- fprintf(stderr, "Couldn't write Git file.\n"); +- return NULL; +- } +- +- info = malloc(sizeof(struct git_file_info)); +- if(info == NULL) +- return NULL; +- +- info->mode = mode; +- info->name = strdup(name); +- memcpy(info->sha1, sha1, 20); +- return info; +-} +- +-struct git_write_iterator * +-git_write_tree_begin() +-{ +- struct git_write_iterator *iter; +- +- iter = malloc(sizeof(struct git_write_iterator)); +- if(iter == NULL) +- return NULL; +- +- iter->count = 0; +- iter->size = 2048; +- iter->elts = malloc(iter->size * sizeof(struct git_tree_element)); +- if(iter->elts == NULL) { +- free(iter); +- return NULL; +- } +- +- return iter; +-} +- +-int +-git_write_tree_next(struct git_write_iterator *iter, +- char *name, unsigned mode, char *sha1_s) +-{ +- struct git_file_info *info; +- int rc; +- +- if(iter->count >= iter->size) { +- fprintf(stderr, "Sorry, only %d files in a Git tree.\n", iter->size); +- return -1; +- } +- +- iter->elts[iter->count].name = strdup(name); +- iter->elts[iter->count].mode = mode; +- rc = get_sha1_hex(sha1_s, iter->elts[iter->count].sha1); +- if(rc < 0) { +- fprintf(stderr, "Couldn't parse SHA1 string.\n"); +- return -1; +- } +- iter->count++; +- return 0; +-} +- +-struct git_file_info * +-git_write_tree_done(struct git_write_iterator *iter, char *name, unsigned mode) +-{ +- struct git_file_info *info; +- char *buffer, sha1[20]; +- int i, j, k, l; +- +- l = 0; +- for(i = 0; i < iter->count; i++) +- l += strlen(iter->elts[i].name) + 20 + 20; +- l += 200; +- +- buffer = malloc(l); +- if(buffer == NULL) +- return NULL; +- +- j = 0; +- for(i = 0; i < iter->count; i++) { +- j += sprintf(buffer + j, "%o %s", +- iter->elts[i].mode, +- iter->elts[i].name); +- j++; +- memcpy(buffer + j, iter->elts[i].sha1, 20); +- j += 20; +- } +- +- write_sha1_file(buffer, j, "tree", sha1); +- free(buffer); +- +- for(i = 0; i < iter->count; i++) +- free(iter->elts[i].name); +- free(iter->elts); +- free(iter); +- +- info = malloc(sizeof(struct git_file_info)); +- if(info == NULL) +- return NULL; +- +- info->mode = mode; +- info->name = strdup(name); +- memcpy(info->sha1, sha1, 20); +- +- return info; +-} +diff -ruN darcs-2.0.0/src/gitlib.h.in darcs-2.0.2/src/gitlib.h.in +--- darcs-2.0.0/src/gitlib.h.in 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/gitlib.h.in 1970-01-01 00:00:00.000000000 +0000 +@@ -1,84 +0,0 @@ +-/* +- Copyright (C) 2005 Juliusz Chroboczek +- +- This program is free software; you can redistribute it and/or modify +- it under the terms of the GNU General Public License as published by +- the Free Software Foundation; either version 2, or (at your option) +- any later version. +- +- This program is distributed in the hope that it will be useful, +- but WITHOUT ANY WARRANTY; without even the implied warranty of +- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- GNU General Public License for more details. +- +- You should have received a copy of the GNU General Public License +- along with this program; see the file COPYING. If not, write to +- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +- Boston, MA 02110-1301, USA. +-*/ +- +-@SHA_HEADER_DEFINE@ +- +-#include "cache.h" +- +-struct git_file { +- unsigned char *data; +- char *type; +- unsigned long length; +-}; +- +-struct git_file_info { +- unsigned int mode; +- char *name; +- unsigned char sha1[20]; +-}; +- +-struct git_tree_iterator { +- unsigned char *data; +- unsigned long length; +- unsigned long offset; +-}; +- +-struct git_tree_element { +- char *name; +- unsigned mode; +- char sha1[20]; +-}; +- +-struct git_write_iterator { +- int count; +- int size; +- struct git_tree_element *elts; +-}; +- +-struct git_file *git_read_file(const unsigned char *sha1); +-void git_file_done(struct git_file *f); +-unsigned char *git_head(char *); +-int git_update_head(char*, char *); +- +-void git_file_info_done(struct git_file_info *info); +-unsigned int git_default_file_mode(unsigned int treep); +-int git_is_tree(unsigned int mode); +- +-struct git_tree_iterator * +-git_tree_begin(unsigned char *data, unsigned long length); +-struct git_file_info *git_tree_next(struct git_tree_iterator *iter); +-void git_tree_done(struct git_tree_iterator *iter); +-char *git_parse_time(unsigned long sec); +-unsigned long git_format_time(char *string); +- +-unsigned char *git_cache_entry_sha1(struct cache_entry *entry); +-unsigned int git_cache_entry_size(struct cache_entry *entry); +-unsigned int git_cache_entry_mtime(struct cache_entry *entry); +-struct cache_entry *git_cache_entry(char *name); +- +-int git_validate(char *string, char *sha_b, int n); +- +-struct git_file_info * +-git_write_file(char *type, char *name, unsigned mode, +- char *contents, unsigned int length); +-struct git_write_iterator *git_write_tree_begin(void); +-int git_write_tree_next(struct git_write_iterator *iter, +- char *name, unsigned mode, char *sha1_s); +-struct git_file_info *git_write_tree_done(struct git_write_iterator *iter, +- char *name, unsigned mode); +diff -ruN darcs-2.0.0/src/hscurl.c darcs-2.0.2/src/hscurl.c +--- darcs-2.0.0/src/hscurl.c 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/hscurl.c 2008-06-24 01:23:12.000000000 +0000 +@@ -1,3 +1,5 @@ ++#ifdef HAVE_CURL ++ + #include "hscurl.h" + + #include +@@ -134,7 +136,7 @@ + if (easy == NULL) + return error_strings[RESULT_EASY_INIT_FAIL]; + +-#if 0 ++#ifdef CURL_DEBUG + error = curl_easy_setopt(easy, CURLOPT_VERBOSE, 1); + if (error != CURLE_OK) + return curl_easy_strerror(error); +@@ -254,7 +256,7 @@ + CURL *easy = msg->easy_handle; + CURLcode result = msg->data.result; + struct UrlData *url_data; +- int error = curl_easy_getinfo(easy, CURLINFO_PRIVATE, &url_data); ++ int error = curl_easy_getinfo(easy, CURLINFO_PRIVATE, (char **)&url_data); + if (error != CURLE_OK) + return curl_easy_strerror(error); + +@@ -281,3 +283,5 @@ + { + return last_url != NULL ? last_url : ""; + } ++ ++#endif +diff -ruN darcs-2.0.0/src/hslibwww.c darcs-2.0.2/src/hslibwww.c +--- darcs-2.0.0/src/hslibwww.c 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/hslibwww.c 2008-06-24 01:23:12.000000000 +0000 +@@ -1,3 +1,5 @@ ++#ifdef HAVE_LIBWWW ++ + #include "hslibwww.h" + + #include +@@ -89,7 +91,7 @@ + HTProxy_getEnvVar(); + HTAlert_setInteractive(NO); + HTFormat_addCoding("*", NULL, HTIdentityCoding, 1.0); +-#if 0 ++#ifdef LIBWWW_DEBUG + HTSetTraceMessageMask("sop"); + #endif + init_done = YES; +@@ -173,3 +175,5 @@ + { + return last_url != NULL ? last_url : ""; + } ++ ++#endif +diff -ruN darcs-2.0.0/src/HTTP.hs darcs-2.0.2/src/HTTP.hs +--- darcs-2.0.0/src/HTTP.hs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/HTTP.hs 2008-06-24 01:23:12.000000000 +0000 +@@ -1,3 +1,4 @@ ++{-# OPTIONS_GHC -cpp #-} + module HTTP(copyUrl,fetchUrl,postUrl,exists) where + + #ifdef HAVE_HTTP +diff -ruN darcs-2.0.0/src/IsoDate.lhs darcs-2.0.2/src/IsoDate.lhs +--- darcs-2.0.0/src/IsoDate.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/IsoDate.lhs 2008-06-24 01:23:12.000000000 +0000 +@@ -61,10 +61,10 @@ + readDate :: Int -> String -> CalendarTime + readDate tz d = + case parseDate tz d of +- Left e -> error e ++ Left e -> error $ "bad date: "++d++" - "++show e + Right ct -> resetCalendar $ unsafeToCalendarTime ct + +-parseDate :: Int -> String -> Either String MCalendarTime ++parseDate :: Int -> String -> Either ParseError MCalendarTime + parseDate tz d = + if length d >= 14 && and (map isDigit $ take 14 d) + then Right $ toMCalendarTime $ +@@ -77,9 +77,7 @@ + 0 Sunday 0 -- Picosecond, weekday and day of year unknown + "GMT" 0 False + else let dt = do { x <- date_time tz; eof; return x } +- in case parse dt "" d of +- Left e -> Left $ "bad date: "++d++" - "++show e +- Right ct -> Right ct ++ in parse dt "" d + + showIsoDateTime :: CalendarTime -> String + showIsoDateTime ct = concat [ show $ ctYear ct +@@ -467,7 +465,7 @@ + do caseString "before" + space + end <- englishDT +- return (unsafeToCalendarTime nullMCalendar, end) ++ return (theBeginning, end) + after = try $ + do caseString "after" + space +@@ -536,6 +534,9 @@ + + ----- Calendar and TimeDiff manipulation --------------------------------------------- + ++theBeginning :: CalendarTime ++theBeginning = unsafePerformIO $ toCalendarTime $ TOD 0 0 ++ + -- | See 'System.Time.CalendarTime', but note the following new fields: + -- 'mctWeek' + data MCalendarTime = MCalendarTime +diff -ruN darcs-2.0.0/src/Lcs.lhs darcs-2.0.2/src/Lcs.lhs +--- darcs-2.0.0/src/Lcs.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Lcs.lhs 2008-06-24 01:23:12.000000000 +0000 +@@ -31,6 +31,7 @@ + GNU diff with the -d option in this regard. + + \begin{code} ++{-# OPTIONS_GHC -cpp #-} + module Lcs ( getChanges, aLen, + BArray, PArray, BSTArray, + shiftBoundaries ) where +@@ -64,90 +65,96 @@ + -- has to be replaced by b[startb, limb) + getChanges :: [PackedString] -> [PackedString] + -> [(Int,[PackedString],[PackedString])] +-getChanges a b = dropStart a b nilPS 0 ++getChanges a b = dropStart (initP a) (initP b) 1 + +--- | keep one identical line at beginning (see 4th testcase for shiftBoundaries) +-dropStart :: [PackedString] -> [PackedString] -> PackedString -> Int ++dropStart :: PArray -> PArray -> Int + -> [(Int,[PackedString],[PackedString])] +-dropStart [] [] _ _ = [] +-dropStart [] b _ off = [(off,[],b)] +-dropStart a [] _ off = [(off,a,[])] +-dropStart a@(x:xs) b@(y:ys) lastdropped off = +- if x == y then dropStart xs ys x (off + 1) +- else let a0 = reverse $ if off > 0 then (lastdropped:a) else a +- b0 = reverse $ if off > 0 then (lastdropped:b) else b +- off0 = if off > 0 then off-1 else 0 +- (a',b') = dropEnd a0 b0 Nothing in +- getChanges' a' b' off0 +- +--- | keep one identical line at the end +-dropEnd :: [PackedString] -> [PackedString] -> Maybe PackedString +- -> ([PackedString],[PackedString]) +-dropEnd [] b _ = ([],reverse b) +-dropEnd a [] _ = (reverse a,[]) +-dropEnd a@(x:xs) b@(y:ys) lastdropped +- | x == y = dropEnd xs ys (Just x) +- | otherwise = (reverse a', reverse b') +- where (a',b') = case lastdropped of +- Just s -> (s:a,s:b) +- Nothing -> (a,b) ++dropStart a b off ++ | off > (aLen a) = [(off - 1, [], getSlice b off (aLen b))] ++ | off > (aLen b) = [(off - 1, getSlice a off (aLen a), [])] ++ | a!off == b!off = dropStart a b (off + 1) ++ | otherwise = dropEnd a b off 0 ++ ++dropEnd :: PArray -> PArray -> Int -> Int ++ -> [(Int,[PackedString],[PackedString])] ++dropEnd a b off end ++ | off > alast = [(off - 1, [], getSlice b off blast)] ++ | off > blast = [(off - 1, getSlice a off alast, [])] ++ | a!alast == b!blast = dropEnd a b off (end + 1) ++ | otherwise = getChanges' (a, (off, alast)) (b, (off, blast)) ++ where alast = aLen a - end ++ blast = aLen b - end ++ ++getSlice :: PArray -> Int -> Int -> [PackedString] ++getSlice a from to ++ | from > to = [] ++ | otherwise = (a!(from)):(getSlice a (from + 1) to) + +-getChanges' :: [PackedString] -> [PackedString] -> Int ++getChanges' :: (PArray, (Int, Int)) -> (PArray, (Int, Int)) + -> [(Int,[PackedString],[PackedString])] +-getChanges' [] [] _ = [] +-getChanges' [] b off = [(off,[],b)] +-getChanges' a [] off = [(off,a,[])] +-getChanges' a b offset = map (convertPatch offset p_a p_b) $ createPatch c_a c_b +- where toHash = map hashPS +- a0 = toHash a +- b0 = toHash b +- p_a = initP a +- p_b = initP b +- a'= catMaybes $ map get (zip a0 [1..]) +- b'= catMaybes $ map get (zip b0 [1..]) +- (c_a, c_b) = diffArr a' b' p_a p_b +- -- take care of collisions, if there are different lines with the same +- -- hash, then set the hash to 0, for two lines with the hash 0 the +- -- PackedStrings are compared +- get (h,i) = case Map.lookup h hm of +- Just (False,0,_,_) -> Nothing +- Just (False,_,0,_) -> Nothing +- Just (False,_,_,_) -> Just (i,h) +- Just (True,_,_,_) -> Just (i,markColl) ++getChanges' (a, abounds) (b, bbounds) = ++ map (convertPatch 0 a b) $ createPatch c_a c_b ++ where toHash x bnds = listArray bnds [ hashPS $ x!i | i <- range bnds] ++ ah = toHash a abounds :: HArray ++ mkAMap m (i:is) = ++ let ins (_,_,_,new) (collision,_,_,old) = ++ (collision || not (new == old), True, False, old) ++ m' = Map.insertWith ins (ah!i) (False, True, False, a!i) m ++ in mkAMap m' is ++ mkAMap m _ = m ++ hm_a = mkAMap Map.empty (range abounds) ++ -- ++ bh = toHash b bbounds :: HArray ++ mkBMap m (i:is) = ++ let ins (_,_,_,new) (collision,in_a,_,old) = ++ (collision || not (new == old), in_a, True, old) ++ m' = Map.insertWith ins (bh!i) (False, False, True, b!i) m ++ in mkBMap m' is ++ mkBMap m _ = m ++ hm = mkBMap hm_a (range bbounds) ++ -- take care of collisions, if there are different lines with the ++ -- same hash in both files, then set the hash to markColl, ++ -- PackedStrings are compared for two lines with the hash markColl ++ get (i, h) = case Map.lookup h hm of ++ Just (_,False,_,_) -> Nothing ++ Just (_,_,False,_) -> Nothing ++ Just (False,True,True,_) -> Just (i, h) ++ Just (True,True,True,_) -> Just (i, markColl) + Nothing -> impossible +- mkMap (p:ps) (h:hs) m isa = +- let ins (_,_,_,new) (coll,ac,bc,old) = +- let (ac',bc') = if isa then (ac+1,bc) else (ac,bc+1) in +- if new == old && not coll +- then (False, ac',bc', old) +- else (True, ac',bc', old) +- (ainit,binit) = if isa then (1::Int,0::Int) else (0,1) +- m' = Map.insertWith ins h (False,ainit,binit,p) m +- in mkMap ps hs m' isa +- mkMap _ _ m _ = m +- hm0 = mkMap b b0 Map.empty False +- hm = mkMap a a0 hm0 True ++ ++ a' = catMaybes $ map get [(i, ah!i) | i <- range (bounds ah)] ++ b' = catMaybes $ map get [(i, bh!i) | i <- range (bounds bh)] ++ ++ (c_a, c_b) = diffArr a' b' (a, abounds) (b, bbounds) + + -- | mark hash value where collision occured + markColl :: Int32 + markColl = 2345677 + + -- | return arrays with changes in a and b (1 indexed), offsets start with 0 +-diffArr :: [(Int,Int32)] -> [(Int,Int32)] -> PArray -> PArray ++diffArr :: [(Int,Int32)] -> [(Int,Int32)] ++ -> (PArray, (Int, Int)) -> (PArray, (Int, Int)) + -> (BArray, BArray) +-diffArr a b p_a p_b = runST ( ++diffArr a b (p_a, (off_a, l_a)) (p_b, (off_b, l_b)) = runST ( + do let h_a = initH (map snd a) + h_b = initH (map snd b) + m_a = initM (map fst a) + m_b = initM (map fst b) +- c_a <- initVChanged $ (aLen p_a) +- c_b <- initVChanged $ (aLen p_b) ++ end_a = (aLen p_a) ++ end_b = (aLen p_b) ++ c_a <- initVChanged end_a ++ c_b <- initVChanged end_b + mapM_ (\ (l,_) -> writeArray c_a l False) $ a + mapM_ (\ (l,_) -> writeArray c_b l False) $ b + _ <- cmpseq h_a h_b p_a p_b m_a m_b c_a c_b 0 0 (aLen h_a) (aLen h_b) + let unchanged ar = do {xs <- getElems ar; return $ (length $ filter not $ xs) -1} + err <- liftM2 (/=) (unchanged c_a) (unchanged c_b) + when (err) impossible ++ -- Mark common lines at beginning and end ++ mapM_ (\ i -> writeArray c_a i False ) $ [1..(off_a - 1)] ++ mapM_ (\ i -> writeArray c_b i False ) $ [1..(off_b - 1)] ++ mapM_ (\ i -> writeArray c_a i False ) $ [(l_a + 1) .. (end_a)] ++ mapM_ (\ i -> writeArray c_b i False ) $ [(l_b + 1) .. (end_b)] + shiftBoundaries c_a c_b p_a 1 1 + shiftBoundaries c_b c_a p_b 1 1 + err1 <- liftM2 (/=) (unchanged c_a) (unchanged c_b) +@@ -223,18 +230,18 @@ + findF = findF' fdmax + findR = findR' rdmax + findF' d = do x <- findOne h_a h_b p_a p_b m_a m_b v d off_a off_b l_a l_b +- if dodd && (d - del >= lastrdmin) && (d - del <= lastrdmax) ++ if dodd && d - del >= lastrdmin && d - del <= lastrdmax + then do xr <- readArray vrev (d - del) + if xr <= x then return $ Just (x, x - d) +- else if d <= fdmin then return Nothing +- else findF' (d-2) ++ else if d <= fdmin then return Nothing ++ else findF' (d-2) + else if d <= fdmin then return Nothing else findF' (d-2) + findR' d = do x <- findOneRev h_a h_b p_a p_b m_a m_b vrev d del off_a off_b + if not dodd && (d + del >= fdmin) && (d + del <= fdmax) + then do xf <- readArray v (d + del) + if x <= xf then return $ Just (x,x-del-d) +- else if d <= rdmin then return Nothing +- else findR' (d-2) ++ else if d <= rdmin then return Nothing ++ else findR' (d-2) + else if d <= rdmin then return Nothing else findR' (d-2) + + -- | find position on diag d with one more insert/delete going forward +@@ -254,9 +261,8 @@ + findSnake :: HArray -> HArray -> PArray -> PArray -> MapArray -> MapArray + -> Int -> Int -> Int -> Int -> Int -> Int -> Int + findSnake h_a h_b p_a p_b m_a m_b x y l_a l_b off_a off_b = +- if (x < l_a + off_a) && (y < l_b + off_b) && (h_a!(x+1) == h_b!(y+1)) +- && (h_a!(x+1) /= markColl +- || p_a!(m_a!(x+1)) == p_b!(m_b!(y+1))) ++ if x < l_a + off_a && y < l_b + off_b && h_a!(x+1) == h_b!(y+1) ++ && (h_a!(x+1) /= markColl || p_a!(m_a!(x+1)) == p_b!(m_b!(y+1))) + then findSnake h_a h_b p_a p_b m_a m_b (x + 1) (y + 1) l_a l_b off_a off_b + else x + +@@ -277,7 +283,7 @@ + findSnakeRev :: HArray -> HArray -> PArray -> PArray -> MapArray -> MapArray + -> Int -> Int -> Int -> Int -> Int + findSnakeRev h_a h_b p_a p_b m_a m_b x y off_a off_b = +- if (x > off_a) && (y > off_b) && (h_a!x == h_b!y) ++ if x > off_a && y > off_b && h_a!x == h_b!y + && (h_a!x /= markColl || p_a!(m_a!x) == p_b!(m_b!y)) + then findSnakeRev h_a h_b p_a p_b m_a m_b (x - 1) (y - 1) off_a off_b + else x +@@ -305,16 +311,17 @@ + b <- if j0 > 1 then readArray c_b (j0-1) else return False + let corr = if b then i0 else noline + let blank = if p_a!(i0-1) == nilPS then i0 +- else noline ++ else noline + (start1,i1,j1,corr1,blank1) <- shiftForward start0 i0 j0 corr blank + -- prefer corresponding to ending with blank line + let newi = if corr1 == noline then blank1 +- else corr1 ++ else corr1 + (start2,i2,j2) <- moveCorr start1 i1 j1 newi +- if (len /= i2 - start2) then expand start2 i2 j2 ++ if len /= i2 - start2 ++ then expand start2 i2 j2 + else return (i2, j2) + shiftBackward start i j = +- if (start > 1) && (p_a!(i-1) == p_a!(start-1)) ++ if start > 1 && p_a!(i-1) == p_a!(start-1) + then do when (i == start) impossible + b1 <- readArray c_a (i-1) + b2 <- readArray c_a (start-1) +@@ -322,15 +329,16 @@ + writeArray c_a (i-1) False + writeArray c_a (start-1) True + b <- if start > 2 then readArray c_a (start-2) +- else return False +- start' <- if b +- then liftM (1+) (prevUnchanged c_a (start-2)) +- else return (start-1) ++ else return False ++ start' <- if b then liftM (1+) (prevUnchanged c_a (start-2)) ++ else return (start-1) + j' <- prevUnchanged c_b (j-1) + shiftBackward start' (i-1) j' + else do return (start,i,j) + shiftForward start i j corr blank = +- if (i <= aLen p_a) && (p_a!i == p_a!start) ++ if i <= aLen p_a && p_a!i == p_a!start && ++ -- nilPS at the end of file marks empty line after final newline ++ not ((i == aLen p_a) && (p_a!i == nilPS)) + then do when (i == start) impossible + b1 <- readArray c_a i + b2 <- readArray c_a start +@@ -340,14 +348,15 @@ + i0 <- nextUnchanged c_a (i+1) + j0 <- nextUnchanged c_b (j+1) + let corr0 = if i0 > (i+1) then noline +- else if (j0-j) > 2 then i0 else corr +- let blank0 = if i0 > (i+1) then noline ++ else if j0-j > 2 then i0 else corr ++ let blank0 = if i0 > i+1 then noline + else if p_a!(i0-1) == nilPS then i0 +- else blank ++ else blank + shiftForward (start+1) i0 j0 corr0 blank0 + else do return (start,i,j,corr,blank) + moveCorr start i j corr = +- if (corr >= i) then return (start,i,j) ++ if corr >= i ++ then return (start,i,j) + else do b1 <- readArray c_a (i-1) + b2 <- readArray c_a (start-1) + when ((not b1) || b2) impossible +@@ -364,24 +373,25 @@ + if i == len + 1 then return i + else do b <- readArray c i + if b then nextUnchanged c (i+1) +- else return i ++ else return i + + -- | skip at least one unchanged line, if there is none advance + -- behind the last line + skipOneUnChanged :: BSTArray s -> Int -> ST s Int + skipOneUnChanged c i = do + len <- aLenM c +- if i == len + 1 then return i ++ if i == len + 1 ++ then return i + else do b <- readArray c i + if not b then return (i+1) +- else skipOneUnChanged c (i+1) ++ else skipOneUnChanged c (i+1) + + -- | goto n-th next unchanged line + nextUnchangedN :: BSTArray s -> Int -> Int -> ST s Int + nextUnchangedN c n i = do + if n == 0 then return i +- else do i' <- skipOneUnChanged c i +- nextUnchangedN c (n-1) i' ++ else do i' <- skipOneUnChanged c i ++ nextUnchangedN c (n-1) i' + + -- | goto next changed line, return the given line if changed + nextChanged :: BSTArray s -> Int -> ST s (Maybe Int) +@@ -390,7 +400,7 @@ + if i <= len + then do b <- readArray c i + if not b then nextChanged c (i+1) +- else return $ Just i ++ else return $ Just i + else return Nothing + + -- | goto previous unchanged line, return the given line if unchanged +@@ -398,7 +408,7 @@ + prevUnchanged c i = do + b <- readArray c i + if b then prevUnchanged c (i-1) +- else return i ++ else return i + \end{code} + + \begin{code} +@@ -472,12 +482,12 @@ + createP :: BArray -> BArray -> Int -> Int -> [(Int, Int, Int, Int)] + createP _ _ 0 0 = [] + createP c_a c_b ia ib = +- if (c_a!ia) || (c_b!ib) ++ if c_a!ia || c_b!ib + then let ia' = skipChangedRev c_a ia + ib' = skipChangedRev c_b ib + in (ia',ia,ib',ib):(createP c_a c_b ia' ib') + else createP c_a c_b (ia-1) (ib-1) + + skipChangedRev :: BArray -> Int -> Int +-skipChangedRev c i = if (i >= 0) && (c!i) then skipChangedRev c (i-1) else i ++skipChangedRev c i = if i >= 0 && c!i then skipChangedRev c (i-1) else i + \end{code} +diff -ruN darcs-2.0.0/src/list_authors.hs darcs-2.0.2/src/list_authors.hs +--- darcs-2.0.0/src/list_authors.hs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/list_authors.hs 2008-06-24 01:23:12.000000000 +0000 +@@ -54,13 +54,17 @@ + droundy = "David Roundy " + + -- contributers with more than 2 addresses +-marnix_klooster, eric_kow, andres_loeh, ++gwern_branwen, ++ marnix_klooster, eric_kow, andres_loeh, ++ pekka_pessi, + erik_schnetter, edwin_thomson, mark_stosberg, + thomas_zander, tomasz_zielonka, lele_gaifax :: String + marnix_klooster = "Marnix Klooster " + eric_kow = "Eric Kow " + andres_loeh = "Andres Loeh " + erik_schnetter = "Erik Schnetter " ++gwern_branwen = "Gwern Branwen " ++pekka_pessi = "Pekka Pessi " + mark_stosberg = "Mark Stosberg " + edwin_thomson = "Edwin Thomson " + thomas_zander = "Thomas Zander " +@@ -78,6 +82,7 @@ + , ("andrew@pimlott.net" , "Andrew Pimlott") + , ("andrew@siaris.net" , "Andrew L Johnson") + , ("aoiko@cc.ece.ntua.gr" , "Aggelos Economopoulos") ++ , ("benjamin.franksen@bessy.de", "Benjamin Franksen") + , ("brian@brianweb.net" , "Brian Alliet") + , ("chevalier@alum.wellesley.edu", "Kirsten Chevalier") + , ("chucky@dtek.chalmers.se" , "Anders Hockersten") +@@ -91,7 +96,6 @@ + , ("forge@dr.ea.ms" , "Andrew J. Kroll") + , ("fw@deneb.enyo.de" , "Florian Weimer") + , ("glaweh@physik.fu-berlin.de", "Henning Glawe") +- , ("gwern0@gmail.com" , "Gwern Branwen") + , ("ijones@debian.org" , "Isaac Jones") + , ("jan@informatik.unibw-muenchen.de", "Jan Scheffczyk") + , ("janbraun@gmx.net" , "Jan Braun") +@@ -104,6 +108,7 @@ + , ("lord@crocodile.org" , "Vadim Zaliva") + , ("malebria@riseup.net" , "Marco Tulio Gontijo e Silva") + , ("me@JonathonMah.com" , "Jonathon Mah") ++ , ("me@mornfall.net" , "Peter Rockai") + , ("naesten@myrealbox.com" , "Samuel Bronson") + , ("nicolas.pouillard@gmail.com" , "Nicolas Pouillard") + , ("nils@ndecker.de" , "Nils Decker") +@@ -125,6 +130,7 @@ + , ("sreindl@triobit.de" , "Stephen Reindl") + , ("thies@thieso.net" , "Thies C. Arntzen") + , ("thomas_bevan@toll.com.au", "Thomas L. Bevan") ++ , ("tux_rocker@reinier.de" , "Reinier Lamers") + , ("trivee@noir.crocodile.org", "Vladimir Vysotsky") + , ("v.haisman@sh.cvut.cz" , "Vaclav Haisman") + , ("vborja@thehatcher.com" , "Victor Hugo Borja Rodriguez") +@@ -140,6 +146,7 @@ + canonize_author "mail@andres-loeh.de" = andres_loeh + canonize_author "Andres Loeh " = andres_loeh + canonize_author "Andres Loeh " = andres_loeh ++canonize_author "Lennart Kolmodin " = "Lennart Kolmodin " + canonize_author "kow@loria.fr" = eric_kow + canonize_author "Eric Kow " = eric_kow + canonize_author "Eric Kow " = eric_kow +@@ -153,6 +160,12 @@ + canonize_author "testerALL --ignore-times" = mark_stosberg + canonize_author "lele@seldati.it" = lele_gaifax + canonize_author "lele@nautilus.homeip.net" = lele_gaifax ++canonize_author "gwern0@gmail.com" = gwern_branwen ++canonize_author "Pekka.Pessi@nokia.com" = pekka_pessi ++canonize_author "Pekka Pessi " = pekka_pessi ++canonize_author "Pekka Pessi " = pekka_pessi ++canonize_author "Pekka Pessi " = pekka_pessi ++canonize_author "" = gwern_branwen + + canonize_author s + | s `contains` "roundy" = droundy +diff -ruN darcs-2.0.0/src/make_changelog.hs darcs-2.0.2/src/make_changelog.hs +--- darcs-2.0.0/src/make_changelog.hs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/make_changelog.hs 2008-06-24 01:23:12.000000000 +0000 +@@ -17,18 +17,20 @@ + + module Main (main) where + ++import Darcs.Arguments ( showFriendly ) ++import Darcs.Flags ( DarcsFlag(Summary) ) + import Darcs.Repository ( read_repo, withRepository, ($-) ) + import Darcs.Repository.Prefs ( boring_file_filter ) + import Darcs.Patch.Match ( match_parser, match_pattern, apply_matcher, Matcher, + make_matcher ) + import Darcs.Patch.MatchData ( PatchMatch(..) ) +-import Darcs.Patch.Info ( PatchInfo, just_name, just_author, pi_date ) ++import Darcs.Patch.Info ( PatchInfo, just_name, just_author, pi_date, pi_tag ) + import Darcs.Patch.Ordered ( unsafeUnRL, concatRL ) + import Darcs.Hopefully ( info ) + import Darcs.Sealed ( liftSM ) + + import Data.Char ( isSpace ) +-import Data.Maybe ( catMaybes ) ++import Data.Maybe ( catMaybes, mapMaybe, isNothing ) + import Data.List ( intersperse, unfoldr ) + + import Text.ParserCombinators.Parsec +@@ -39,7 +41,7 @@ + import System.Locale ( defaultTimeLocale, rfc822DateFormat ) + import System.IO (hPutStr, stderr) + +-type ChangeLogEntry p = ([Matcher p], Doc) ++type ChangeLogEntry p = ([Matcher p], Maybe Doc) + + main :: IO () + main = withRepository [] $- \repository -> do +@@ -62,8 +64,18 @@ + when (not (null unmatched)) $ do + hPutStr stderr $ concat + [ "\nunmatched ChangeLog entries (upcoming?):\n\n" +- , renderDocs (map snd unmatched) ++ , renderDocs (mapMaybe snd unmatched) + ] ++ ++ let unlogged = filter (\p -> not $ any (`apply_matcher` p) allpatterns) ++ . filter (isNothing . pi_tag . info) $ history ++ where allpatterns = concat $ map fst entries ++ when (not (null unlogged)) $ do ++ hPutStr stderr $ concat ++ [ "\npatches which have not yet been changelogged\n\n" ++ , renderDocs $ map (showFriendly [Summary]) unlogged ++ ] ++ + where + processPatch entries patch = do + let pinfo = info patch +@@ -71,7 +83,9 @@ + let patterns' = filter (not . (`apply_matcher` patch)) patterns + if null patterns' + then do +- tell [descr] ++ case descr of ++ Nothing -> return () ++ Just d -> tell [d] + return Nothing + else do + return (Just (patterns', descr)) +@@ -151,8 +165,32 @@ + padding p = text . take p . repeat $ ' ' + + entry :: CharParser st (ChangeLogEntry p) +-entry = do ++entry = ++ do emptyLine ++ e <- matchEntry <|> ignoreEntry + emptyLine ++ return e ++ ++ignoreEntry :: CharParser st (ChangeLogEntry p) ++ignoreEntry = do ++ patterns <- many1 $ do ++ try (string "ignore:") ++ startPos <- getPosition ++ -- take the characters to the end of line ++ s <- restOfLine ++ endState <- getParserState ++ -- and parse them again as a match pattern ++ setPosition startPos ++ setInput s ++ m <- match_parser ++ -- restore parser state ++ setParserState endState ++ newline ++ return (make_matcher s m) ++ return (patterns, Nothing) ++ ++matchEntry :: CharParser st (ChangeLogEntry p) ++matchEntry = do + patterns <- many1 $ do + try (string "match:") + startPos <- getPosition +@@ -174,8 +212,7 @@ + cs <- restOfLine + newline + return cs +- emptyLine +- return (patterns, formatEntry descr) ++ return (patterns, Just $ formatEntry descr) + + emptyLine :: CharParser st () + emptyLine = skipMany $ do optional (char '#' >> restOfLine) +diff -ruN darcs-2.0.0/src/microbench.hs darcs-2.0.2/src/microbench.hs +--- darcs-2.0.0/src/microbench.hs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/microbench.hs 2008-06-24 01:23:12.000000000 +0000 +@@ -19,7 +19,7 @@ + + import System ( getArgs ) + +-import FastPackedString ( PackedString, readFilePS, packString ) ++import FastPackedString ( PackedString, readFilePS, nilPS ) + import SHA1 ( sha1PS ) + import Crypt.SHA256 ( sha256sum ) + +@@ -35,4 +35,4 @@ + _ -> fail $ unwords $ "Invalid arguments: ":args + + sloppyReadFilePS :: String -> IO PackedString +-sloppyReadFilePS f = readFilePS f `catch` \e -> do putStrLn (show e); return $ packString "" ++sloppyReadFilePS f = readFilePS f `catch` \e -> do putStrLn (show e); return nilPS +diff -ruN darcs-2.0.0/src/OldFastPackedString.hs darcs-2.0.2/src/OldFastPackedString.hs +--- darcs-2.0.0/src/OldFastPackedString.hs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/OldFastPackedString.hs 2008-06-24 01:23:12.000000000 +0000 +@@ -1,4 +1,4 @@ +-{-# OPTIONS -fffi -cpp #-} ++{-# OPTIONS_GHC -fffi -cpp #-} + ----------------------------------------------------------------------------- + -- | + -- Module : FastPackedString +@@ -58,7 +58,6 @@ + indexPSW, -- :: PackedString -> Int -> Word8 + reversePS, -- :: PackedString -> PackedString + concatPS, -- :: [PackedString] -> PackedString +- concatLenPS, -- :: Int -> [PackedString] -> PackedString + takePS, -- :: Int -> PackedString -> PackedString + dropPS, -- :: Int -> PackedString -> PackedString + splitAtPS, -- :: Int -> PackedString -> (PackedString, PackedString) +@@ -539,23 +538,6 @@ + ptr' <- reallocArray ptr new_total + f ptr' len (new_total - len) pss + +--- ----------------------------------------------------------------------------- +--- concatLenPS +- +--- | Camse as concatPS only you tell it how big the result will be. +--- If you lie thenBad Things will happen. +- +-concatLenPS :: Int -> [PackedString] -> PackedString +-concatLenPS n [] = n `seq` nilPS +-concatLenPS _ [ps] = ps +-concatLenPS total_length pss = createPS total_length $ \p-> cpPSs p pss +- where cpPSs :: Ptr Word8 -> [PackedString] -> IO () +- cpPSs p (PS x s l:rest) = +- do withForeignPtr x $ \pf -> +- c_memcpy p (pf `plusPtr` s) (fromIntegral l) +- cpPSs (p `plusPtr` l) rest +- cpPSs _ [] = return () +- + {-# INLINE findPS #-} + findPS :: Char -> PackedString -> Maybe Int + findPS c ps = wfindPS (c2w c) ps +@@ -784,9 +766,9 @@ + + #if defined(__GLASGOW_HASKELL__) + foreign import ccall unsafe "static fpstring.h my_mmap" my_mmap +- :: CInt -> CInt -> IO (Ptr Word8) ++ :: CSize -> CInt -> IO (Ptr Word8) + foreign import ccall unsafe "static sys/mman.h munmap" c_munmap +- :: Ptr Word8 -> CInt -> IO CInt ++ :: Ptr Word8 -> CSize -> IO CInt + foreign import ccall unsafe "static unistd.h close" c_close + :: CInt -> IO CInt + #endif +diff -ruN darcs-2.0.0/src/Printer.lhs darcs-2.0.2/src/Printer.lhs +--- darcs-2.0.0/src/Printer.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Printer.lhs 2008-06-24 01:23:12.000000000 +0000 +@@ -38,18 +38,18 @@ + + This code was made generic in the element type by Juliusz Chroboczek. + \begin{code} +-module Printer (Printable(..), Doc(..), unDoc, Printers, Printers'(..), Printer, Color(..), ++module Printer (Printable(..), Doc(Doc,unDoc), Printers, Printers'(..), Printer, Color(..), + hPutDoc, hPutDocLn, putDoc, putDocLn, + hPutDocWith, hPutDocLnWith, putDocWith, putDocLnWith, + renderString, renderStringWith, renderPS, renderPSWith, +- renderPSs, renderPSsWith, ++ renderPSs, renderPSsWith, lineColor, + prefix, colorText, invisibleText, hiddenText, hiddenPrefix, userchunk, text, + printable, wrap_text, +- blueText, redText, greenText, +- unsafeText, unsafeBoth, unsafeChar, ++ blueText, redText, greenText, magentaText, cyanText, ++ unsafeText, unsafeBoth, unsafeBothText, unsafeChar, + invisiblePS, packedString, unsafePackedString, userchunkPS, + simplePrinters, invisiblePrinter, simplePrinter, +- doc, empty, (<>), (<+>), ($$), vcat, vsep, hcat, ++ doc, empty, (<>), (), (<+>), ($$), vcat, vsep, hcat, + minus, newline, plus, space, backslash, lparen, rparen, + parens, + errorDoc, +@@ -109,9 +109,7 @@ + hPrintPrintable h (PS ps) = hPutPS h ps + hPrintPrintable h (Both _ ps) = hPutPS h ps + +-newtype Doc = Doc (Reader St Document) +-unDoc :: Doc -> Reader St Document +-unDoc (Doc d) = d ++newtype Doc = Doc { unDoc :: Reader St Document } + + data St = St { printers :: !Printers', current_prefix :: !DocumentInternals } + type Printers = Handle -> Printers' +@@ -119,11 +117,13 @@ + invisibleP :: !Printer, + hiddenP :: !Printer, + userchunkP :: !Printer, +- defP :: !Printer ++ defP :: !Printer, ++ lineColorT :: !(Color -> Doc -> Doc), ++ lineColorS :: !DocumentInternals + } + type Printer = Printable -> Reader St Document + +-data Color = Blue | Red | Green ++data Color = Blue | Red | Green | Cyan | Magenta + + type DocumentInternals = [Printable] -> [Printable] + data Document = Document DocumentInternals +@@ -170,6 +170,11 @@ + Empty -> return Empty) + where p = S s + ++lineColor :: Color -> Doc -> Doc ++lineColor c d = ++ Doc $ do pr <- asks printers ++ unDoc $ lineColorT pr c d ++ + hiddenPrefix :: String -> Doc -> Doc + hiddenPrefix s (Doc d) = + Doc $ do pr <- asks printers +@@ -183,6 +188,9 @@ + unsafeBoth :: String -> PackedString -> Doc + unsafeBoth s ps = Doc $ simplePrinter (Both s ps) + ++unsafeBothText :: String -> Doc ++unsafeBothText s = Doc $ simplePrinter (Both s (packString s)) ++ + packedString, unsafePackedString, invisiblePS, userchunkPS :: PackedString -> Doc + packedString = printable . PS + unsafePackedString = Doc . simplePrinter . PS +@@ -192,7 +200,7 @@ + unsafeChar :: Char -> Doc + unsafeChar = unsafeText . return + +-text, unsafeText, invisibleText, hiddenText, userchunk, blueText, redText, greenText :: String -> Doc ++text, unsafeText, invisibleText, hiddenText, userchunk, blueText, redText, greenText, magentaText, cyanText :: String -> Doc + text = printable . S + unsafeText = Doc . simplePrinter . S + invisibleText = invisiblePrintable . S +@@ -201,6 +209,8 @@ + blueText = colorText Blue + redText = colorText Red + greenText = colorText Green ++magentaText = colorText Magenta ++cyanText = colorText Cyan + + colorText :: Color -> String -> Doc + colorText c = mkColorPrintable c . S +@@ -230,11 +240,13 @@ + simplePrinters _ = simplePrinters' + + simplePrinters' :: Printers' +-simplePrinters' = Printers { colorP = \_ -> simplePrinter, ++simplePrinters' = Printers { colorP = const simplePrinter, + invisibleP = simplePrinter, + hiddenP = invisiblePrinter, + userchunkP = simplePrinter, +- defP = simplePrinter ++ defP = simplePrinter, ++ lineColorT = const id, ++ lineColorS = id + } + + simplePrinter :: Printer +@@ -295,11 +307,12 @@ + do bd <- b + st <- ask + let pf = current_prefix st ++ sf = lineColorS $ printers st + return $ Document (\s -> af + $ case bd of + Empty -> s + Document bf -> +- newline_p:pf (bf s)) ++ sf (newline_p:pf (bf s))) + + vcat :: [Doc] -> Doc + vcat [] = empty +diff -ruN darcs-2.0.0/src/rts.c darcs-2.0.2/src/rts.c +--- darcs-2.0.0/src/rts.c 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/rts.c 1970-01-01 00:00:00.000000000 +0000 +@@ -1,36 +0,0 @@ +-#include +-#include +- +-#include +- +-void defaultsHook (void) { +- RtsFlags.GcFlags.maxStkSize = 8*1000002 / sizeof(W_); /* 8M */ +- +-#if defined(_SC_PHYS_PAGES) && defined(_SC_AVPHYS_PAGES) +- /* Try to set reasonable values for when to start compacting the heap to +- avoid massive swapping. */ +- { +- unsigned long long pagesize = sysconf(_SC_PAGESIZE); +- unsigned long long numpages = sysconf(_SC_PHYS_PAGES); +- unsigned long long availpages = sysconf(_SC_AVPHYS_PAGES); +- unsigned long long mhs = 2*numpages*pagesize; +- /* RtsFlags.GcFlags.maxHeapSize = 1ULL+mhs/BLOCK_SIZE_W; */ +- if (availpages > 0.3*numpages) { +- /* We'll try to fit into half the available space. */ +- /* RtsFlags.GcFlags.compactThreshold = availpages*pagesize/2ULL/(double)mhs; */ +- } else { +- /* Someone's going to have to swap out, so we'll aim for a quarter of +- total memory. */ +- /* RtsFlags.GcFlags.compactThreshold = numpages/4ULL/(double)mhs; */ +- } +- if (availpages*pagesize > 8ULL*1000002) { +- /* Start the heap out at an eighth of the available memory... +- RtsFlags.GcFlags.heapSizeSuggestion = +- 1+availpages*pagesize/8ULL/BLOCK_SIZE_W; +- */ +- } +- } +-#endif +-} +- +- +diff -ruN darcs-2.0.0/src/SHA1.lhs darcs-2.0.2/src/SHA1.lhs +--- darcs-2.0.0/src/SHA1.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/SHA1.lhs 2008-06-24 01:23:12.000000000 +0000 +@@ -16,14 +16,14 @@ + % Boston, MA 02110-1301, USA. + + \begin{code} +-{-# OPTIONS -fglasgow-exts -fno-warn-name-shadowing #-} ++{-# OPTIONS_GHC -fglasgow-exts -fno-warn-name-shadowing #-} + -- -fglasgow-exts needed for nasty hack below + -- name shadowing disabled because a,b,c,d,e are shadowed loads in step 4 + module SHA1 (sha1PS) where + + import Autoconf (big_endian) + import FastPackedString (PackedString, unsafeWithInternals, +- concatLenPS, packWords, lengthPS) ++ concatPS, packWords, lengthPS) + + import Control.Monad (unless) + import Data.Char (intToDigit) +@@ -72,8 +72,7 @@ + num_nuls = (55 - len) `mod` 64 + padding = 128:replicate num_nuls 0 + len_w8s = reverse $ size_split 8 (fromIntegral len*8) +- in concatLenPS (len + 1 + num_nuls + 8) +- [s, packWords padding, packWords len_w8s] ++ in concatPS [s, packWords padding, packWords len_w8s] + + size_split :: Int -> Integer -> [Word8] + size_split 0 _ = [] +diff -ruN darcs-2.0.0/src/Ssh.hs darcs-2.0.2/src/Ssh.hs +--- darcs-2.0.0/src/Ssh.hs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Ssh.hs 2008-06-24 01:23:12.000000000 +0000 +@@ -1,10 +1,11 @@ +-{-# OPTIONS -fffi #-} ++{-# OPTIONS_GHC -cpp -fffi #-} + + module Ssh ( grabSSH, runSSH, getSSH, copySSH, copySSHs, SSHCmd(..) ) where + + import Prelude hiding ( lookup, catch ) + +-import System ( ExitCode(..), getEnv ) ++import System.Exit ( ExitCode(..) ) ++import System.Environment ( getEnv ) + #ifndef WIN32 + import System.Posix.Process ( getProcessID ) + #else +@@ -24,7 +25,7 @@ + import Darcs.SignalHandler ( catchNonSignal ) + import Workaround ( createDirectoryIfMissing ) + import Darcs.Utils ( withCurrentDirectory, breakCommand, prettyException, catchall ) +-import Darcs.Global ( atexit, sshControlMasterDisabled ) ++import Darcs.Global ( atexit, sshControlMasterDisabled, darcsdir ) + import Darcs.Lock ( withTemp, withOpenTemp, tempdir_loc, removeFileMayNotExist ) + import Exec ( exec, Redirects, Redirect(..), ) + import Darcs.Progress ( debugMessage, debugFail, progressList ) +@@ -70,7 +71,7 @@ + + cleanrepourl :: String -> String + cleanrepourl zzz | take (length dd) zzz == dd = "" +- where dd = "_darcs/" ++ where dd = darcsdir++"/" + cleanrepourl (z:zs) = z : cleanrepourl zs + cleanrepourl "" = "" + +@@ -80,7 +81,7 @@ + grabSSH :: String -> Connection -> IO PackedString + grabSSH x c = do + let dir = drop 1 $ dropWhile (/= ':') x +- dd = "_darcs/" ++ dd = darcsdir++"/" + clean zzz | take (length dd) zzz == dd = drop (length dd) zzz + clean (_:zs) = clean zs + clean "" = bug $ "Buggy path in grabSSH: "++x +@@ -110,7 +111,7 @@ + copySSH :: String -> FilePath -> IO () + copySSH uRaw f = withSSHConnection uRaw (\c -> grabSSH uRaw c >>= writeFilePS f) $ + do let u = escape_dollar uRaw +- r <- runSSH SCP u [] [u,f] (AsIs,AsIs,Null) ++ r <- runSSH SCP u [] [u,f] (AsIs,AsIs,AsIs) + when (r /= ExitSuccess) $ + debugFail $ "(scp) failed to fetch: " ++ u + where {- '$' in filenames is troublesome for scp, for some reason.. -} +@@ -132,7 +133,7 @@ + withTemp $ \sftpoutput -> + do hPutStr th input + hClose th +- r <- runSSH SFTP u [] [host] (File tn, File sftpoutput, Null) ++ r <- runSSH SFTP u [] [host] (File tn, File sftpoutput, AsIs) + let files = if length ns > 5 + then (take 5 ns) ++ ["and " + ++ (show (length ns - 5)) ++ " more"] +diff -ruN darcs-2.0.0/src/Stringalike.hs darcs-2.0.2/src/Stringalike.hs +--- darcs-2.0.0/src/Stringalike.hs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/Stringalike.hs 1970-01-01 00:00:00.000000000 +0000 +@@ -1,180 +0,0 @@ +- +-{-# OPTIONS -fglasgow-exts #-} +--- We need an instance String +- +-module Stringalike (Stringalike(..)) where +- +-import Numeric ( readHex ) +-import Data.Char ( chr, isHexDigit ) +-import FastPackedString ( PackedString, packString, unpackPS, +- nilPS, nullPS, lengthPS, reversePS, indexPS, +- appendPS, concatPS, headPS, tailPS, initPS, lastPS, +- takePS, dropPS, dropWhilePS, dropWhitePS, +- breakPS, breakFirstPS, breakLastPS, breakOnPS, +- breakWhitePS, readIntPS, fromHex2PS, ) +- +-class Stringalike s where +- sal_empty :: s +- sal_null :: s -> Bool +- sal_head :: s -> Char +- sal_last :: s -> Char +- sal_tail :: s -> s +- sal_take :: Int -> s -> s +- sal_drop :: Int -> s -> s +- sal_reverse :: s -> s +- sal_concat :: [s] -> s +- sal_length :: s -> Int +- sal_index :: s -> Int -> Char +- sal_dropWhile :: (Char -> Bool) -> s -> s +- sal_dropWhite :: s -> s +- sal_breakWhite :: s -> (s, s) +- sal_readInt :: s -> Maybe (Int, s) +- sal_break :: (Char -> Bool) -> s -> (s, s) +- sal_breakFirst :: Char -> s -> Maybe (s, s) +- sal_breakFirst c xs = case sal_breakOn c xs of +- (ys, zs) +- | sal_null zs -> Nothing +- | otherwise -> Just (ys, sal_tail zs) +- sal_breakLast :: Char -> s -> Maybe (s, s) +- sal_breakLast c xs = case sal_breakFirst c (sal_reverse xs) of +- Nothing -> Nothing +- Just (ys, zs) -> +- Just (sal_reverse zs, sal_reverse ys) +- sal_breakOn :: Char -> s -> (s, s) +- sal_breakOn c = sal_break (c ==) +- sal_to_string :: s -> String +- sal_to_PS :: s -> PackedString +- sal_fromHex :: s -> s +- +-instance Stringalike String where +- sal_empty = "" +- sal_null = null +- sal_head = head +- sal_last = last +- sal_tail = tail +- sal_take = take +- sal_drop = drop +- sal_reverse = reverse +- sal_concat = concat +- sal_length = length +- sal_index = (!!) +- sal_dropWhile = dropWhile +- sal_dropWhite = dropWhile (`elem` " \n\t\r") +- sal_breakWhite = break (`elem` " \n\t\r") +- sal_readInt xs = case reads xs of +- [(n, s')] -> Just (n, s') +- _ -> Nothing +- sal_break = break +- sal_to_string = id +- sal_to_PS = packString +- sal_fromHex "" = "" +- sal_fromHex [_] = "" -- Should this be an error? +- sal_fromHex all_cs@(c1:c2:cs) +- = case readHex [c1, c2] of +- [(n, "")] -> chr n:sal_fromHex cs +- _ -> error ("Bad hex characters: " ++ all_cs) +- +-instance Stringalike PackedString where +- sal_empty = nilPS +- sal_null = nullPS +- sal_head = headPS +- sal_last = lastPS +- sal_tail = tailPS +- sal_take = takePS +- sal_drop = dropPS +- sal_reverse = reversePS +- sal_concat = concatPS +- sal_length = lengthPS +- sal_index = indexPS +- sal_dropWhile = dropWhilePS +- sal_dropWhite = dropWhitePS +- sal_breakWhite = breakWhitePS +- sal_readInt = readIntPS +- sal_break = breakPS +- sal_breakFirst = breakFirstPS +- sal_breakLast = breakLastPS +- sal_breakOn = breakOnPS +- sal_to_string = unpackPS +- sal_to_PS = id +- sal_fromHex = fromHex2PS +- +--- Invariant: nullPS `notElem` +-instance Stringalike [PackedString] where +- sal_empty = [] +- sal_null = null +- sal_head (ps:_) = headPS ps +- sal_head [] = error "sal_head []" +- sal_last (ps:pss) +- | null pss = lastPS ps +- | otherwise = sal_last pss +- sal_last [] = error "sal_last []" +- sal_tail (ps:pss) +- | lengthPS ps == 1 = pss +- | otherwise = tailPS ps:pss +- sal_tail [] = error "sal_tail []" +- sal_take _ [] = [] +- sal_take 0 _ = [] +- sal_take n (ps:pss) +- | n <= lengthPS ps = [takePS n ps] +- | otherwise = ps:sal_take (n - lengthPS ps) pss +- sal_drop _ [] = [] +- sal_drop n (ps:pss) +- | n == lengthPS ps = pss +- | n < lengthPS ps = dropPS n ps:pss +- | otherwise = sal_drop (n - lengthPS ps) pss +- sal_reverse = reverse . map reversePS +- sal_concat = concat +- sal_length = sum . map lengthPS +- sal_index [] _ = error "sal_index []" +- sal_index (ps:pss) n +- | n < lengthPS ps = indexPS ps n +- | otherwise = sal_index pss (n - lengthPS ps) +- sal_dropWhile _ [] = [] +- sal_dropWhile f (ps:pss) = let ps' = dropWhilePS f ps +- in if nullPS ps' +- then sal_dropWhile f pss +- else ps':pss +- sal_dropWhite [] = [] +- sal_dropWhite (ps:pss) = let ps' = dropWhitePS ps +- in if nullPS ps' +- then sal_dropWhite pss +- else ps':pss +- sal_breakWhite [] = ([], []) +- sal_breakWhite (ps:pss) = case breakWhitePS ps of +- (xs, ys) +- | nullPS ys -> case sal_breakWhite pss of +- (xs', ys') -> (xs:xs', ys') +- | nullPS xs -> ([], ys:pss) +- | otherwise -> ([xs], ys:pss) +- sal_readInt pss = case sal_break f $ sal_dropWhite pss of +- (xs, ys) -> case readIntPS (concatPS (xs ++ [nulPS])) of +- Just (n, ys') +- | len == 0 -> error "readIntPS lost NUL!" +- | len == 1 -> Just (n, ys) +- | otherwise -> Just (n, initPS ys':ys) +- where len = lengthPS ys' +- Nothing -> Nothing +- where f c | isHexDigit c = False +- f '+' = False +- f '-' = False +- f 'x' = False +- f _ = True +- nulPS = packString "\NUL" +- sal_break _ [] = ([], []) +- sal_break f (ps:pss) = case breakPS f ps of +- (xs, ys) +- | nullPS ys -> case sal_break f pss of +- (xs', ys') -> (xs:xs', ys') +- | nullPS xs -> ([], ys:pss) +- | otherwise -> ([xs], ys:pss) +- sal_to_string = concat . map unpackPS +- sal_to_PS = concatPS +- sal_fromHex [] = [] +- sal_fromHex [ps] +- | lengthPS ps == 1 = [] -- Should this be an error? +- sal_fromHex (ps1:ps2:pss) +- | lengthPS ps1 == 1 = sal_fromHex (appendPS ps1 ps2):pss +- sal_fromHex (ps:pss) +- | odd (lengthPS ps) = sal_fromHex (initPS ps:packString [lastPS ps]:pss) +- | otherwise = fromHex2PS ps:sal_fromHex pss +- +diff -ruN darcs-2.0.0/src/stringify.hs darcs-2.0.2/src/stringify.hs +--- darcs-2.0.0/src/stringify.hs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/stringify.hs 2008-06-24 01:23:12.000000000 +0000 +@@ -1,16 +1,13 @@ + module Main where + +-import Data.List (intersperse) + import System.Environment (getArgs) +-import System.IO (hGetContents, stdin) + + main :: IO () +-main = do [modulename, varname] <- getArgs +- thedata <- hGetContents stdin -- ratify hGetContents: not part of +- -- darcs executable +- let pretty_data = concat $ intersperse "\\n\\\n \\" +- $ map (init . tail . show) $ lines thedata ++main = do -- Module header ++ [modulename, varname] <- getArgs + putStrLn $ "module " ++ modulename ++ " (" ++ varname ++ ") where" ++ -- Type sig so we can compile -Wall -Werror + putStrLn $ varname ++ " :: String" +- putStrLn $ varname ++ " = \"" ++ pretty_data ++ "\"" +- ++ -- And now quote the stdin so it's a String ++ thedata <- getContents ++ putStrLn $ varname ++ " = " ++ show thedata +diff -ruN darcs-2.0.0/src/ThisVersion.lhs.in darcs-2.0.2/src/ThisVersion.lhs.in +--- darcs-2.0.0/src/ThisVersion.lhs.in 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/ThisVersion.lhs.in 2008-06-24 01:23:12.000000000 +0000 +@@ -4,7 +4,7 @@ + \begin{code} + module ThisVersion ( darcs_version ) where + +-{-# INLINE darcs_version #-} ++{-# NOINLINE darcs_version #-} + darcs_version :: String + darcs_version = "@DARCS_VERSION@ (@DARCS_VERSION_STATE@)" + \end{code} +diff -ruN darcs-2.0.0/src/umask.c darcs-2.0.2/src/umask.c +--- darcs-2.0.0/src/umask.c 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/umask.c 2008-06-24 01:23:12.000000000 +0000 +@@ -7,6 +7,7 @@ + int + set_umask(char *mask_string) + { ++#ifndef WIN32 + int rc; + unsigned mask; + char *end; +@@ -19,6 +20,10 @@ + + rc = umask(mask); + return rc; ++#else ++ /* umask() has no useful meaning on win32. */ ++ return 0; ++#endif /* #ifndef WIN32 ... else ... */ + } + + int +diff -ruN darcs-2.0.0/src/unit.lhs darcs-2.0.2/src/unit.lhs +--- darcs-2.0.0/src/unit.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/unit.lhs 2008-06-24 01:23:12.000000000 +0000 +@@ -41,7 +41,7 @@ + functions of my darcs code work properly. + + \begin{code} +-{-# OPTIONS -fno-warn-deprecations -fglasgow-exts #-} ++{-# OPTIONS_GHC -cpp -fno-warn-orphans -fno-warn-deprecations -fglasgow-exts #-} + module Main (main) where + \end{code} + +@@ -711,7 +711,7 @@ + "a326424677373735753246463gadshhdhdsaasdgg" ++ + "a326424677373735753246463gadshhdhdsaagg"), + fromPrim $ binary "./hello" +- (packString "") ++ nilPS + (packString "adafjttkykrere")] + + test_patches_composite_nocom = +diff -ruN darcs-2.0.0/src/UnsafeCatch.lhs darcs-2.0.2/src/UnsafeCatch.lhs +--- darcs-2.0.0/src/UnsafeCatch.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/UnsafeCatch.lhs 1970-01-01 00:00:00.000000000 +0000 +@@ -1,13 +0,0 @@ +-% This file written and placed in the public domain by Ganesh Sittampalam, 2007 +- +-\begin{code} +-module UnsafeCatch (unsafeCatch) where +- +-import Prelude hiding (catch) +-import Control.Exception +-import System.IO.Unsafe (unsafePerformIO) +- +-unsafeCatch :: a -> (Exception -> a) -> a +-unsafeCatch x f = unsafePerformIO ((x `seq` return x) `catch` (return . f)) +- +-\end{code} +\ No newline at end of file +diff -ruN darcs-2.0.0/src/URL.hs darcs-2.0.2/src/URL.hs +--- darcs-2.0.0/src/URL.hs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/URL.hs 2008-06-24 01:23:12.000000000 +0000 +@@ -1,4 +1,4 @@ +-{-# OPTIONS -fffi #-} ++{-# OPTIONS_GHC -cpp -fffi #-} + module URL ( copyUrl, copyUrlFirst, waitUrl, + Cachable(Cachable, Uncachable, MaxAge) + ) where +@@ -8,7 +8,7 @@ + import Data.List ( delete ) + import qualified Data.Map as Map + import System.IO.Unsafe ( unsafePerformIO ) +-import Monad ( when ) ++import Control.Monad ( when ) + import Autoconf ( have_libwww ) + import Foreign.C.Types ( CInt ) + import Foreign.C.String ( withCString, peekCString, CString ) +@@ -81,7 +81,7 @@ + then do writeIORef urlState (st { waitToStart = pushQ (url, file, c) (deleteQ (url, file, c) w) }) + debugMessage $ "Moving "++url++" to head of download queue." + checkWaitToStart +- else debugMessage "Ingoring copyUrlWithPriority of file that's already queued." ++ else debugMessage "Ignoring copyUrlWithPriority of file that's already queued." + else do writeIORef urlState new_st + checkWaitToStart + +diff -ruN darcs-2.0.0/src/UTF8.lhs darcs-2.0.2/src/UTF8.lhs +--- darcs-2.0.0/src/UTF8.lhs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/UTF8.lhs 2008-06-24 01:23:12.000000000 +0000 +@@ -36,7 +36,7 @@ + > encodeOne, decodeOne, + > ) where + +-> import Char (ord, chr) ++> import Data.Char (ord, chr) + > import Data.Word (Word8, Word16, Word32) + > import Data.Bits (Bits, shiftL, shiftR, (.&.), (.|.)) + +diff -ruN darcs-2.0.0/src/win32/System/Posix.hs darcs-2.0.2/src/win32/System/Posix.hs +--- darcs-2.0.0/src/win32/System/Posix.hs 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/src/win32/System/Posix.hs 2008-06-24 01:23:12.000000000 +0000 +@@ -1,4 +1,4 @@ +-{-# OPTIONS -fglasgow-exts -fffi #-} ++{-# OPTIONS_GHC -fglasgow-exts -fffi #-} + module System.Posix where + + import Foreign.Ptr ( Ptr, castPtr, plusPtr ) +@@ -31,7 +31,7 @@ + t <- peek p :: IO CTime + return t + +-foreign import ccall "winbase.h SleepEx" c_SleepEx :: CULong -> CUInt -> IO CInt ++foreign import stdcall "winbase.h SleepEx" c_SleepEx :: CULong -> CUInt -> IO CInt + + sleep :: Integer -> IO CInt + sleep n = c_SleepEx (1000 * fromIntegral n) 1 +diff -ruN darcs-2.0.0/src/Workaround.hs darcs-2.0.2/src/Workaround.hs +--- darcs-2.0.0/src/Workaround.hs 2008-04-07 15:08:43.000000000 +0000 ++++ darcs-2.0.2/src/Workaround.hs 2008-06-24 01:23:33.000000000 +0000 +@@ -16,7 +16,7 @@ + renameFile, + bracketOnError, + fileMode, getFileStatus, setFileMode, +- isExecutable, setExecutable, ++ setExecutable, + ) where + + import qualified GHC.Handle ( openFd ) +@@ -38,10 +38,7 @@ + groupReadMode, groupWriteMode, groupExecuteMode, + otherReadMode, otherWriteMode, otherExecuteMode) + import Data.Bits ( (.&.), (.|.), complement ) +-isExecutable :: FilePath -> IO Bool +-isExecutable f = do st <- getFileStatus f +- let x = fileMode st .&. ownerExecuteMode +- return $ x /= nullFileMode ++ + setExecutable :: FilePath -> Bool -> IO () + setExecutable f ex = + do st <- getFileStatus f +diff -ruN darcs-2.0.0/STATE darcs-2.0.2/STATE +--- darcs-2.0.0/STATE 2008-04-07 15:08:48.000000000 +0000 ++++ darcs-2.0.2/STATE 1970-01-01 00:00:00.000000000 +0000 +@@ -1 +0,0 @@ +-2.0.0 (release) +diff -ruN darcs-2.0.0/tests/addexitval.sh darcs-2.0.2/tests/addexitval.sh +--- darcs-2.0.0/tests/addexitval.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/addexitval.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -2,41 +2,30 @@ + + set -ev + +-test $DARCS || DARCS=$PWD/../darcs +-ACTUAL_DARCS=`which $DARCS` +-DARCSPATH=`dirname $ACTUAL_DARCS` +-PATH="$DARCSPATH:$PATH" +-export PATH +- +-# This test seems to be sensitive to having IFS='' set by the test harness, so +-# we set it back and always quote $DARCS instead. Without one or the other +-# approach in place, the test could fail if run on a path with a space init. +-IFS=' ' +- + rm -rf tmp + mkdir tmp + cd tmp +-"$DARCS" init ++darcs init + + empty='test ! -s' + nonempty='test -s' + + rm -f foo +-"$DARCS" add foo >stdout 2>stderr && exit 1 || true ++darcs add foo >stdout 2>stderr && exit 1 || true + $empty stdout + $nonempty stderr + + >foo +-"$DARCS" add foo >stdout 2>stderr ++darcs add foo >stdout 2>stderr + $empty stdout + $empty stderr + +-"$DARCS" add foo >stdout 2>stderr && exit 1 || true ++darcs add foo >stdout 2>stderr && exit 1 || true + $empty stdout + $nonempty stderr + + rm foo +-"$DARCS" add foo >stdout 2>stderr && exit 1 || true ++darcs add foo >stdout 2>stderr && exit 1 || true + $empty stdout + $nonempty stderr + +diff -ruN darcs-2.0.0/tests/addmv.sh darcs-2.0.2/tests/addmv.sh +--- darcs-2.0.0/tests/addmv.sh 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/tests/addmv.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -1,22 +1,20 @@ + #!/usr/bin/env bash + set -ev + +-test $DARCS || DARCS=$PWD/../darcs +- + rm -rf temp1 temp2 + mkdir temp1 temp2 + cd temp1 +-$DARCS init ++darcs init + touch foo bar +-$DARCS add foo bar +-$DARCS record -a -m add_foo_bar -A x +-$DARCS mv foo zig +-$DARCS mv bar foo +-$DARCS mv zig bar +-$DARCS record -a -m swap_foo_bar -A x ++darcs add foo bar ++darcs record -a -m add_foo_bar -A x ++darcs mv foo zig ++darcs mv bar foo ++darcs mv zig bar ++darcs record -a -m swap_foo_bar -A x + cd ../temp2 +-$DARCS init +-$DARCS pull -v -a ../temp1 ++darcs init ++darcs pull -v -a ../temp1 + cd .. + rm -rf temp1 temp2 + +diff -ruN darcs-2.0.0/tests/addrace.sh darcs-2.0.2/tests/addrace.sh +--- darcs-2.0.0/tests/addrace.sh 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/tests/addrace.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -1,18 +1,17 @@ + #!/usr/bin/env bash + set -ev + +-test $DARCS || DARCS=$PWD/../darcs + rm -rf temp1 temp2 + mkdir temp1 temp2 + cd temp1 +-$DARCS init ++darcs init + echo zig > foo +-$DARCS add foo ++darcs add foo + #sleep 1 +-$DARCS record -a -m add_foo -A x ++darcs record -a -m add_foo -A x + cd ../temp2 +-$DARCS init +-$DARCS pull -a ../temp1 ++darcs init ++darcs pull -a ../temp1 + cd .. + cmp temp1/foo temp2/foo + rm -rf temp1 temp2 +diff -ruN darcs-2.0.0/tests/addrm.sh darcs-2.0.2/tests/addrm.sh +--- darcs-2.0.0/tests/addrm.sh 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/tests/addrm.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -1,20 +1,18 @@ + #!/usr/bin/env bash + set -ev + +-test $DARCS || DARCS=$PWD/../darcs +- + rm -rf temp1 temp2 + mkdir temp1 temp2 + cd temp1 +-$DARCS init ++darcs init + touch foo +-$DARCS add foo +-$DARCS record -a -m add_foo -A x +-$DARCS remove foo +-$DARCS record -a -m del_foo -A x ++darcs add foo ++darcs record -a -m add_foo -A x ++darcs remove foo ++darcs record -a -m del_foo -A x + cd ../temp2 +-$DARCS init +-$DARCS pull --all ../temp1 ++darcs init ++darcs pull --all ../temp1 + cd .. + rm -rf temp1 temp2 + +diff -ruN darcs-2.0.0/tests/add.sh darcs-2.0.2/tests/add.sh +--- darcs-2.0.0/tests/add.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/add.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -1,18 +1,16 @@ + #!/usr/bin/env bash + set -ev + +-test $DARCS || DARCS=$PWD/../darcs +- + rm -rf temp1 + mkdir temp1 + cd temp1 +-$DARCS init ++darcs init + touch foo bar +-$DARCS add foo bar ++darcs add foo bar + + for (( i=0 ; i < 5; i=i+1 )); do + echo $i >> file-$i; +- $DARCS add file-$i ++ darcs add file-$i + done + + cd .. +diff -ruN darcs-2.0.0/tests/annotate.sh darcs-2.0.2/tests/annotate.sh +--- darcs-2.0.0/tests/annotate.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/annotate.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -1,16 +1,15 @@ + #!/usr/bin/env bash + set -ev + +-test $DARCS || DARCS=$PWD/../darcs + rm -rf temp + mkdir temp + cd temp +-$DARCS init ++darcs init + mkdir a b + touch a/a b/b +-$DARCS add --rec . +-$DARCS record -a -m ab -A test +-$DARCS annotate a/a ++darcs add --rec . ++darcs record -a -m ab -A test ++darcs annotate a/a + + cd .. + rm -rf temp +diff -ruN darcs-2.0.0/tests/apply-hunks.sh darcs-2.0.2/tests/apply-hunks.sh +--- darcs-2.0.0/tests/apply-hunks.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/apply-hunks.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -1,69 +1,63 @@ + #!/usr/bin/env bash + set -ev + +-test $DARCS || DARCS=$PWD/../darcs +-ACTUAL_DARCS=`which $DARCS` +-DARCSPATH=`dirname $ACTUAL_DARCS` +-PATH="$DARCSPATH:$PATH" +-export PATH +- + rm -rf temp0 temp1 temp2 + + # step 1 + mkdir temp0 + cd temp0 +-$DARCS init --darcs-2 ++darcs init --darcs-2 + echo m1 > foo +-$DARCS add foo +-$DARCS record -a -m m1 -A moi --ignore-times ++darcs add foo ++darcs record -a -m m1 -A moi --ignore-times + cd .. + + # step 2 +-$DARCS get temp0 temp1 ++darcs get temp0 temp1 + cd temp1 + echo a1 > foo +-$DARCS record foo -a -m a1 -A moi --ignore-times ++darcs record foo -a -m a1 -A moi --ignore-times + cd .. + + + # step 3 + cd temp0 + echo m2 > foo +-$DARCS record -a -m m2 -A moi --ignore-times ++darcs record -a -m m2 -A moi --ignore-times + cd .. + + + # step 4 + cd temp1 +-$DARCS pull -a ++darcs pull -a + echo m2-a1 > foo +-$DARCS record -a -m 'Fix conflict m2-a1' -A moi --ignore-times ++darcs record -a -m 'Fix conflict m2-a1' -A moi --ignore-times + cd .. + + #step 5 + cd temp0 + echo m3 > foo +-$DARCS record -a -m m3 -A moi --ignore-times ++darcs record -a -m m3 -A moi --ignore-times + cd .. + + #step 6 +-$DARCS get temp0 temp2 ++darcs get temp0 temp2 + cd temp2 + echo b1 > foo +-$DARCS record -a -m b1 -A moi --ignore-times ++darcs record -a -m b1 -A moi --ignore-times + cd .. + + #step 7 + cd temp0 + echo m4 > foo +-$DARCS record -a -m m4 -A moi --ignore-times ++darcs record -a -m m4 -A moi --ignore-times + cd .. + + #step 8 + cd temp1 +-$DARCS pull -a ++darcs pull -a + echo m2-a1-m4 > foo +-echo y | $DARCS mark-conflicts ++echo y | darcs mark-conflicts + cd .. + + rm -rf temp0 temp1 temp2 +diff -ruN darcs-2.0.0/tests/ask_deps.sh darcs-2.0.2/tests/ask_deps.sh +--- darcs-2.0.0/tests/ask_deps.sh 1970-01-01 00:00:00.000000000 +0000 ++++ darcs-2.0.2/tests/ask_deps.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -0,0 +1,55 @@ ++#!/usr/bin/env bash ++set -ev ++ ++rm -rf temp ++mkdir temp ++cd temp ++ ++darcs init ++cat > _darcs/prefs/defaults <<. ++ALL author test ++ALL ignore-times ++ALL ask-deps ++. ++ ++# add three depending patches for file 'a' ++# expect no dependency questions ++# 'q' will abort and cause future failure if an unexpected dependency is asked ++touch a ++darcs add a ++echo q | darcs rec -am a0 ++darcs ann -p a0 ++echo 1 > a ++echo q | darcs rec -am a1 ++darcs ann -p a1 ++echo 2 > a ++echo q | darcs rec -am a2 ++darcs ann -p a2 ++ ++# add some patches for file 'b' ++# expect no dependency questions for file 'b', ++# but every time expect questions for the three patches of file 'a' ++# every 'n' should continue to ask about the next patch ++# the first 'y' should make all following dependencies of 'a' implicit and stop asking ++# 'q' will abort and cause future failure if an unexpected dependency is asked ++touch b ++darcs add b ++# test 0 ++echo n/n/n/q | tr / \\012 | darcs rec -am b0 ++darcs ann -p b0 ++# test 1 ++echo 1 > b ++echo n/n/y/q | tr / \\012 | darcs rec -am b1 ++darcs ann -p b1 | grep '^\[a0' ++# test 2 ++echo 2 > b ++echo n/y/q | tr / \\012 | darcs rec -am b2 ++darcs ann -p b2 | grep '^\[a1' ++# test 3 ++echo 3 > b ++echo y/q | tr / \\012 | darcs rec -am b3 ++darcs ann -p b3 | grep '^\[a2' ++ ++cd .. ++rm -rf temp ++ +diff -ruN darcs-2.0.0/tests/bad-format.sh darcs-2.0.2/tests/bad-format.sh +--- darcs-2.0.0/tests/bad-format.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/bad-format.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -1,15 +1,16 @@ + #!/usr/bin/env bash + set -ev + +-test $DARCS || DARCS=$PWD/../darcs ++## I would use the builtin !, but that has the wrong semantics. ++not () { "$@" && exit 1 || :; } + + rm -rf temp1 temp2 + mkdir temp1 + cd temp1 +-$DARCS initialize --old-fashioned ++darcs initialize --old-fashioned + echo A > foo +-$DARCS add foo +-$DARCS record -a -m AA -A x ++darcs add foo ++darcs record -a -m AA -A x + echo '' > _darcs/format + cd .. + +@@ -18,6 +19,18 @@ + # generated by an older darcs) and an http server fails to produce a 404 + # error code. This is issue757. + +-$DARCS get temp1 temp2 ++darcs get temp1 temp2 ++ ++echo intentional-error >> temp2/_darcs/format ++ ++cat temp2/_darcs/format ++ ++rm -rf temp1 ++ ++not darcs get temp2 temp1 2> err ++ ++cat err ++grep intentional-error err ++grep 'understand repository format' err + + rm -rf temp1 temp2 +diff -ruN darcs-2.0.0/tests/bad-match-pattern.sh darcs-2.0.2/tests/bad-match-pattern.sh +--- darcs-2.0.0/tests/bad-match-pattern.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/bad-match-pattern.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -9,19 +9,17 @@ + + set -ev + +-test $DARCS || DARCS=$PWD/../darcs +- + rm -rf temp1 temp2 + mkdir temp1 + cd temp1 +-$DARCS init ++darcs init + touch foo bar +-$DARCS add foo bar +-$DARCS record -a -m 'add two files' +-$DARCS tag -m tag ++darcs add foo bar ++darcs record -a -m 'add two files' ++darcs tag -m tag + rm foo bar +-$DARCS record -a -m 'rm two files' +-$DARCS tag -m tag2 ++darcs record -a -m 'rm two files' ++darcs tag -m tag2 + + rm -rf _darcs/inventories/* + rm -rf _darcs/patches/* +@@ -30,8 +28,8 @@ + + mkdir temp2 + cd temp2 +-$DARCS init +-! $DARCS pull --match 'foobar' ../temp1 2> error ++darcs init ++! darcs pull --match 'foobar' ../temp1 2> error + cat error + + grep foobar error +diff -ruN darcs-2.0.0/tests/bad_pending_after_pull.sh darcs-2.0.2/tests/bad_pending_after_pull.sh +--- darcs-2.0.0/tests/bad_pending_after_pull.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/bad_pending_after_pull.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -2,32 +2,28 @@ + + set -ev + +-[ -n "$DARCS" ] || DARCS=$PWD/../darcs +-EMAIL=tester +-export EMAIL +- + rm -fr temp1 temp2 + + mkdir temp1 + cd temp1 +-$DARCS init ++darcs init + + echo abc > A +-$DARCS add A ++darcs add A + echo def > B1 +-$DARCS add B1 +-# $DARCS record -all --patch-name patch1 # this way it doesn't trigger the bug +-for i in 1 2 3 4 5 6 7 8 9 11; do echo y; done | $DARCS record --patch-name patch1 ++darcs add B1 ++# darcs record -all --patch-name patch1 # this way it doesn't trigger the bug ++for i in 1 2 3 4 5 6 7 8 9 11; do echo y; done | darcs record --patch-name patch1 + +-$DARCS mv B1 B2 +-$DARCS record --all --patch-name patch2 ++darcs mv B1 B2 ++darcs record --all --patch-name patch2 + cd .. + + mkdir temp2 + cd temp2 +-$DARCS init +-$DARCS pull --all ../temp1 +-$DARCS whatsnew | grep 'No changes' ++darcs init ++darcs pull --all ../temp1 ++darcs whatsnew | grep 'No changes' + cd .. + + rm -fr temp1 temp2 +@@ -36,20 +32,20 @@ + # with a backwards sorting order + mkdir temp1 + cd temp1 +-$DARCS init ++darcs init + echo abc > b +-$DARCS add b +-$DARCS record --all -m patch1 +-$DARCS mv b a ++darcs add b ++darcs record --all -m patch1 ++darcs mv b a + echo def > a +-$DARCS record --all -m patch2 ++darcs record --all -m patch2 + cd .. + + mkdir temp2 + cd temp2 +-$DARCS init +-$DARCS pull --all ../temp1 +-$DARCS whatsnew | grep 'No changes' ++darcs init ++darcs pull --all ../temp1 ++darcs whatsnew | grep 'No changes' + cd .. + + rm -fr temp1 temp2 +diff -ruN darcs-2.0.0/tests/bin/darcs darcs-2.0.2/tests/bin/darcs +--- darcs-2.0.0/tests/bin/darcs 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/bin/darcs 1970-01-01 00:00:00.000000000 +0000 +@@ -1,10 +0,0 @@ +-#!/bin/sh +- +-if test "x$1" = "x--am-I-the-test-wrapper" +-then +- echo "Yes, I am the test wrapper" +- exit 0 +-fi +- +-test $DARCS || DARCS=$HOME/../darcs +-$DARCS "$@" +diff -ruN darcs-2.0.0/tests/checkpoint.sh darcs-2.0.2/tests/checkpoint.sh +--- darcs-2.0.0/tests/checkpoint.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/checkpoint.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -3,44 +3,40 @@ + # A test for unrecording checkpoint tags, inspired by issue517 + + set -ev +-test $DARCS || DARCS=$PWD/../darcs + +-EMAIL=tester +-export EMAIL; +- +-$DARCS --version ++darcs --version + + rm -rf temp temp1 temp2 + mkdir temp + + # This the last commands would blow up if the "--darcs-2" format wasn't used. +-$DARCS init --darcs-2 --repodir temp ++darcs init --darcs-2 --repodir temp + touch temp/x +-$DARCS rec -lam xx --repodir temp +-$DARCS tag -m yy --repodir temp ++darcs rec -lam xx --repodir temp ++darcs tag -m yy --repodir temp + touch temp/z +-$DARCS rec -lam zz --repodir temp +-$DARCS optimize --checkpoint --repodir temp +-$DARCS get --partial temp temp1 +-echo 'y' | $DARCS unrec -p TAG --repodir temp1 ++darcs rec -lam zz --repodir temp ++darcs optimize --checkpoint --repodir temp ++darcs get --partial temp temp1 ++echo 'y' | darcs unrec -p TAG --repodir temp1 + + # Now, the real tests. Do they return sensible results? +-$DARCS get --partial temp1 temp2; +-echo 'n' | $DARCS unrec --repodir temp1 -p 'zz' ++darcs get --partial temp1 temp2; ++echo 'n' | darcs unrec --repodir temp1 -p 'zz' + + rm -rf temp temp1 temp2; +-$DARCS init --darcs-2 --repodir temp ++darcs init --darcs-2 --repodir temp + touch temp/x +-$DARCS rec -lam xx --repodir temp +-$DARCS tag -m yy --repodir temp ++darcs rec -lam xx --repodir temp ++darcs tag -m yy --repodir temp + touch temp/z +-$DARCS rec -lam zz --repodir temp +-$DARCS optimize --checkpoint --repodir temp +-$DARCS get --partial temp temp1 +-echo 'y' | $DARCS unrec -p TAG --repodir temp1 ++darcs rec -lam zz --repodir temp ++darcs optimize --checkpoint --repodir temp ++darcs get --partial temp temp1 ++echo 'y' | darcs unrec -p TAG --repodir temp1 + + # Now, the real tests. Do they return sensible results? +-$DARCS get --partial temp1 temp2; +-echo 'n' | $DARCS unrec --repodir temp1 -p 'zz' ++darcs get --partial temp1 temp2; ++echo 'n' | darcs unrec --repodir temp1 -p 'zz' + + rm -rf temp temp1 temp2; +diff -ruN darcs-2.0.0/tests/conflict-fight-failure.sh darcs-2.0.2/tests/conflict-fight-failure.sh +--- darcs-2.0.0/tests/conflict-fight-failure.sh 1970-01-01 00:00:00.000000000 +0000 ++++ darcs-2.0.2/tests/conflict-fight-failure.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -0,0 +1,54 @@ ++#!/bin/env bash ++# ++# Test darcs conflict fight scenario. ++# ++# Set up two repos RA and RB. Create conflict in RB. ++# After resolving conflict in RB, pull new patch from RA. ++# Repeat, rinse. ++# ++# Author: Pekka Pessi ++# ++ ++set -ev ++ ++record="record --ignore-time --all --author X" ++ ++rm -rf RA RB ++mkdir RA ++ ++cd RA ++echo 0 > file ++darcs init ++darcs add file ++darcs $record -m0 file ++cd .. ++ ++darcs get RA RB ++ ++# Create conflict in RB ++cd RB ++echo let it b > file ++darcs $record -m B ++cd .. ++ ++for i in 1 2 3 4 5 # 6 7 8 9 10 11 12 ++do ++ echo Create new patch A$i in RA ++ cd RA ++ echo a$i > file ++ darcs $record -m A$i ++ cd .. ++ ++ echo Pull patch A$i from RA and get a conflict ++ cd RB ++ time darcs pull ../RA --verbose --all --patch "^A$i\$" ++ cd .. ++ ++ echo Resolve conflict and start fighting by recording B$i ++ cd RB ++ echo let it b > file ++ darcs $record -m B$i ++ cd .. ++done ++ ++rm -rf RA RB +diff -ruN darcs-2.0.0/tests/conflict-fight.sh darcs-2.0.2/tests/conflict-fight.sh +--- darcs-2.0.0/tests/conflict-fight.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/conflict-fight.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -2,82 +2,76 @@ + + set -ev + +-test $DARCS || DARCS=$PWD/../darcs +-ACTUAL_DARCS=`which $DARCS` +-DARCSPATH=`dirname $ACTUAL_DARCS` +-PATH="$DARCSPATH:$PATH" +-export PATH +- + rm -rf temp0 temp1 temp2 + + # step 1 + mkdir temp0 + cd temp0 +-$DARCS init --darcs-2 ++darcs init --darcs-2 + echo temp0 > _darcs/prefs/author + echo m1 > foo +-$DARCS add foo +-$DARCS record -a -m m1 --ignore-times ++darcs add foo ++darcs record -a -m m1 --ignore-times + cd .. + + # step 2 +-$DARCS get temp0 temp1 ++darcs get temp0 temp1 + cd temp1 + echo temp1 > _darcs/prefs/author + echo a1 > foo +-$DARCS record foo -a -m a1 --ignore-times ++darcs record foo -a -m a1 --ignore-times + cd .. + + + # step 3 + cd temp0 + echo m2 > foo +-$DARCS record -a -m m2 --ignore-times ++darcs record -a -m m2 --ignore-times + cd .. + + + # step 4 + cd temp1 +-$DARCS pull -a ++darcs pull -a + echo m2-a1 > foo +-$DARCS record -a -m 'Fix conflict m2-a1' --ignore-times ++darcs record -a -m 'Fix conflict m2-a1' --ignore-times + echo a2 > foo +-$DARCS record -a -m a2 --ignore-times ++darcs record -a -m a2 --ignore-times + cd .. + + #step 5 + cd temp0 + echo m3 > foo +-$DARCS record -a -m m3 --ignore-times ++darcs record -a -m m3 --ignore-times + cd .. + + #step 6 +-$DARCS get temp0 temp2 ++darcs get temp0 temp2 + cd temp2 + echo temp2 > _darcs/prefs/author + echo b1 > foo +-$DARCS record -a -m b1 --ignore-times ++darcs record -a -m b1 --ignore-times + + cd .. + + #step 7 + cd temp0 + echo m4 > foo +-$DARCS record -a -m m4 --ignore-times ++darcs record -a -m m4 --ignore-times + cd .. + + #step 8 + cd temp1 +-$DARCS pull -a ++darcs pull -a + echo m2-a1-m4 > foo +-$DARCS record -a -m 'Fix three-way m2/m2-a1/m4' --ignore-times ++darcs record -a -m 'Fix three-way m2/m2-a1/m4' --ignore-times + echo a3 > foo +-$DARCS record -a -m a3 --ignore-times ++darcs record -a -m a3 --ignore-times + cd .. + + #step 9 + cd temp1 +-$DARCS pull -av ../temp2 ++darcs pull -av ../temp2 + cd .. + + rm -rf temp0 temp1 temp2 +diff -ruN darcs-2.0.0/tests/diff.sh darcs-2.0.2/tests/diff.sh +--- darcs-2.0.0/tests/diff.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/diff.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -1,20 +1,18 @@ + #!/usr/bin/env bash + set -ev + +-test $DARCS || DARCS=$PWD/../darcs +- + rm -rf temp + mkdir temp + echo temp + cd temp + set -e +-$DARCS initialize ++darcs initialize + echo text > afile.txt +-$DARCS add afile.txt +-$DARCS record --author me --all --no-test --patch-name init +-$DARCS diff +-$DARCS diff -p . --store > diffinmem +-$DARCS diff -p . > diffondisk ++darcs add afile.txt ++darcs record --author me --all --no-test --patch-name init ++darcs diff ++darcs diff -p . --store > diffinmem ++darcs diff -p . > diffondisk + + diff diffinmem diffondisk + +diff -ruN darcs-2.0.0/tests/directory_confusion.sh darcs-2.0.2/tests/directory_confusion.sh +--- darcs-2.0.0/tests/directory_confusion.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/directory_confusion.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -1,25 +1,23 @@ + #!/usr/bin/env bash + set -ev + +-test $DARCS || DARCS=$PWD/../darcs +- + T=temp +-rm -rf $T +-mkdir $T +-echo $T +-cd $T ++rm -rf "$T" ++mkdir "$T" ++echo "$T" ++cd "$T" + set -e +-$DARCS initialize ++darcs initialize + echo text > afile.txt +-$DARCS add afile.txt +-$DARCS record --author me --all --no-test --patch-name init ++darcs add afile.txt ++darcs record --author me --all --no-test --patch-name init + mkdir d +-$DARCS add d ++darcs add d + mkdir d/e +-$DARCS add d/e +-$DARCS mv afile.txt d/e/afile.txt ++darcs add d/e ++darcs mv afile.txt d/e/afile.txt + echo altered_text > d/e/afile.txt +-$DARCS record --author me --all --no-test --patch-name confusion ++darcs record --author me --all --no-test --patch-name confusion + test ! -f _darcs/pristine/afile.txt +-echo y/d/y | tr / \\012 | $DARCS unrecord +-rm -rf $T ++echo y/d/y | tr / \\012 | darcs unrecord ++rm -rf "$T" +diff -ruN darcs-2.0.0/tests/external.pl darcs-2.0.2/tests/external.pl +--- darcs-2.0.0/tests/external.pl 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/external.pl 2008-06-24 01:23:13.000000000 +0000 +@@ -12,7 +12,7 @@ + init_tmp_repo(); + + my $touch_fakessh='touch-fakessh'; +-$touch_fakessh.='.bat' if ($^O =~ /msys/i); ++$touch_fakessh.='.bat' if ($^O =~ /(msys|win32)/i); + + cleanup 'fakessh'; + cleanup 'touch-fakessh'; +diff -ruN darcs-2.0.0/tests/get_tag.sh darcs-2.0.2/tests/get_tag.sh +--- darcs-2.0.0/tests/get_tag.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/get_tag.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -1,83 +1,81 @@ + #!/usr/bin/env bash + set -ev + +-test $DARCS || DARCS=$PWD/../darcs +- + rm -rf temp1 temp2 + mkdir temp1 + cd temp1 +-$DARCS initialize ++darcs initialize + echo ALL ignore-times >> _darcs/prefs/defaults + echo A > foo +-$DARCS add foo +-$DARCS record -a -m AA -A x ++darcs add foo ++darcs record -a -m AA -A x + echo B > foo +-$DARCS record -a -m BB -A x ++darcs record -a -m BB -A x + echo C > foo +-$DARCS record -a -m CC -A x +-$DARCS tag -m 1.0 -A x ++darcs record -a -m CC -A x ++darcs tag -m 1.0 -A x + cp foo foo_version_1.0 + echo D > foo +-$DARCS record -a -m DD -A x ++darcs record -a -m DD -A x + echo E > foo +-$DARCS record -a -m EE -A x ++darcs record -a -m EE -A x + echo F > foo +-$DARCS record -a -m FF -A x ++darcs record -a -m FF -A x + + + # Check that get store commuted patches + cd .. +-$DARCS get --tag 1.0 --repo-name temp2 temp1 ++darcs get --tag 1.0 --repo-name temp2 temp1 + cmp temp2/foo temp1/foo_version_1.0 + rm -rf temp1 temp2 temp3 + + mkdir temp1 + cd temp1 +-$DARCS init ++darcs init + cat > file < file < file </dev/null; then +diff -ruN darcs-2.0.0/tests/harness.sh darcs-2.0.2/tests/harness.sh +--- darcs-2.0.0/tests/harness.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/harness.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -1,9 +1,16 @@ + #!/usr/bin/env bash + ++set -ev ++ ++# Print some stuff out for debugging if something goes wrong: ++echo $HOME ++echo $PATH ++which darcs ++command -v darcs ++ + # Check things that should be true when all the testscripts run + +-test -f $HOME/harness.sh || { echo "HOME=\"$HOME\" is not the test suite directory"; exit 1; } +-test -x $HOME/bin/darcs || { echo "$HOME/bin/darcs is not executable"; exit 1; } ++test -f "$HOME"/harness.sh || { echo "HOME=\"$HOME\" is not the test suite directory"; exit 1; } + +-x=`darcs --am-I-the-test-wrapper` +-test "x$x" = "xYes, I am the test wrapper" || { echo "The test wrapper for darcs is not in use"; exit 1; } ++homedirname=`dirname "$HOME"` ++command -v darcs | grep "$homedirname" +diff -ruN darcs-2.0.0/tests/hashed_inventory.sh darcs-2.0.2/tests/hashed_inventory.sh +--- darcs-2.0.0/tests/hashed_inventory.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/hashed_inventory.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -1,6 +1,5 @@ + #!/usr/bin/env bash + +- + set -ev + + # We'd just use `diff -x _darcs -r' if -x was portable. +@@ -17,44 +16,44 @@ + makepristine () { + rm -rf pristine + mkdir pristine +- for i in `$DARCS show files --no-files --no-pending`; do ++ for i in `darcs show files --no-files --no-pending`; do + echo mkdir -p pristine/$i; + mkdir -p pristine/$i; + done +- for i in `$DARCS show files --no-directories --no-pending`; do +- echo $DARCS show contents $i ">" pristine/$i; +- $DARCS show contents $i > pristine/$i; ++ for i in `darcs show files --no-directories --no-pending`; do ++ echo darcs show contents $i ">" pristine/$i; ++ darcs show contents $i > pristine/$i; + cat pristine/$i; + done + } + +-test $DARCS || DARCS=$PWD/../darcs ++ + + rm -rf temp1 temp2 temp3 temp4 temp5 + mkdir temp1 + cd temp1 +-$DARCS init --hashed ++darcs init --hashed + touch foo +-$DARCS add foo +-$DARCS rec -m t1 -a -A tester ++darcs add foo ++darcs rec -m t1 -a -A tester + echo 1 >> foo +-$DARCS what -s | grep -v No\ changes +-$DARCS what -l | grep -v No\ changes +-$DARCS what -sl | grep -v No\ changes ++darcs what -s | grep -v No\ changes ++darcs what -l | grep -v No\ changes ++darcs what -sl | grep -v No\ changes + makepristine + cd .. + +-$DARCS get temp1 temp2 ++darcs get temp1 temp2 + cd temp2 +-$DARCS changes ++darcs changes + makepristine + cd .. + +-$DARCS get --hashed temp1 temp3 ++darcs get --hashed temp1 temp3 + cd temp3 +-$DARCS changes ++darcs changes + cp _darcs/hashed_inventory inv +-$DARCS optimize ++darcs optimize + diff -c inv _darcs/hashed_inventory + rm inv + makepristine +@@ -66,9 +65,9 @@ + diff -rc temp2/pristine temp3/pristine + + cd temp1 +-$DARCS record -a -A tester -m t2 +-$DARCS push ../temp2 -a +-$DARCS push ../temp3 -a ++darcs record -a -A tester -m t2 ++darcs push ../temp2 -a ++darcs push ../temp3 -a + makepristine + cd .. + +@@ -85,14 +84,14 @@ + + cd temp1 + date > foo +-$DARCS record -a -A tester -m t3 ++darcs record -a -A tester -m t3 + makepristine + cd ../temp2 +-$DARCS pull -a ++darcs pull -a + makepristine + cd ../temp3 +-$DARCS pull -a +-$DARCS check ++darcs pull -a ++darcs check + makepristine + cd .. + +@@ -101,7 +100,7 @@ + diff -rc temp2/pristine temp3/pristine + + cd temp1 +-$DARCS put --hashed ../temp4 ++darcs put --hashed ../temp4 + cd .. + cd temp4 + makepristine +@@ -111,84 +110,84 @@ + diff -rc temp2/pristine temp4/pristine + + cd temp1 +-$DARCS tag -A tagger -m atag +-$DARCS check +-$DARCS optimize +-$DARCS check +-$DARCS changes | grep t1 ++darcs tag -A tagger -m atag ++darcs check ++darcs optimize ++darcs check ++darcs changes | grep t1 + cd .. + + cd temp3 + date > foobarpatch +-$DARCS add foobarpatch +-$DARCS record -a -A silly -m foobarpatch +-$DARCS check +-$DARCS optimize +-$DARCS check +-$DARCS pull -a ../temp1 +-$DARCS check +-$DARCS optimize --reorder-patches +-$DARCS check ++darcs add foobarpatch ++darcs record -a -A silly -m foobarpatch ++darcs check ++darcs optimize ++darcs check ++darcs pull -a ../temp1 ++darcs check ++darcs optimize --reorder-patches ++darcs check + grep 'Starting with inventory' _darcs/hashed_inventory + cd .. + + cd temp1 +-$DARCS pull -a ../temp3 ++darcs pull -a ../temp3 + cd .. + + diff -c temp1/_darcs/hashed_inventory temp3/_darcs/hashed_inventory + + cd temp4 +-$DARCS pull -p foobarpatch -a ../temp3 +-$DARCS pull -a ../temp1 +-$DARCS optimize --reorder +-$DARCS check +-$DARCS push ../temp1 ++darcs pull -p foobarpatch -a ../temp3 ++darcs pull -a ../temp1 ++darcs optimize --reorder ++darcs check ++darcs push ../temp1 + cd .. + + diff temp1/_darcs/hashed_inventory temp4/_darcs/hashed_inventory + + rm -rf temp3 +-$DARCS get --old-fashioned temp1 temp3 ++darcs get --old-fashioned temp1 temp3 + +-rm -rf $HOME/.darcs/sources +-echo cache:$HOME/.darcs/cache > $HOME/.darcs/sources +-$DARCS get --hashed temp3 temp5 ++rm -rf "$HOME"/.darcs/sources ++echo cache:"$HOME"/.darcs/cache > "$HOME"/.darcs/sources ++darcs get --hashed temp3 temp5 + rm -rf temp5 + # check that sources directory was created: +-cd $HOME/.darcs/sources && cd - ++cd "$HOME"/.darcs/sources && cd - + +-$DARCS get temp1 temp5 --hashed --old-fashioned ++darcs get temp1 temp5 --hashed --old-fashioned + cd temp5 +-$DARCS obliterate --last 3 -a +-$DARCS pull ../temp1 -a +-$DARCS obliterate --last 3 -a +-$DARCS pull ../temp2 -a +-$DARCS check +-$DARCS obliterate --last 3 -a +-$DARCS pull ../temp3 -a +-$DARCS obliterate --last 3 -a +-$DARCS pull ../temp4 -a ++darcs obliterate --last 3 -a ++darcs pull ../temp1 -a ++darcs obliterate --last 3 -a ++darcs pull ../temp2 -a ++darcs check ++darcs obliterate --last 3 -a ++darcs pull ../temp3 -a ++darcs obliterate --last 3 -a ++darcs pull ../temp4 -a + cd .. + + cd temp4 +-$DARCS obliterate --last 3 -a +-$DARCS pull ../temp5 -a ++darcs obliterate --last 3 -a ++darcs pull ../temp5 -a + cd .. + + cd temp3 +-$DARCS obliterate --last 3 -a +-$DARCS pull ../temp5 -a ++darcs obliterate --last 3 -a ++darcs pull ../temp5 -a + cd .. + + cd temp2 +-$DARCS obliterate --last 3 -a +-$DARCS pull ../temp5 -a ++darcs obliterate --last 3 -a ++darcs pull ../temp5 -a + cd .. + + cd temp1 +-$DARCS obliterate --last 3 -a +-$DARCS pull ../temp5 -a ++darcs obliterate --last 3 -a ++darcs pull ../temp5 -a + cd .. + + rm -rf temp1 temp2 temp3 temp4 temp5 +diff -ruN darcs-2.0.0/tests/haskell_policy.sh darcs-2.0.2/tests/haskell_policy.sh +--- darcs-2.0.0/tests/haskell_policy.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/haskell_policy.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -6,21 +6,21 @@ + + # lookfor ( $1=what, $2=reason ) + lookfor () { +- rm -f $RESULT +- darcs query manifest --repodir=$ROOT | grep '\.l\?hs$' | while read f; do ++ rm -f "$RESULT" ++ darcs query manifest --repodir="$ROOT" | grep '\.l\?hs$' | while read f; do + grep -FHnwe "$1" "$ROOT/$f" | \ +- grep -v ":[0-9]\+:import " | grep -Fv "ratify $1: " >> $RESULT ++ grep -v ":[0-9]\+:import " | grep -Fv "ratify $1: " >> "$RESULT" + done +- if [ -s $RESULT ]; then ++ if [ -s "$RESULT" ]; then + echo "Found the following unratified uses of $1:" + # ugly sed expresion to fix relative paths; think pretty cat +- sed -e 's/[^:]*\/\.\///' $RESULT ++ sed -e 's/[^:]*\/\.\///' "$RESULT" + echo "$2" + echo "Comment 'ratify $1: ' on the same line to allow it" + echo + ERRORSTATUS=1 + fi +- rm -f $RESULT ++ rm -f "$RESULT" + } + + +@@ -34,19 +34,17 @@ + "HopefullyPrivate should not be imported anywhere but Hopefully. It's private!" + + # look for tabs in haskell source +-rm -f $RESULT +-darcs query manifest --repodir=$ROOT | grep '\.l\?hs$' | while read f; do +- grep -FHnwe " " "$ROOT/$f" >> $RESULT ++rm -f "$RESULT" ++darcs query manifest --repodir="$ROOT" | grep '\.l\?hs$' | while read f; do ++ grep -FHnwe " " "$ROOT/$f" >> "$RESULT" + done +-if [ -s $RESULT ]; then ++if [ -s "$RESULT" ]; then + echo "Found the following lines with unwanted tabs:" + # ugly sed expresion to fix relative paths; think pretty cat +- sed -e 's/[^:]*\/\.\///' $RESULT ++ sed -e 's/[^:]*\/\.\///' "$RESULT" + echo + ERRORSTATUS=1 + fi +-rm -f $RESULT ++rm -f "$RESULT" + +- +- +-exit $ERRORSTATUS ++exit "$ERRORSTATUS" +diff -ruN darcs-2.0.0/tests/ignoretimes.sh darcs-2.0.2/tests/ignoretimes.sh +--- darcs-2.0.0/tests/ignoretimes.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/ignoretimes.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -1,32 +1,28 @@ + #!/usr/bin/env bash + + set -ev +-test $DARCS || DARCS=$PWD/../darcs + + rm -rf temp1 + + mkdir temp1 + cd temp1 +-$DARCS init ++darcs init + echo -e 'foo\nbar\nbaz' > f +-$DARCS rec -Ax -alm p1 ++darcs rec -Ax -alm p1 + echo -e 'foo\nbar\nwibble' > f +-$DARCS rec -Ax -alm p2 ++darcs rec -Ax -alm p2 + sleep 1 # ensure the timestamps would differ after this change alone + echo -e 'baz\nbar\nwibble' > f + +-# unset $HOME to get rid of --ignore-times that is in $HOME/.darcs/defaults +-export HOME= +- + # check that wh (without --ignore-times) sees the change now +-$DARCS wh > whatsnew ++darcs wh > whatsnew + grep 'foo' whatsnew + + # the problematic unpull +-$DARCS unpull --last 1 -a --ignore-times ++darcs unpull --last 1 -a --ignore-times + + # whatsnew will now think there are no changes without --ignore-times +-$DARCS wh > whatsnew ++darcs wh > whatsnew + grep 'foo' whatsnew + + cd .. +diff -ruN darcs-2.0.0/tests/illegal_mv.sh darcs-2.0.2/tests/illegal_mv.sh +--- darcs-2.0.0/tests/illegal_mv.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/illegal_mv.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -1,19 +1,17 @@ + #!/usr/bin/env bash + set -ev + +-test $DARCS || DARCS=$PWD/../darcs +- + rm -rf temp + mkdir temp + cd temp + +-$DARCS initialize ++darcs initialize + echo text > afile.txt +-$DARCS add afile.txt +-$DARCS record --author me --all --no-test --patch-name init ++darcs add afile.txt ++darcs record --author me --all --no-test --patch-name init + mkdir d + echo The following mv should fail, since d isnt in the repo. +-if $DARCS mv afile.txt d/afile.txt; then ++if darcs mv afile.txt d/afile.txt; then + false + fi + +diff -ruN darcs-2.0.0/tests/impossible_unrevert.sh darcs-2.0.2/tests/impossible_unrevert.sh +--- darcs-2.0.0/tests/impossible_unrevert.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/impossible_unrevert.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -1,33 +1,32 @@ + #!/usr/bin/env bash + set -ev + +-test $DARCS || DARCS=$PWD/../darcs + rm -rf temp + mkdir temp + cd temp +-$DARCS init ++darcs init + echo ALL ignore-times > _darcs/prefs/defaults + echo a > foo +-$DARCS add foo +-$DARCS record -a -m aa -A test ++darcs add foo ++darcs record -a -m aa -A test + echo b > foo +-echo y | $DARCS revert -a +-echo y/d/y | tr / \\012 | $DARCS unrecord ++echo y | darcs revert -a ++echo y/d/y | tr / \\012 | darcs unrecord + # since the unrevert is impossible, we should fail if it succeeds... +-echo y | $DARCS unrevert && exit 1 || true ++echo y | darcs unrevert && exit 1 || true + + # now let's try a possible unrevert, just for fun... + echo b >> foo +-$DARCS record -a -m bb -A test ++darcs record -a -m bb -A test + echo f/b | tr / \\012 > foo +-$DARCS record -a -m 'aaa becomes f' -A test ++darcs record -a -m 'aaa becomes f' -A test + date >> foo +-echo y | $DARCS revert -a +-echo y/d/y | tr / \\012 | $DARCS unpull ++echo y | darcs revert -a ++echo y/d/y | tr / \\012 | darcs unpull + # Now add the date back on at the end: +-echo y | $DARCS unrevert ++echo y | darcs unrevert + echo 'M ./foo +1' > correct_summary +-$DARCS whatsnew --dont-look-for-adds --summary > actual_summary ++darcs whatsnew --dont-look-for-adds --summary > actual_summary + diff -c correct_summary actual_summary + + cd .. +diff -ruN darcs-2.0.0/tests/invalid_pending_after_mv_to_self.sh darcs-2.0.2/tests/invalid_pending_after_mv_to_self.sh +--- darcs-2.0.0/tests/invalid_pending_after_mv_to_self.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/invalid_pending_after_mv_to_self.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -4,25 +4,15 @@ + + set -ev + +-test $DARCS || DARCS=$PWD/../darcs +-ACTUAL_DARCS=`which $DARCS` +-DARCSPATH=`dirname $ACTUAL_DARCS` +-PATH="$DARCSPATH:$PATH" +-export PATH +-echo $PATH +- +-EMAIL=tester +-export EMAIL +- + rm -rf temp + mkdir temp + cd temp +-$DARCS init ++darcs init + mkdir dir + touch dir/t.t +-$DARCS add dir +-$DARCS add dir/t.t +-$DARCS record -am 'initial add' ++darcs add dir ++darcs add dir/t.t ++darcs record -am 'initial add' + + # grand finale? Can we move the file to itself? + darcs mv dir/t.t dir/ +diff -ruN darcs-2.0.0/tests/issue194.sh darcs-2.0.2/tests/issue194.sh +--- darcs-2.0.0/tests/issue194.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/issue194.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -1,32 +1,26 @@ + set -ev + +-test $DARCS || DARCS=$PWD/../darcs +-ACTUAL_DARCS=`which $DARCS` +-DARCSPATH=`dirname $ACTUAL_DARCS` +-PATH="$DARCSPATH:$PATH" +-export PATH +- + rm -rf temp1 temp2 + +-mkdir temp1; cd temp1 ; $DARCS init ; cd .. +-$DARCS get temp1 temp2 ++mkdir temp1; cd temp1 ; darcs init ; cd .. ++darcs get temp1 temp2 + cd temp2/ ; echo 'x' > _darcs/prefs/author ; cd .. + cd temp1/ ; echo 'x' > _darcs/prefs/author ; cd .. + + cd temp1/ +-touch test ; $DARCS record +-$DARCS add test ; $DARCS record -a -m 'test' +-$DARCS mv test best ; $DARCS record -a -m 'test -> best' +-$DARCS mv best test ; $DARCS record -a -m 'best -> test' ++touch test ; darcs record ++darcs add test ; darcs record -a -m 'test' ++darcs mv test best ; darcs record -a -m 'test -> best' ++darcs mv best test ; darcs record -a -m 'best -> test' + cd .. + + cd temp2/ + touch test2 +-$DARCS add test2 ; $DARCS record -a -m 'test2' +-$DARCS mv test2 best ; $DARCS record -a -m 'test2 -> best' +-$DARCS mv best test2 ; $DARCS record -a -m 'best -> test2' ++darcs add test2 ; darcs record -a -m 'test2' ++darcs mv test2 best ; darcs record -a -m 'test2 -> best' ++darcs mv best test2 ; darcs record -a -m 'best -> test2' + +-$DARCS pull ../temp1/ -a ++darcs pull ../temp1/ -a + cd .. + + rm -rf temp1 temp2 +diff -ruN darcs-2.0.0/tests/issue257.sh darcs-2.0.2/tests/issue257.sh +--- darcs-2.0.0/tests/issue257.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/issue257.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -1,24 +1,22 @@ + #!/usr/bin/env bash + set -ev + +-test $DARCS || DARCS=$PWD/../darcs +- + rm -rf tempc + mkdir tempc + cd tempc +-$DARCS init ++darcs init + echo foo > foo.c +-$DARCS rec -Ax -alm init ++darcs rec -Ax -alm init + cd .. + rm -rf temps +-$DARCS get tempc temps ++darcs get tempc temps + cd temps + echo server >> foo.c +-$DARCS rec -Ax -alm server ++darcs rec -Ax -alm server + cd ../tempc + echo client >> foo.c +-$DARCS rec -Ax -alm client +-if $DARCS push -a ../temps; then ++darcs rec -Ax -alm client ++if darcs push -a ../temps; then + false + fi + cd .. +diff -ruN darcs-2.0.0/tests/issue381.sh darcs-2.0.2/tests/issue381.sh +--- darcs-2.0.0/tests/issue381.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/issue381.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -3,7 +3,6 @@ + + # for issue381: "darcs send -o message --edit-description doesn't work" + +-test $DARCS || DARCS=$PWD/../darcs + DARCS_EDITOR=echo + export DARCS_EDITOR + +@@ -11,14 +10,14 @@ + mkdir temp1 temp2 + + cd temp2 +-$DARCS init ++darcs init + cd .. + + cd temp1 +-$DARCS init ++darcs init + echo Hello world > foobar +-$DARCS add foobar +-$DARCS record -a -A me -m add_foobar ++darcs add foobar ++darcs record -a -A me -m add_foobar + + # Test that editor is called when --output is used with --edit-description + echo This is a note > note +@@ -36,7 +35,7 @@ + + chmod +x editor + +-DARCS_EDITOR=./editor "$DARCS" send --debug --author=me -a --output=bundle --edit-description ../temp2 ++DARCS_EDITOR='bash editor' darcs send --debug --author=me -a --output=bundle --edit-description ../temp2 + + echo === beginning of bundle > === + cat bundle +@@ -45,7 +44,7 @@ + grep ' add_foobar' bundle + grep 'finished editing' bundle + +-IFS=' ' "$DARCS" send --author=me -a --subject="it works" --to user@place.org --sendmail-command='grep "^Subject: it works$" %<' ../temp2 ++IFS=' ' darcs send --author=me -a --subject="it works" --to user@place.org --sendmail-command='grep "^Subject: it works$" %<' ../temp2 + + cd .. + rm -rf temp1 temp2 +diff -ruN darcs-2.0.0/tests/issue436.sh darcs-2.0.2/tests/issue436.sh +--- darcs-2.0.0/tests/issue436.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/issue436.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -1,35 +1,29 @@ + #!/usr/bin/env bash + set -ev + +-test $DARCS || DARCS=$PWD/../darcs +-ACTUAL_DARCS=`which $DARCS` +-DARCSPATH=`dirname $ACTUAL_DARCS` +-PATH="$DARCSPATH:$PATH" +-export EMAIL=test +-export PATH +- ++rm -rf temp1 temp2 + mkdir temp1 + cd temp1 + # this test fails in the darcs 1 format +-$DARCS init --darcs-2 ++darcs init --darcs-2 + echo A > f +-$DARCS add f +-$DARCS record --ignore-times -a -m A ++darcs add f ++darcs record --ignore-times -a -m A + cd .. + +-$DARCS get temp1 temp2 ++darcs get temp1 temp2 + + cd temp1 + echo C > f +-$DARCS record --ignore-times -a -m A-C ++darcs record --ignore-times -a -m A-C + cd .. + + cd temp2 + echo B > f +-$DARCS record --ignore-times -a -m A-B ++darcs record --ignore-times -a -m A-B + echo A > f +-$DARCS record --ignore-times -a -m B-A +-($DARCS push -a || :) 2> push-result ++darcs record --ignore-times -a -m B-A ++(darcs push -a || :) 2> push-result + grep "Refusing to apply" push-result + cd .. + +diff -ruN darcs-2.0.0/tests/issue458.sh darcs-2.0.2/tests/issue458.sh +--- darcs-2.0.0/tests/issue458.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/issue458.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -2,20 +2,24 @@ + ### http://bugs.darcs.net/issue458 + ### darcs get --set-scripts-executable ignores umask + set -ev +-: ${DARCS:=$PWD/../darcs} +-: ${DARCS_EMAIL:=tester} +-export DARCS_EMAIL ++ ++## Windows doesn't support proper permissions. ++ ++if echo $OS | grep -i windows; then ++ echo Windows does not support posix permissions ++ exit 0 ++fi + + rm -rf temp + mkdir temp + cd temp + + mkdir repo1 +-$DARCS initialize --repodir repo1 ++darcs initialize --repodir repo1 + printf >repo1/x '#!/bin/sh\ntrue' # make a shebang'd script +-$DARCS record --repodir repo1 -lam x x ++darcs record --repodir repo1 -lam x x + umask 077 # DENY ALL access to group, all +-$DARCS get --set-scripts-executable repo1 repo2 ++darcs get --set-scripts-executable repo1 repo2 + ls -l repo2/x | cut -f 1 -d\ > mode + echo -rwx------ > desired-mode + diff -u desired-mode mode +diff -ruN darcs-2.0.0/tests/issue538.sh darcs-2.0.2/tests/issue538.sh +--- darcs-2.0.0/tests/issue538.sh 1970-01-01 00:00:00.000000000 +0000 ++++ darcs-2.0.2/tests/issue538.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -0,0 +1,117 @@ ++#!/bin/env bash ++# A test for issue 538 - that an executable test script will run successfully if ++# it is recorded with --set-scripts-executable. ++ ++set -ev ++ ++if echo $OS | grep -i windows; then ++ echo I do not know how to run a test program under windows ++ exit 0 ++fi ++ ++function make_repo_with_test { ++ mkdir temp1 ; cd temp1 ; darcs init ++ echo "#!/bin/sh" > test.sh ++ echo "echo 'hello world'" >> test.sh ++ darcs add test.sh ++ darcs record --author=test@test -am test ++ darcs setpref test './test.sh' ++} ++ ++# test record with --set-scripts-executable ++rm -rf temp1 ++make_repo_with_test ++touch blaat ++darcs add blaat ++if darcs record --set-scripts-executable -A test@test -am blaat ; then ++ echo "ok 1" ++else ++ echo "not ok 1 recording second patch failed (because test failed?)" ++ exit 1 ++fi ++cd .. ++ ++# test record without --set-scripts-executable ++rm -rf temp1 ++make_repo_with_test ++touch blaat ++darcs add blaat ++if darcs record --dont-set-scripts-executable -A test@test -am blaat ; then ++ echo "not ok 2 recording second patch succeeded though test script should not be executable" ++ exit 1 ++else ++ echo "ok 2" ++fi ++cd .. ++ ++# test amend-record with --set-scripts-executable ++rm -rf temp1 ++make_repo_with_test ++touch blaat ++darcs add blaat ++if echo y | darcs amend-record --set-scripts-executable -A test@test -a ; then ++ echo "ok 3" ++else ++ echo "not ok 3 amending patch failed (because test failed?)" ++ exit 1 ++fi ++cd .. ++ ++# test amend-record without --set-scripts-executable ++rm -rf temp1 ++make_repo_with_test ++touch blaat ++darcs add blaat ++if echo y | darcs amend-record --dont-set-scripts-executable -A test@test -a /dev/null ; then ++ echo "not ok 4 amending patch succeeded even though --dont-set-scripts-executable specified" ++ exit 1 ++else ++ echo "ok 4" ++fi ++cd .. ++ ++# trackdown with --set-scripts-executable ++rm -rf temp1 ++make_repo_with_test ++if darcs trackdown --set-scripts-executable | grep 'Success!' ; then ++ echo "ok 5" ++else ++ echo "not ok 5 tracking down with --set-scripts-executable failed (because test failed?)" ++ exit 1 ++fi ++cd .. ++ ++# trackdown without --set-scripts-executable ++rm -rf temp1 ++make_repo_with_test ++if darcs trackdown --dont-set-scripts-executable | grep 'Noone passed the test!' ; then ++ echo "ok 6" ++else ++ echo "not ok 6 tracking down did not find failure even though --dont-set-scripts-executable was given" ++ exit 1 ++fi ++cd .. ++ ++# check trackdown with files that become scripts during trackdown ++rm -rf temp1 ++mkdir temp1 ; cd temp1 ; darcs init ++echo "#!/bin/sh" > test.sh ++echo "./helper.sh" >> test.sh ++echo "#!/bin/sh" > helper.sh ++echo "echo 'helper speaking'" >> helper.sh ++darcs add test.sh ++darcs add helper.sh ++darcs record -am 'valid helper' -A test ++echo 'this is definitely not a valid script' > helper.sh ++darcs record -am 'invalid helper' -A test ++darcs setpref test './test.sh' ++darcs trackdown --set-scripts-executable > trackdown-out ++if grep 'Test failed!' trackdown-out && grep 'Success!' trackdown-out ; then ++ echo "ok 7" ++else ++ echo "not ok 7 either no failure or no success (both should occur)" ++ exit 1 ++fi ++cd .. ++ ++rm -rf temp1 +diff -ruN darcs-2.0.0/tests/issue588.sh darcs-2.0.2/tests/issue588.sh +--- darcs-2.0.0/tests/issue588.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/issue588.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -4,37 +4,29 @@ + + set -ev + +-test $DARCS || DARCS=$PWD/../darcs +-ACTUAL_DARCS=`which $DARCS` +-DARCSPATH=`dirname $ACTUAL_DARCS` +-PATH="$DARCSPATH:$PATH" +-export PATH +- + rm -rf temp1 +-$DARCS init --repodir temp1 +- +-export EMAIL=me ++darcs init --repodir temp1 + + # Setup f with contents foo. + echo foo > temp1/f +-$DARCS add --repodir temp1 f +-$DARCS rec --repodir temp1 -am p1 ++darcs add --repodir temp1 f ++darcs rec --repodir temp1 -am p1 + + # Remove f, and amend p1, but only the hunk not the rmfile. + # Here we use look-for-adds to trigger the bug + rm temp1/f +-echo yyd | $DARCS amend-record --repodir temp1 --look-for-adds ++echo yyd | darcs amend-record --repodir temp1 --look-for-adds + +-$DARCS changes --repodir temp1 --last 1 -v ++darcs changes --repodir temp1 --last 1 -v + + echo show the buggy pending + cat temp1/_darcs/patches/pending + + echo bar > temp1/f +-echo y | $DARCS amend-record --repodir temp1 --all ++echo y | darcs amend-record --repodir temp1 --all + +-$DARCS changes --repodir temp1 --last 1 -v ++darcs changes --repodir temp1 --last 1 -v + +-$DARCS check --repodir temp1 --no-test ++darcs check --repodir temp1 --no-test + + rm -rf temp1 +diff -ruN darcs-2.0.0/tests/issue706.sh darcs-2.0.2/tests/issue706.sh +--- darcs-2.0.0/tests/issue706.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/issue706.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -3,21 +3,20 @@ + + # for issue706: "Filenames with spaces issue" + +-test $DARCS || DARCS=$PWD/../darcs + DARCS_EDITOR=echo + export DARCS_EDITOR + + rm -rf temp + mkdir temp + cd temp +-$DARCS init ++darcs init + + touch 'A B' + +-$DARCS add 'A B' +-$DARCS rec -a -m 'a b' -A me ++darcs add 'A B' ++darcs rec -a -m 'a b' -A me + ls +-$DARCS check ++darcs check + + cd .. + rm -rf temp +diff -ruN darcs-2.0.0/tests/issue803.sh darcs-2.0.2/tests/issue803.sh +--- darcs-2.0.0/tests/issue803.sh 1970-01-01 00:00:00.000000000 +0000 ++++ darcs-2.0.2/tests/issue803.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -0,0 +1,33 @@ ++#!/usr/bin/env bash ++ ++# http://bugs.darcs.net/issue803: Darcs 2.0 regression on manual renames ++ ++set -ev ++ ++## I would use the builtin !, but that has the wrong semantics. ++not () { "$@" && exit 1 || :; } ++ ++rm -rf temp ++mkdir temp ++cd temp ++darcs init ++ ++touch a.txt ++darcs add a.txt ++darcs record -a -m "First" -A me ++ ++mkdir subdir ++darcs add subdir ++darcs record -a -m "Second" -A me ++ ++mv a.txt subdir/ ++darcs mv a.txt subdir/a.txt ++darcs record -a -m "Third" -A me ++ ++darcs changes --last 1 -v > stdout ++cat stdout ++ ++not grep 'rmfile' stdout ++ ++cd .. ++rm -rf temp +diff -ruN darcs-2.0.0/tests/justrm.sh darcs-2.0.2/tests/justrm.sh +--- darcs-2.0.0/tests/justrm.sh 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/tests/justrm.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -1,17 +1,15 @@ + #!/usr/bin/env bash + set -ev + +-test $DARCS || DARCS=$PWD/../darcs +- + rm -rf temp1 + mkdir temp1 + cd temp1 +-$DARCS init ++darcs init + touch foo +-$DARCS add foo +-$DARCS record -a -m add_foo -A x ++darcs add foo ++darcs record -a -m add_foo -A x + rm foo +-$DARCS whatsnew ++darcs whatsnew + cd .. + rm -rf temp1 + +diff -ruN darcs-2.0.0/tests/lib/perl/Test/Darcs.pm darcs-2.0.2/tests/lib/perl/Test/Darcs.pm +--- darcs-2.0.0/tests/lib/perl/Test/Darcs.pm 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/tests/lib/perl/Test/Darcs.pm 2008-06-24 01:23:13.000000000 +0000 +@@ -32,11 +32,14 @@ + # Used for finding darcs, but may not be defined by the shell + $ENV{PWD} = cwd(); + +-# Put a false darcs first in PATH +-$ENV{PATH} = "$ENV{HOME}/bin:$ENV{PATH}"; +- +-# Call the builtin, not the one Shell::Command exports. +-CORE::chmod 0755, 'bin/darcs'; ++# Put the right darcs first in PATH ++my $darcspath="$ENV{HOME}/.."; ++if ($ENV{DARCS}) { ++ # User has asked for a particular darcs... ++ my $actualdarcs=`which $ENV{DARCS}`; ++ my $darcspath=`dirname "$actualdarcs"`; ++} ++$ENV{PATH} = "$darcspath:$ENV{PATH}"; + + # Set a default author e-mail address to simplify test script creation. + $ENV{EMAIL} = $ENV{DARCS_EMAIL} = 'tester'; +@@ -86,21 +89,11 @@ + =cut + + use vars '$DARCS'; +-sub _find_darcs { +- return $DARCS if defined $DARCS; +- +- my $darcs = $ENV{DARCS} || "$ENV{PWD}/../darcs"; +- die "darcs not found as $darcs" unless -x $darcs; +- $DARCS = $darcs; +- +- return $DARCS; +-} + + sub darcs (@) { + my @commands = @_; +- my $darcs = _find_darcs; + # The inclusion of "IFS" prevents a space in the path to darcs from causing a problem. +- my $out = `IFS='' "$darcs" @commands 2>&1`; ++ my $out = `darcs @commands 2>&1`; + + diag "DEBUG output for darcs @commands:\n\t$out" if ($DEBUG && $out); + return $out; +@@ -122,15 +115,13 @@ + my $first_input = shift; + my @rest_of_input = @_; + +- my $darcs = _find_darcs; +- + # This file receives superfluous input not read by darcs. + my $fh = File::Temp->new; + my $filename = $fh->filename; + + local(*READ, *WRITE); + use IPC::Open2; +- my $pid = open2(*READ, *WRITE, qq( "$darcs" $command ; cat > $filename)); ++ my $pid = open2(*READ, *WRITE, qq( 'darcs' $command ; cat > $filename)); + print WRITE "$first_input"; + for my $i (@rest_of_input) { + print WRITE "\n$i"; +@@ -172,29 +163,21 @@ + + =cut + +-# Using a package scope keeps the variable in scope until the script exits, +-# which helps with the automatic clean-up. +-our $dir; + sub init_tmp_repo { + my @args_to_init = @_; + +- use FindBin '$RealScript'; +- +- # Make a tempdir name based on the current script' +- $dir = $RealScript.'-tmpdir'; +- + # For good measure, delete the directory if it already exists so we can start clean; +- rm_rf "$dir"; ++ rm_rf 'temp'; + +- mkdir $dir || die "couldn't makdir $dir: $!"; ++ mkdir 'temp' || die "couldn't makdir temp: $!"; + + # Self destruct the directory unless we ask it not to. +- END { chdir; rm_rf "$dir" unless $ENV{DARCS_KEEP_TMPDIR}; }; ++ END { chdir; rm_rf "temp" unless $ENV{DARCS_KEEP_TMPDIR}; }; + +- chdir $dir || die "couldn't chdir to $dir: $!"; ++ chdir 'temp' || die "couldn't chdir to temp: $!"; + darcs('init',@args_to_init); + +- return $dir; ++ return 'temp'; + } + + # The following is a workaround for a bug in Shell::Command which emits an +diff -ruN darcs-2.0.0/tests/look_for_add.sh darcs-2.0.2/tests/look_for_add.sh +--- darcs-2.0.0/tests/look_for_add.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/look_for_add.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -13,23 +13,22 @@ + + set -ev + +-test $DARCS || DARCS=$PWD/../darcs + rm -rf temp1 temp2 + mkdir temp1 temp2 + cd temp1 +-$DARCS init ++darcs init + mkdir dir +-$DARCS record -a -m add_dir -A x --look-for-adds ++darcs record -a -m add_dir -A x --look-for-adds + check_empty_pending + echo zig > dir/foo + echo zag > foo + mkdir dir2 + echo hi > dir2/foo2 +-$DARCS record -a -m add_foo -A x --look-for-adds ++darcs record -a -m add_foo -A x --look-for-adds + check_empty_pending + cd ../temp2 +-$DARCS init +-$DARCS pull -a ../temp1 ++darcs init ++darcs pull -a ../temp1 + cd .. + cmp temp1/dir2/foo2 temp2/dir2/foo2 + cmp temp1/dir/foo temp2/dir/foo +diff -ruN darcs-2.0.0/tests/match.pl darcs-2.0.2/tests/match.pl +--- darcs-2.0.0/tests/match.pl 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/tests/match.pl 2008-06-24 01:23:13.000000000 +0000 +@@ -159,7 +159,9 @@ + + # cvs dates + parse_date '2006/01/19 21:14:20 UTC'; +-match_date "$year/$mm/$dd $hhmmss"; ++# We can't handle all timezones in the old style dates ++# so this test will not work everywhere ++# match_date "$year/$mm/$dd $hhmmss $tz"; + + # ------------------------------------------------------------------- + # matching on atomic stuff (other than date) +diff -ruN darcs-2.0.0/tests/mergeresolved.sh darcs-2.0.2/tests/mergeresolved.sh +--- darcs-2.0.0/tests/mergeresolved.sh 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/tests/mergeresolved.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -1,38 +1,36 @@ + #!/usr/bin/env bash + set -ev + +-test $DARCS || DARCS=$PWD/../darcs +- + rm -rf fooOld tempA tempB + mkdir fooOld tempA tempB + cd fooOld +-$DARCS init ++darcs init + echo record author me > _darcs/prefs/defaults + echo ALL all >> _darcs/prefs/defaults + #echo ALL verbose >> _darcs/prefs/defaults + echo ALL ignore-times >> _darcs/prefs/defaults + echo Old > foo +-$DARCS add foo +-$DARCS record -m Old ++darcs add foo ++darcs record -m Old + cd .. + + cd tempA +-$DARCS init ++darcs init + cp ../fooOld/_darcs/prefs/defaults _darcs/prefs +-$DARCS pull ../fooOld ++darcs pull ../fooOld + echo A > foo +-$DARCS record -m AA ++darcs record -m AA + cd .. + + cd tempB +-$DARCS init ++darcs init + cp ../fooOld/_darcs/prefs/defaults _darcs/prefs +-$DARCS pull ../fooOld ++darcs pull ../fooOld + echo B > foo +-$DARCS record -m BB +-$DARCS pull ../tempA ++darcs record -m BB ++darcs pull ../tempA + echo A > foo +-$DARCS record -m "ok A's fine." ++darcs record -m "ok A's fine." + cd .. + + # At this point, tempB and tempA should agree--since the conflict was +@@ -41,15 +39,15 @@ + + cd tempA + echo AA > foo +-$DARCS record -m "AA -- upping the ante." ++darcs record -m "AA -- upping the ante." + cd .. + + cd tempB +-$DARCS pull ../tempA ++darcs pull ../tempA + cd .. + + cd tempA +-$DARCS pull ../tempB ++darcs pull ../tempB + cd .. + + # At this point, tempB and tempA should agree since we have pulled both ways. +diff -ruN darcs-2.0.0/tests/merge_three_patches.sh darcs-2.0.2/tests/merge_three_patches.sh +--- darcs-2.0.0/tests/merge_three_patches.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/merge_three_patches.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -1,12 +1,10 @@ + #!/usr/bin/env bash + set -ev + +-test $DARCS || DARCS=$PWD/../darcs +- + rm -rf tempOld tempA tempB + mkdir tempOld tempA + cd tempOld +-$DARCS initialize ++darcs initialize + echo record author me > _darcs/prefs/defaults + echo ALL all >> _darcs/prefs/defaults + #echo ALL verbose >> _darcs/prefs/defaults +@@ -19,33 +17,33 @@ + echo F >> foo + echo G >> foo + echo H >> foo +-$DARCS add foo +-$DARCS record -m Old ++darcs add foo ++darcs record -m Old + cd .. + + cd tempA +-$DARCS initialize ++darcs initialize + cp ../tempOld/_darcs/prefs/defaults _darcs/prefs +-$DARCS pull ../tempOld ++darcs pull ../tempOld + cp foo temp + cat temp | grep -v A | grep -v B | grep -v D | sed s/E/e/ \ + | grep -v G | sed s/H/h/ > foo +-$DARCS record -m AA ++darcs record -m AA + cd .. + +-$DARCS get tempOld tempB ++darcs get tempOld tempB + cd tempB + cp ../tempOld/_darcs/prefs/defaults _darcs/prefs + echo 7 > foo +-$DARCS record -m BB +-$DARCS pull ../tempA +-$DARCS record -m "conflict resolution" ++darcs record -m BB ++darcs pull ../tempA ++darcs record -m "conflict resolution" + cd .. + + cd tempA +-$DARCS pull ../tempB +-$DARCS annotate -p B +-$DARCS annotate -p resolution ++darcs pull ../tempB ++darcs annotate -p B ++darcs annotate -p resolution + cd .. + + cmp tempA/foo tempB/foo +diff -ruN darcs-2.0.0/tests/mv_and_remove_tests.sh darcs-2.0.2/tests/mv_and_remove_tests.sh +--- darcs-2.0.0/tests/mv_and_remove_tests.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/mv_and_remove_tests.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -1,50 +1,48 @@ + #!/usr/bin/env bash + set -ev + +-test $DARCS || DARCS=$PWD/../darcs +- + rm -rf temp + mkdir temp + cd temp + +-$DARCS init ++darcs init + touch fee fi fo fum +-$DARCS add f* +-$DARCS record --author me --all --no-test --patch-name add ++darcs add f* ++darcs record --author me --all --no-test --patch-name add + mkdir d +-$DARCS add d +-$DARCS mv f* d +-$DARCS remove d/fi ++darcs add d ++darcs mv f* d ++darcs remove d/fi + cd d +-$DARCS remove fo ++darcs remove fo + echo let us have fun > fun +-$DARCS add fun +-$DARCS mv fun fum .. +-$DARCS record --author me --all --no-test --patch-name mv ++darcs add fun ++darcs mv fun fum .. ++darcs record --author me --all --no-test --patch-name mv + cd .. + +-if $DARCS show files | egrep '^./fee$'; then false; else true; fi ++if darcs show files | egrep '^./fee$'; then false; else true; fi + test ! -f fee +-$DARCS show contents d/fee | cmp d/fee - ++darcs show contents d/fee | cmp d/fee - + + test ! -f fi + test -f d/fi +-if $DARCS show files | egrep '^./fi$'; then false; else true; fi +-if $DARCS show files | egrep '^./d/fi$'; then false; else true; fi ++if darcs show files | egrep '^./fi$'; then false; else true; fi ++if darcs show files | egrep '^./d/fi$'; then false; else true; fi + + test ! -f fo + test -f d/fo +-if $DARCS show files | egrep '^./fo$'; then false; else true; fi +-if $DARCS show files | egrep '^./d/fo$'; then false; else true; fi ++if darcs show files | egrep '^./fo$'; then false; else true; fi ++if darcs show files | egrep '^./d/fo$'; then false; else true; fi + +-$DARCS show contents fun | cmp fun - +-$DARCS show contents fum | cmp fum - ++darcs show contents fun | cmp fun - ++darcs show contents fum | cmp fum - + +-$DARCS mv fun d +-$DARCS record -A me -a --no-test -m "fun again" +-$DARCS show content d/fun | cmp d/fun - ++darcs mv fun d ++darcs record -A me -a --no-test -m "fun again" ++darcs show content d/fun | cmp d/fun - + test ! -f fun +-if $DARCS show files | egrep '^./fun$'; then false; else true; fi ++if darcs show files | egrep '^./fun$'; then false; else true; fi + + # Now clean up. + cd .. +diff -ruN darcs-2.0.0/tests/mv.pl darcs-2.0.2/tests/mv.pl +--- darcs-2.0.0/tests/mv.pl 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/mv.pl 2008-06-24 01:23:13.000000000 +0000 +@@ -84,7 +84,7 @@ + touch 'cs-n-3'; + touch 'cs-y-3'; + darcs qw/add cs-n-3 cs-y-3/; +-if ($^O =~ /msys/i) { ++if ($^O =~ /(msys|win32)/i) { + # afaik, windows does not support hard links + pass ('cannot run this test -- windows does not have hard links'); + pass ('cannot run this test -- windows does not have hard links'); +diff -ruN darcs-2.0.0/tests/mv.sh darcs-2.0.2/tests/mv.sh +--- darcs-2.0.0/tests/mv.sh 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/tests/mv.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -1,37 +1,53 @@ + #!/usr/bin/env bash + set -ev + +-test $DARCS || DARCS=$PWD/../darcs + rm -rf temp + mkdir temp + cd temp +-$DARCS init ++darcs init + echo hi world > temp.c +-$DARCS add temp.c +-$DARCS record --all -A test --patch-name=hi ++darcs add temp.c ++darcs record --all -A test --patch-name=hi + echo goodbye >> temp.c +-$DARCS whatsnew +-$DARCS record -a -A au -m bye ++darcs whatsnew ++darcs record -a -A au -m bye + echo bar > bar.c +-$DARCS add bar.c +-$DARCS record -a -m one -A ex +-$DARCS mv bar.c zig.c +-$DARCS whatsnew +-$DARCS record -a -m two -A ex ++darcs add bar.c ++darcs record -a -m one -A ex ++darcs mv bar.c zig.c ++darcs whatsnew ++darcs record -a -m two -A ex + mkdir baz +-$DARCS add baz +-$DARCS whatsnew +-$DARCS record -a -m three -A ex +-$DARCS mv zig.c baz/bar.c +-$DARCS whatsnew +-$DARCS record -a -m four -A ex +-$DARCS mv baz temp +-$DARCS whatsnew +-$DARCS record -a -m five -A ex ++darcs add baz ++darcs whatsnew ++darcs record -a -m three -A ex ++darcs mv zig.c baz/bar.c ++darcs whatsnew ++darcs record -a -m four -A ex ++darcs mv baz temp ++darcs whatsnew ++darcs record -a -m five -A ex + +-$DARCS mv temp temp 1> stdout 2> stderr || true ++darcs mv temp temp 1> stdout 2> stderr || true + grep 'Cannot rename a file or directory onto itself' stderr + + cd .. ++ + rm -rf temp ++mkdir temp ++cd temp ++darcs init ++echo hi world > a ++darcs add a ++darcs record --all -m lower ++cd .. ++darcs get temp temp1 ++cd temp ++darcs mv a A ++echo goodbye > A ++darcs record --all -m 'to upper' ++cd ../temp1 ++darcs pull -a + ++cd .. ++rm -rf temp temp1 +diff -ruN darcs-2.0.0/tests/mv-test-suite.sh darcs-2.0.2/tests/mv-test-suite.sh +--- darcs-2.0.0/tests/mv-test-suite.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/mv-test-suite.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -2,22 +2,26 @@ + + set -ev + +-test $DARCS || DARCS=$PWD/../darcs + rm -rf temp1 + mkdir temp1 + cd temp1 +-$DARCS init ++darcs init + + date > foo +-$DARCS record -a -m add_foo -A x --look-for-adds ++darcs record -a -m add_foo -A x --look-for-adds + +-$DARCS setpref test 'ls && test ! -e foo' +-$DARCS record -a -m settest -A x --no-test ++# add a test file ++echo 'test ! -e foo' > test.sh ++darcs add test.sh ++darcs record -a -m add_test + +-$DARCS mv foo bar +-$DARCS record --debug -a -m mvfoo -A x ++darcs setpref test 'ls && bash test.sh' ++darcs record -a -m settest -A x --no-test + +-$DARCS check ++darcs mv foo bar ++darcs record --debug -a -m mvfoo -A x ++ ++darcs check + + cd .. + rm -rf temp1 +diff -ruN darcs-2.0.0/tests/mv_then_add.sh darcs-2.0.2/tests/mv_then_add.sh +--- darcs-2.0.0/tests/mv_then_add.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/mv_then_add.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -1,25 +1,23 @@ + #!/usr/bin/env bash + set -ev + +-test $DARCS || DARCS=$PWD/../darcs +- + rm -rf temp + mkdir temp + cd temp + +-$DARCS init ++darcs init + touch fee fi fo fum +-$DARCS add f* +-$DARCS record --author me --all --no-test --patch-name add +-$DARCS mv fee foo ++darcs add f* ++darcs record --author me --all --no-test --patch-name add ++darcs mv fee foo + touch fee +-$DARCS add fee +-$DARCS record --author me --all --no-test --patch-name newfee +-$DARCS mv fi fib +-$DARCS record --author me --all --no-test --patch-name mvfi ++darcs add fee ++darcs record --author me --all --no-test --patch-name newfee ++darcs mv fi fib ++darcs record --author me --all --no-test --patch-name mvfi + date > fi +-$DARCS add fi +-$DARCS record --author me --all --no-test --patch-name newfi ++darcs add fi ++darcs record --author me --all --no-test --patch-name newfi + + cd .. + +diff -ruN darcs-2.0.0/tests/network/changes.sh darcs-2.0.2/tests/network/changes.sh +--- darcs-2.0.0/tests/network/changes.sh 1970-01-01 00:00:00.000000000 +0000 ++++ darcs-2.0.2/tests/network/changes.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -0,0 +1,8 @@ ++#!/usr/bin/env bash ++set -ev ++ ++# Demonstrates issue385 ++ ++test "$DARCS" || DARCS="$PWD"/../darcs ++ ++"$DARCS" changes --repo=http://darcs.net GNUmakefile --last 300 +diff -ruN darcs-2.0.0/tests/network/get.sh darcs-2.0.2/tests/network/get.sh +--- darcs-2.0.0/tests/network/get.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/network/get.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -1,19 +1,19 @@ + #!/usr/bin/env bash + set -ev + +-test $DARCS || DARCS=$PWD/../darcs ++test "$DARCS" || DARCS="$PWD"/../darcs + + rm -rf temp temp2 temp3 + +-#$DARCS get http://darcs.net/repos/unstable-hashed temp ++#"$DARCS" get http://darcs.net temp + +-$DARCS get --lazy http://darcs.net/repos/unstable-hashed temp2 ++"$DARCS" get --lazy http://darcs.net temp2 + +-$DARCS get --lazy --tag . http://darcs.net/repos/unstable-hashed temp3 ++"$DARCS" get --lazy --tag . http://darcs.net temp3 + + cd temp2 +-$DARCS obliterate --from-tag . -a +-$DARCS pull --tag . -a ++"$DARCS" obliterate --from-tag . -a ++"$DARCS" pull --tag . -a + cd .. + + diff -u temp2/_darcs/hashed_inventory temp3/_darcs/hashed_inventory +diff -ruN darcs-2.0.0/tests/nodeps.sh darcs-2.0.2/tests/nodeps.sh +--- darcs-2.0.0/tests/nodeps.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/nodeps.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -1,11 +1,6 @@ + #!/usr/bin/env bash + set -ev + +-test $DARCS || DARCS=$PWD/../darcs +- +-DARCS_EMAIL='tester' +-export DARCS_EMAIL +- + # Test the --no-deps option with Send, Push, Pull, Obliterate and Unrecord. + # + # Create four patches with dependencies. +@@ -16,50 +11,50 @@ + rm -rf tmp1 + mkdir tmp1 + cd tmp1 +-$DARCS init ++darcs init + echo 'record no-ask-deps' >> _darcs/prefs/defaults + echo 'record ignore-times' >> _darcs/prefs/defaults + echo 'a' > f +-$DARCS add f +-$DARCS rec -am 'fa' f ++darcs add f ++darcs rec -am 'fa' f + echo 'a' > g +-$DARCS add g +-$DARCS rec -am 'ga' g ++darcs add g ++darcs rec -am 'ga' g + echo 'b' > f +-$DARCS rec -am 'fb' f ++darcs rec -am 'fb' f + echo 'b' > g +-$DARCS rec -am 'gb' g ++darcs rec -am 'gb' g + + + mkdir d +-$DARCS init --repodir d ++darcs init --repodir d + + + # Try to Send all 'b' and 'g' patches. The two 'g' patches should succeed, + # but the 'fb' patch depends on the unselected 'fa' patch, an should be + # skipped. + +-$DARCS send -o bundle -a -p '[bg]' --no-deps d ++darcs send -o bundle -a -p '[bg]' --no-deps d + grep '^\[ga$' bundle + grep '^\[fb$' bundle && exit 1 + + + # Try to Push all 'b' and 'g' patches. Expect same result as for Send. + +-$DARCS push -a -p '[bg]' --no-deps d ++darcs push -a -p '[bg]' --no-deps d + cd d +-$DARCS changes | grep '^ \* ga$' +-$DARCS changes | grep '^ \* fb$' && exit 1 ++darcs changes | grep '^ \* ga$' ++darcs changes | grep '^ \* fb$' && exit 1 + # stay in d !! + + + # Try to Pull all 'b' and 'g' patches. Expect same result as for Send. + + # already in d +-rm -rf *; $DARCS init +-$DARCS pull -a -p '[bg]' --no-deps .. +-$DARCS changes | grep '^ \* ga$' +-$DARCS changes | grep '^ \* fb$' && exit 1 ++rm -rf *; darcs init ++darcs pull -a -p '[bg]' --no-deps .. ++darcs changes | grep '^ \* ga$' ++darcs changes | grep '^ \* fb$' && exit 1 + cd .. + + +@@ -67,10 +62,10 @@ + # succeed, but the 'fa' patch depends on the unselected 'fb' patch, an + # should be skipped. + +-$DARCS get . tmp; cd tmp +-echo y/y/y/q | tr / \\012 | $DARCS obliterate -p '[ag]' --no-deps +-$DARCS changes | grep '^ \* gb$' && exit 1 +-$DARCS changes | grep '^ \* fa$' ++darcs get . tmp; cd tmp ++echo y/y/y/q | tr / \\012 | darcs obliterate -p '[ag]' --no-deps ++darcs changes | grep '^ \* gb$' && exit 1 ++darcs changes | grep '^ \* fa$' + cd .. + + +@@ -78,9 +73,9 @@ + # Obliterate. + + # in "top" tmp repo -- destroys it! +-echo y/y/y/q | tr / \\012 | $DARCS unrecord -p '[ag]' --no-deps +-$DARCS changes | grep '^ \* gb$' && exit 1 +-$DARCS changes | grep '^ \* fa$' ++echo y/y/y/q | tr / \\012 | darcs unrecord -p '[ag]' --no-deps ++darcs changes | grep '^ \* gb$' && exit 1 ++darcs changes | grep '^ \* fa$' + + cd .. + rm -rf tmp1 +diff -ruN darcs-2.0.0/tests/nonewline.sh darcs-2.0.2/tests/nonewline.sh +--- darcs-2.0.0/tests/nonewline.sh 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/tests/nonewline.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -1,21 +1,20 @@ + #!/usr/bin/env bash + set -ev + +-test $DARCS || DARCS=$PWD/../darcs + rm -rf temp1 temp2 + mkdir temp1 temp2 + cd temp1 +-$DARCS init ++darcs init + echo -n zig > foo +-$DARCS add foo ++darcs add foo + sleep 1 +-$DARCS record -a -m add_foo -A x ++darcs record -a -m add_foo -A x + #sleep 1 + echo -n zag >> foo +-$DARCS record --ignore-time -a -m mod_foo -A x ++darcs record --ignore-time -a -m mod_foo -A x + cd ../temp2 +-$DARCS init +-$DARCS pull -a ../temp1 ++darcs init ++darcs pull -a ../temp1 + cd .. + cmp temp1/foo temp2/foo + rm -rf temp1 temp2 +diff -ruN darcs-2.0.0/tests/no_pristine.sh darcs-2.0.2/tests/no_pristine.sh +--- darcs-2.0.0/tests/no_pristine.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/no_pristine.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -5,33 +5,27 @@ + + set -ev + +-test $DARCS || DARCS=$PWD/../darcs +-ACTUAL_DARCS=`which $DARCS` +-DARCSPATH=`dirname $ACTUAL_DARCS` +-PATH="$DARCSPATH:$PATH" +-export PATH +- + rm -rf temp1 + + mkdir temp1 + cd temp1 + +-$DARCS initialize --no-pristine-tree ++darcs initialize --no-pristine-tree + echo ALL --author Testing Person >> _darcs/prefs/defaults + echo ALL --ignore-times >> _darcs/prefs/defaults + + echo foo > bar +-$DARCS add bar +-$DARCS record -a -m baz bar ++darcs add bar ++darcs record -a -m baz bar + + date > bar +-$DARCS record --no-test -a -m 'patch 2' ++darcs record --no-test -a -m 'patch 2' + +-$DARCS setpref test 'echo hello world' +-$DARCS record -a -m 'setpref' ++darcs setpref test 'echo hello world' ++darcs record -a -m 'setpref' + + date >> bar +-$DARCS record -a -m 'record with test' ++darcs record -a -m 'record with test' + + cd .. + +diff -ruN darcs-2.0.0/tests/obliterate.sh darcs-2.0.2/tests/obliterate.sh +--- darcs-2.0.0/tests/obliterate.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/obliterate.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -1,52 +1,48 @@ + #!/usr/bin/env bash + set -ev + +-test $DARCS || DARCS=$PWD/../darcs +- +-DARCS_EMAIL='hello world' +-export DARCS_EMAIL + rm -rf tempA + mkdir tempA + cd tempA +-$DARCS initialize ++darcs initialize + echo hello world > foo +-$DARCS add foo +-$DARCS record -a -m hellofoo ++darcs add foo ++darcs record -a -m hellofoo + + echo goodbye world >> foo +-$DARCS record -a -m goodbyefoo ++darcs record -a -m goodbyefoo + +-$DARCS replace world bar foo ++darcs replace world bar foo + echo Hi there foo > bar +-$DARCS add bar +-$DARCS record -a -m addbar ++darcs add bar ++darcs record -a -m addbar + +-$DARCS mv bar baz +-$DARCS replace bar baz foo +-$DARCS record -a -m bar2baz ++darcs mv bar baz ++darcs replace bar baz foo ++darcs record -a -m bar2baz + + echo Do not love the baz, or anything in the baz. >> foo +-$DARCS record -a -m nolove ++darcs record -a -m nolove + +-$DARCS mv baz world +-$DARCS replace baz world foo +-$DARCS record -a -m baz2world ++darcs mv baz world ++darcs replace baz world foo ++darcs record -a -m baz2world + +-$DARCS whatsnew | grep 'No changes' ++darcs whatsnew | grep 'No changes' + + grep 'love the world' foo + +-echo y | $DARCS obliterate -p baz2world ++echo y | darcs obliterate -p baz2world + +-$DARCS whatsnew | grep 'No changes' ++darcs whatsnew | grep 'No changes' + + grep 'love the baz' foo + +-echo y | $DARCS obliterate -p bar2baz ++echo y | darcs obliterate -p bar2baz + + grep 'love the bar' foo + +-echo y | $DARCS obliterate -p nolove ++echo y | darcs obliterate -p nolove + + grep 'love' foo && exit 1 || true + +diff -ruN darcs-2.0.0/tests/optimize_relink.sh darcs-2.0.2/tests/optimize_relink.sh +--- darcs-2.0.0/tests/optimize_relink.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/optimize_relink.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -1,14 +1,16 @@ ++ + #!/usr/bin/env bash + + # For issue600, testing optimize --relink + + set -ev + +-test $DARCS || DARCS=$PWD/../darcs +-ACTUAL_DARCS=`which $DARCS` +-DARCSPATH=`dirname $ACTUAL_DARCS` +-PATH="$DARCSPATH:$PATH" +-export PATH ++## We don't support hard links on Windows. ++ ++if echo $OS | grep -i windows; then ++ echo darcs does not support hard links on Windows ++ exit 0 ++fi + + ## compare succeeds if there are hard links + compare () { +@@ -20,11 +22,11 @@ + cd temp + + mkdir x +-$DARCS init --repodir x ++darcs init --repodir x + cd x + date > foo +-$DARCS add foo +-$DARCS record -a -A me -m 'addfoo' ++darcs add foo ++darcs record -a -A me -m 'addfoo' + cd .. + + ## Does the filesystem support hard linking at all? +@@ -39,11 +41,13 @@ + echo Filesystem for `pwd` does not support hard links. + exit 0 + fi +-cp -a x y || (rm -rf y && mkdir y && tar cf - -C x . | tar xpf - -C y .) ++# workaround for SunOS cp which does not support `-a' option but also ++# doesn't fail when it is encountered. ++cp -r x y + + ## Now try relinking using darcs. + rm -rf z +-$DARCS optimize --verbose --relink --repodir x --sibling y ++darcs optimize --verbose --relink --repodir x --sibling y + rm -rf x/_darcs/patches/pend* y/_darcs/patches/pend* + if compare x/_darcs/patches y/_darcs/patches + then echo darcs --relink is working, hard links were done. +diff -ruN darcs-2.0.0/tests/partial.sh darcs-2.0.2/tests/partial.sh +--- darcs-2.0.0/tests/partial.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/partial.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -3,7 +3,6 @@ + # A partial get of a repo shall have the same _darcs/pristine as the original + + set -ev +-test $DARCS || DARCS=$PWD/../darcs + + rm -rf temp + mkdir temp +@@ -11,35 +10,35 @@ + + # Create a development repo, do some work + +-$DARCS initialize --darcs-2 ++darcs initialize --darcs-2 + echo ALL ignore-times >> _darcs/prefs/defaults + touch a +-$DARCS add a +-$DARCS record -a -m aa -A x ++darcs add a ++darcs record -a -m aa -A x + touch b +-$DARCS add b +-$DARCS record -a -m bb -A x ++darcs add b ++darcs record -a -m bb -A x + + # Create a release repo, pull the good patches and tag it + + mkdir _rel + cd _rel +-$DARCS initialize --darcs-2 +-$DARCS pull -a --patch a .. +-$DARCS tag -m tt -A x ++darcs initialize --darcs-2 ++darcs pull -a --patch a .. ++darcs tag -m tt -A x + cd .. + + # Pull the tag to the devel repo and continue developement + +-$DARCS pull -a _rel ++darcs pull -a _rel + touch c +-$DARCS add c +-$DARCS record -a -m cc -A x ++darcs add c ++darcs record -a -m cc -A x + + # Create a checkpoint and get a partial temp repo + +-$DARCS tag -A x --checkpoint first_checkpoint +-$DARCS get --partial . _partial ++darcs tag -A x --checkpoint first_checkpoint ++darcs get --partial . _partial + + # We should have all our devel files + +@@ -49,13 +48,13 @@ + cat c + + # This is a regression test for issue406 +-$DARCS tag -A x --checkpoint checkpointing_a_partial ++darcs tag -A x --checkpoint checkpointing_a_partial + + cd .. + + # With the darcs-2 format, doing a get on a partial repo succeeds. + # With the darcs-1 format it would be required to add the --partial flag, or darcs would give an error. +-$DARCS get _partial _second_partial ++darcs get _partial _second_partial + + cd .. + rm -rf temp +diff -ruN darcs-2.0.0/tests/pending.sh darcs-2.0.2/tests/pending.sh +--- darcs-2.0.0/tests/pending.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/pending.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -1,46 +1,36 @@ + #!/usr/bin/env bash + set -ev + +-test $DARCS || DARCS=$PWD/../darcs +-ACTUAL_DARCS=`which $DARCS` +-DARCSPATH=`dirname $ACTUAL_DARCS` +-PATH="$DARCSPATH:$PATH" +-export PATH +-echo $PATH +- +-EMAIL=tester +-export EMAIL +- + rm -rf temp temp_0 + mkdir temp + cd temp +-$DARCS init ++darcs init + date > bla +-$DARCS add bla +-$DARCS record -a --patch-name=11 ++darcs add bla ++darcs record -a --patch-name=11 + echo hello > world +-$DARCS add world +-$DARCS whatsnew --dont-look-for-adds > wn1 ++darcs add world ++darcs whatsnew --dont-look-for-adds > wn1 + cd .. +-$DARCS get temp ++darcs get temp + cd temp_0 + date > bla2 + date >> bla +-$DARCS add bla2 +-$DARCS record -a --patch-name=22 +-$DARCS push -a ../temp ++darcs add bla2 ++darcs record -a --patch-name=22 ++darcs push -a ../temp + cd .. + cd temp +-$DARCS whatsnew --dont-look-for-adds > wn2 ++darcs whatsnew --dont-look-for-adds > wn2 + diff wn1 wn2 + +-$DARCS record -a -m 'cleaning up for new test.' ++darcs record -a -m 'cleaning up for new test.' + date > foo.jpg +-$DARCS add foo.jpg +-$DARCS whatsnew ++darcs add foo.jpg ++darcs whatsnew + +-$DARCS remove foo.jpg +-$DARCS whatsnew && exit 1 ++darcs remove foo.jpg ++darcs whatsnew && exit 1 + + cd .. + +diff -ruN darcs-2.0.0/tests/perms.sh darcs-2.0.2/tests/perms.sh +--- darcs-2.0.0/tests/perms.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/perms.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -3,29 +3,28 @@ + + uname | grep "MINGW" > /dev/null && exit 0 + +-test $DARCS || DARCS=$PWD/../darcs + rm -rf temp1 temp2 + mkdir temp1 + cd temp1 +-$DARCS init ++darcs init + echo record author me > _darcs/prefs/defaults + echo ALL all >> _darcs/prefs/defaults + echo ALL verbose >> _darcs/prefs/defaults + echo ALL ignore-times >> _darcs/prefs/defaults + touch foo +-$DARCS add foo +-$DARCS record -m add_foo ++darcs add foo ++darcs record -m add_foo + echo hello >> foo +-$DARCS record -m mod_foo ++darcs record -m mod_foo + cd .. +-$DARCS get --repo-name temp2 temp1 ++darcs get --repo-name temp2 temp1 + cd temp2 + cp ../temp1/_darcs/prefs/defaults _darcs/prefs +-echo y/d/y | tr / \\012 | $DARCS unpull --interactive ++echo y/d/y | tr / \\012 | darcs unpull --interactive + test -f foo -a ! -s foo + chmod +x foo + test -x foo +-$DARCS pull ../temp1 ++darcs pull ../temp1 + test -x foo + cd .. + rm -rf temp1 temp2 +diff -ruN darcs-2.0.0/tests/posthook.sh darcs-2.0.2/tests/posthook.sh +--- darcs-2.0.0/tests/posthook.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/posthook.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -1,51 +1,48 @@ + #!/usr/bin/env bash + +- + set -ev + +-test $DARCS || DARCS=$PWD/../darcs +- + rm -rf temp1 + mkdir temp1 + cd temp1 +-$DARCS init ++darcs init + touch foo +-$DARCS add foo ++darcs add foo + + # Check that prompting works as expected when answering yes... +-echo yes | $DARCS whatsnew -s --posthook 'touch posthook-ran' ++echo yes | darcs whatsnew -s --posthook 'touch posthook-ran' + test -f posthook-ran + rm posthook-ran + + # Check that prompting works as expected when answering no... +-echo no | $DARCS whatsnew -s --posthook 'touch posthook-ran' ++echo no | darcs whatsnew -s --posthook 'touch posthook-ran' + test ! -f posthook-ran + + # Check that prompting works as expected with defaults (yes)... + echo ALL --posthook touch posthook-ran > _darcs/prefs/defaults +-echo yes | $DARCS whatsnew -s ++echo yes | darcs whatsnew -s + test -f posthook-ran + rm posthook-ran + + # Check that prompting works as expected with defaults (no)... +-echo no | $DARCS whatsnew -s ++echo no | darcs whatsnew -s + test ! -f posthook-ran + + # Check that --run-posthook works in defaults + echo ALL --run-posthook >> _darcs/prefs/defaults +-$DARCS whatsnew -s ++darcs whatsnew -s + test -f posthook-ran + rm posthook-ran + + # Check that --run-posthook works when specified both in defaults and on + # command line +-$DARCS whatsnew --run-posthook -s ++darcs whatsnew --run-posthook -s + test -f posthook-ran + rm posthook-ran + + # Check that --posthook works when --run-posthook is in defaults + echo ALL --run-posthook > _darcs/prefs/defaults +-$DARCS whatsnew --posthook 'touch posthook-ran' -s ++darcs whatsnew --posthook 'touch posthook-ran' -s + test -f posthook-ran + rm posthook-ran + +diff -ruN darcs-2.0.0/tests/prefs.sh darcs-2.0.2/tests/prefs.sh +--- darcs-2.0.0/tests/prefs.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/prefs.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -1,18 +1,16 @@ + #!/usr/bin/env bash + set -ev + +-test $DARCS || DARCS=$PWD/../darcs +- + rm -rf temp1 temp2 + mkdir temp1 + cd temp1 +-$DARCS initialize --old-fashion ++darcs initialize --old-fashion + echo ALL ignore-times >> _darcs/prefs/defaults + cp _darcs/prefs/boring .boring +-$DARCS add .boring +-$DARCS setpref boringfile .boring +-$DARCS record -a -m p1 -A me ++darcs add .boring ++darcs setpref boringfile .boring ++darcs record -a -m p1 -A me + cd .. +-$DARCS get --hashed temp1 temp2 ++darcs get --hashed temp1 temp2 + cmp temp1/_darcs/prefs/prefs temp2/_darcs/prefs/prefs + rm -rf temp1 temp2 +diff -ruN darcs-2.0.0/tests/prehook.sh darcs-2.0.2/tests/prehook.sh +--- darcs-2.0.0/tests/prehook.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/prehook.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -1,51 +1,48 @@ + #!/usr/bin/env bash + +- + set -ev + +-test $DARCS || DARCS=$PWD/../darcs +- + rm -rf temp1 + mkdir temp1 + cd temp1 +-$DARCS init ++darcs init + touch foo +-$DARCS add foo ++darcs add foo + + # Check that prompting works as expected when answering yes... +-echo yes | $DARCS whatsnew -s --prehook 'touch prehook-ran' ++echo yes | darcs whatsnew -s --prehook 'touch prehook-ran' + test -f prehook-ran + rm prehook-ran + + # Check that prompting works as expected when answering no... +-echo no | $DARCS whatsnew -s --prehook 'touch prehook-ran' ++echo no | darcs whatsnew -s --prehook 'touch prehook-ran' + test ! -f prehook-ran + + # Check that prompting works as expected with defaults (yes)... + echo ALL --prehook touch prehook-ran > _darcs/prefs/defaults +-echo yes | $DARCS whatsnew -s ++echo yes | darcs whatsnew -s + test -f prehook-ran + rm prehook-ran + + # Check that prompting works as expected with defaults (no)... +-echo no | $DARCS whatsnew -s ++echo no | darcs whatsnew -s + test ! -f prehook-ran + + # Check that --run-prehook works in defaults + echo ALL --run-prehook >> _darcs/prefs/defaults +-$DARCS whatsnew -s ++darcs whatsnew -s + test -f prehook-ran + rm prehook-ran + + # Check that --run-prehook works when specified both in defaults and on + # command line +-$DARCS whatsnew --run-prehook -s ++darcs whatsnew --run-prehook -s + test -f prehook-ran + rm prehook-ran + + # Check that --prehook works when --run-prehook is in defaults + echo ALL --run-prehook > _darcs/prefs/defaults +-$DARCS whatsnew --prehook 'touch prehook-ran' -s ++darcs whatsnew --prehook 'touch prehook-ran' -s + test -f prehook-ran + rm prehook-ran + +diff -ruN darcs-2.0.0/tests/pull_binary.sh darcs-2.0.2/tests/pull_binary.sh +--- darcs-2.0.0/tests/pull_binary.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/pull_binary.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -5,29 +5,23 @@ + + set -ev + +-test $DARCS || DARCS=$PWD/../darcs +-ACTUAL_DARCS=`which $DARCS` +-DARCSPATH=`dirname $ACTUAL_DARCS` +-PATH="$DARCSPATH:$PATH" +-export PATH +- + rm -rf temp1 temp2 + + mkdir temp1 + cd temp1 +-$DARCS init ++darcs init + perl -e 'print "a"x1048576' > foo +-$DARCS record -l -a -A author -m xx ++darcs record -l -a -A author -m xx + rm foo +-$DARCS record -a -A author -m yy ++darcs record -a -A author -m yy + cd .. + + mkdir temp2 + cd temp2 +-$DARCS init +-echo yn | $DARCS pull ../temp1 ++darcs init ++echo yn | darcs pull ../temp1 + rm foo +-$DARCS pull -a ++darcs pull -a + cd .. + + rm -rf temp1 temp2 +diff -ruN darcs-2.0.0/tests/pull_compl.sh darcs-2.0.2/tests/pull_compl.sh +--- darcs-2.0.0/tests/pull_compl.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/pull_compl.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -4,12 +4,6 @@ + + set -ev + +-test $DARCS || DARCS=$PWD/../darcs +-ACTUAL_DARCS=`which $DARCS` +-DARCSPATH=`dirname $ACTUAL_DARCS` +-PATH="$DARCSPATH:$PATH" +-export PATH +- + rm -rf temp1 temp2 temp3 temp4 temp5 + + mkdir temp1 +@@ -23,54 +17,50 @@ + line6 + line7 + EOF +-$DARCS initialize +-echo record author me > _darcs/prefs/defaults +-$DARCS add foo +-$DARCS record -a -m addfoo ++darcs initialize ++darcs add foo ++darcs record -a -m addfoo + + cd .. +-$DARCS get temp1 temp4 ++darcs get temp1 temp4 + + chgrec () { + set -ev +- sed -e "$1" foo > foo2 +- mv foo2 foo +- $DARCS record -a --ignore-times -m "$2" ++ perl -i~ -pe "$1" foo ++ darcs record -a --ignore-times -m "$2" + } + + cd temp1 +-chgrec '3i\ +-line2.1\ +-line2.2' inssub2 +-chgrec '6s/line4/Line 4/' Line4 ++chgrec 's/line2/line2\nline2.1\nline2.2/' inssub2 ++chgrec 's/line4/Line 4/' Line4 ++ ++darcs changes | grep ' \*' ++echo done with changes on temp1 > /dev/null + + cd .. +-$DARCS get temp1 temp2 +-$DARCS get temp1 temp3 ++darcs get temp1 temp2 ++darcs get temp1 temp3 + cd temp1 + +-chgrec '1i\ +-line0' line0 +-chgrec '7s/Line 4/LINE FOUR/' LINE4 +-chgrec '$i\ +-/LastLine/' LastLine +-chgrec '8i\ +-line4.1' line4.1 ++chgrec 's/line1/line0\nline1/' line0 ++chgrec 's/Line 4/LINE FOUR/' LINE4 ++chgrec 's/line7/line7\nLastLine/' LastLine ++chgrec 's/LINE FOUR/LINE FOUR\nline4.1/' line4.1 ++ ++darcs changes | grep ' \*' ++echo done with changes on temp1 > /dev/null + + cd ../temp3 +-$DARCS pull -p LastLine -av +-echo record author me > _darcs/prefs/defaults +-chgrec '1,$s/line1/FirstLine/' FirstLine ++darcs pull -p LastLine -av ++chgrec 's/line1$/FirstLine/' FirstLine + + cd ../temp4 + +-pullcheck () { +- IFS=' ' +- "$DARCS" pull $* | grep ' \*' +- IFS='' +-} ++darcs changes | grep ' \*' ++echo done with changes on temp4 > /dev/null + +-pullcheck ../temp1 --dry-run > p1.out ++darcs pull ../temp1 --dry-run | grep ' \*' ++darcs pull ../temp1 --dry-run | grep ' \*' > p1.out + cat > p1.req < p2.out ++darcs pull ../temp1 --dry-run --complement | grep ' \*' > p2.out + diff p1.out p2.out + +-pullcheck --dry-run --complement ../temp1 ../temp2 > p3.out ++darcs pull --dry-run --complement ../temp1 ../temp2 | grep ' \*' > p3.out + cat > p3.req < p4.out ++darcs pull --dry-run --complement ../temp1 ../temp3 | grep ' \*' > p4.out + cat > p4.req < p5.out ++darcs pull --dry-run --complement ../temp1 ../temp2 ../temp3 | grep ' \*' > p5.out + diff p4.out p5.out + +-pullcheck --dry-run --complement ../temp1 ../temp2 ../temp3 ../temp2 ../temp2 ../temp3 ../temp3 ../temp2 > p6.out ++darcs pull --dry-run --complement ../temp1 ../temp2 ../temp3 ../temp2 ../temp2 ../temp3 ../temp3 ../temp2 | grep ' \*' > p6.out + diff p4.out p6.out + +-pullcheck --dry-run --complement ../temp3 ../temp2 > p7.out ++darcs pull --dry-run --complement ../temp3 ../temp2 | grep ' \*' > p7.out + cat > p7.req < p8.out ++darcs pull --dry-run --complement ../temp2 ../temp3 > p8.out + grep "No remote changes to pull in!" p8.out + + # because duplicates are stripped before performing action, + # this is the same as: darcs pull ../temp1 +-pullcheck --dry-run --complement ../temp1 ../temp1 > p9.out ++darcs pull --dry-run --complement ../temp1 ../temp1 | grep ' \*' > p9.out + diff p1.req p9.out + + # so the "null" pull must be tested this way: +-$DARCS get ../temp1 ../temp5 +-$DARCS pull --dry-run --complement ../temp1 ../temp5 > p9.out ++darcs get ../temp1 ../temp5 ++darcs pull --dry-run --complement ../temp1 ../temp5 > p9.out + grep "No remote changes to pull in!" p9.out + +-$DARCS pull -av --complement ../temp1 ../temp3 +-$DARCS check ++darcs pull -av --complement ../temp1 ../temp3 ++darcs check + + cd .. + rm -rf temp1 temp2 temp3 temp4 temp5 +diff -ruN darcs-2.0.0/tests/pull_many_files.pl darcs-2.0.2/tests/pull_many_files.pl +--- darcs-2.0.0/tests/pull_many_files.pl 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/pull_many_files.pl 2008-06-24 01:23:13.000000000 +0000 +@@ -8,11 +8,24 @@ + use Shell::Command; + use strict; + ++# We need to find GNU tar first (it's for example `gtar' on SunOS) ++my $tarcmd = ""; ++for my $cmd ('tar', 'gtar') { ++ my $ver = `/bin/sh -c "${cmd} --version 2>&1"`; ++ if (index(${ver}, "GNU") >= 0) { ++ $tarcmd = ${cmd}; ++ } ++} ++ ++if (${tarcmd} eq "") { ++ die ("Cannot find GNU tar"); ++} ++ + for my $format ('--old-fashioned-inventory','--hashed','--darcs-2') { + ok( (chdir 'repos'), "$format: chdir repos"); + + # This tar call could be replaced by pure Perl for portability, but it would mean shipping several more Perl modules. +- `tar -xzf many-files${format}.tgz`; ++ `${tarcmd} -xzf many-files${format}.tgz`; + chdir '../'; + init_tmp_repo($format); + +diff -ruN darcs-2.0.0/tests/pull.pl darcs-2.0.2/tests/pull.pl +--- darcs-2.0.0/tests/pull.pl 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/pull.pl 1970-01-01 00:00:00.000000000 +0000 +@@ -1,157 +0,0 @@ +-#!/usr/bin/env perl +- +-# Some tests for 'darcs pull' +- +-use lib 'lib/perl'; +-use Test::More 'no_plan'; +-use Test::Darcs; +-use strict; +-use warnings; +-use Cwd; +-use POSIX 'getuid'; +-use File::Slurp; +-use File::Temp 'tempdir'; +- +-my $work_dir = tempdir( CLEANUP => 1 ); +-chdir $work_dir; +- +- +-cleanup 'temp1'; +-cleanup 'temp2'; +-ok(mkpath('temp1'), "temp1 created"); +-ok(mkpath('temp2/one/two'), "temp2/one/two created"); +-ok(chdir('temp1'), "chdir temp1"); +-darcs 'init'; +-ok(chdir('../temp2'), "chdir ../temp2"); +-darcs 'init'; +-ok(chdir('one/two'), "chdir one/two"); +- +-{ +- my $test_name = 'darcs pull should work relative to the current directory'; +- my $pull_out = darcs 'pull -a ../../../temp1'; +- like($pull_out, qr/No remote changes to pull in/i, $test_name); +-} +- +-{ +- my $test_name = 'darcs pull should pull into repo specified with --repo'; +- chdir '../../'; # now in temp2 +- darcs 'add one'; +- darcs q(record --patch-name 'uno' --all ); +- chdir '../'; # now outside of any repo +- like(darcs('pull --repodir temp1 --all ../temp2'), # temp2 is relative to temp1 +- qr/Finished pulling./i, $test_name); +-} +- +-TAKE_LOCK: { +- # set up server repo +- `date >>temp2/one/date.t`; +- darcs 'add --repodir ./temp2 one/date.t'; +- darcs q(record --repodir ./temp2 -a -m 'foo'); +- +- # set up client repo for failure +- chmod 0555,'./temp1/one/'; # remove read permissions +- my $out = darcs 'pull --repodir ./temp1 -a'; +- rmtree('./temp1/one/'); +- if ($^O =~ /msys/i) { +- pass('this test fails on windows, so ignore it'); +- } else { +- if(getuid() == 0) { +- pass("root never gets permission denied"); +- } else { +- like($out, qr#one/date\.t.+: permission denied#i, +- 'expect permission denied error'); +- } +- } +-}; +- +- +-SELF_PULL: { +- chdir './temp1'; +- +- my $default_repo_pre_test = 'Before trying to pull from self, defaultrepo is something else'; +- open(DEFAULT_REPO,'<./_darcs/prefs/defaultrepo') || die "Couldn't open defaultrepo"; +- my $default_repo = (); +- close(DEFAULT_REPO); +- +- unlike($default_repo,qr/temp1/,$default_repo_pre_test); +- +- my $test_name = 'return special message when you try to pull from yourself'; +- my $abs_path = cwd(); +- like(darcs(qq(pull -a $abs_path)), qr/Can.t pull from current repository!/i, $test_name); +- like(darcs('pull -a .'), qr/Can.t pull from current repository!/i, $test_name); +- +- my $set_default_repo_test = "and do not update the default repo to be the current dir"; +- open(DEFAULT_REPO,'<./_darcs/prefs/defaultrepo') || die "Could not open defaultrepo"; +- my $new_default_repo = (); +- close(DEFAULT_REPO); +- +- unlike($new_default_repo,qr/temp1/,$set_default_repo_test); +- +- cleanup('_darcs/prefs/defaultrepo'); +- like(darcs('pull'), qr/please specify one/i, $test_name); +- write_file('_darcs/prefs/defaultrepo','.'); +- like(darcs('pull'), qr/Can.t pull from current repository!/i, '[issue358] '.$test_name); +- unlike(darcs('pull ../*'), qr/Can.t pull from current repository!/i, '[issue427] '.$test_name); +- +- chdir '../'; # now outside of any repo +-} +- +-ROLLBACK_PULL: { +- use File::Path; +- chdir 'temp1'; +- write_file 'foo','a'; +- darcs 'record -lam AA '; +- write_file 'foo','b'; +- darcs 'record -lam BB '; +- write_file 'foo','c'; +- darcs 'record -lam CC '; +- like(echo_to_darcs("rollback -p CC -a -m unC ",""), qr/Finished rolling back/); +- chdir '../'; +- rmtree 'temp2/'; +- darcs 'get --to-patch B temp1 temp2'; +- chdir 'temp2'; +- system "sleep 1"; # So that rollback won't have same timestamp as get. +- like(echo_to_darcs("rollback -p BB -a -m unB ",""), qr/Finished rolling back/); +- darcs 'revert -a'; +- my $pull_out = darcs 'pull -a ../temp1'; +- unlike($pull_out,qr/Error applying patch/i, +- 'pull after rollback avoids failure'); +- chdir '../'; +-}; +- +-NONEWLINES_PULL: { +- chdir 'temp1'; +- `echo -n foo > baz`; +- darcs 'add baz'; +- darcs 'record -am newbaz '; +- chdir '../temp2'; +- like(darcs('pull -a'), qr/Finished pulling/, 'pull of newlineless patch'); +- `echo -n bar > baz`; +- darcs 'record -am bazbar '; +- chdir '../temp1'; +- like(darcs('pull ../temp2 -a'), qr/Finished pulling/, +- 'pull of newlineless patch'); +- `echo -n bar > correct_baz`; +- ok(!(system "diff baz correct_baz"), 'pull was right'); +- chdir '..'; +-} +- +-CREATE_DIR_ERROR: { +- my $test_name = "when a patch creating a directory is attempted to be applied +- while a directory with that name already exists, a warning is raised, but +- the pull succeeds."; +- mkdir 'temp1/newdir'; +- ok((chdir 'temp1/'), "chdir succeeds");; +- darcs 'add newdir'; +- darcs 'record -am newdir '; +- ok((chdir '../temp2'), "chdir succeeds");; +- mkdir 'newdir'; +- my $out = darcs('pull -a ../temp1'); +- like($out, qr/Backing/i, $test_name); +- like($out, qr/Finished pulling/i, $test_name); +- like($out, qr/newdir/i, "...and report the name of the directory involved"); +- ok((chdir '../'), "chdir succeeds");; +-} +- +-chdir '../'; # move out of tmp dir, so it can be auto-removed. +- +diff -ruN darcs-2.0.0/tests/pull.sh darcs-2.0.2/tests/pull.sh +--- darcs-2.0.0/tests/pull.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/pull.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -1,16 +1,142 @@ + #!/usr/bin/env bash + ++set -ev; ++ ++## I would use the builtin !, but that has the wrong semantics. ++not () { "$@" && exit 1 || :; } ++ ++rm -rf temp1 temp2 ++ ++mkdir temp1 ++cd temp1 ++darcs init ++ ++cd .. ++mkdir temp2 ++cd temp2 ++darcs init ++ ++mkdir one ++cd one ++mkdir two ++cd two ++echo darcs pull should work relative to the current directory ++darcs pull -a ../../../temp1 | grep -i 'No remote changes to pull in' ++ ++echo -- darcs pull should pull into repo specified with --repo ++cd ../.. # now in temp2 ++darcs add one; ++darcs record --patch-name uno --all ++cd .. # now outside of any repo ++darcs pull --repodir temp1 --all ../temp2 | grep -i 'Finished pulling.' # temp2 is relative to temp1 ++ ++# set up server repo ++date > temp2/one/date.t ++darcs add --repodir ./temp2 one/date.t ++darcs record --repodir ./temp2 -a -m foo ++ ++# set up client repo for failure ++chmod a-rwx ./temp1/one # remove all permissions ++not darcs pull --repodir ./temp1 -a 2> err ++chmod u+rwx temp1/one # restore permission ++cat err ++rm -rf temp1/one ++if echo $OS | grep -i windows; then ++ echo this test does not work on windows, so ignore it ++else ++ if whoami | grep root; then ++ echo root never gets permission denied ++ else ++ grep 'permission denied' err ++ fi ++fi ++ ++cd temp1 ++ ++echo Before trying to pull from self, defaultrepo is something else ++not grep temp1 _darcs/prefs/defaultrepo ++ ++#return special message when you try to pull from yourself ++DIR=`pwd` ++not darcs pull -a "$DIR" 2> out ++cat out ++grep 'Can.t pull from current repository' out ++ ++not darcs pull -a . 2> out ++cat out ++grep 'Can.t pull from current repository' out ++ ++# and do not update the default repo to be the current di ++not grep temp1 _darcs/prefs/defaultrepo ++ ++rm -f _darcs/prefs/defaultrepo ++not darcs pull 2> err ++grep 'please specify one' err ++echo . > _darcs/prefs/defaultrepo ++not darcs pull 2> err ++grep 'Can.t pull from current repository' err ++ ++not darcs pull ../* 2> out ++cat out ++not grep 'Can.t pull from current repository' out ++cd .. # now outside of any repo ++ ++cd temp1 ++echo a > foo ++darcs record -lam AA ++echo b > foo ++darcs record -lam BB ++echo c > foo ++darcs record -lam CC ++darcs rollback -p CC -a -m unC ++cd .. ++rm -rf temp2 ++darcs get --to-patch B temp1 temp2 ++cd temp2 ++sleep 1 # So that rollback won't have same timestamp as get. ++darcs rollback -p BB -a -m unB ++darcs revert -a ++darcs pull -a ../temp1 2> err ++not grep 'Error applying patch' err ++cd .. ++ ++cd temp1 ++echo -n foo > baz ++darcs add baz ++darcs record -am newbaz ++cd ../temp2 ++darcs pull -a | grep Finished ++echo -n bar > baz ++darcs record -am bazbar ++cd ../temp1 ++darcs pull ../temp2 -a ++echo -n bar > correct_baz ++diff baz correct_baz ++cd .. ++ ++# my $test_name = "when a patch creating a directory is attempted to be applied ++# while a directory with that name already exists, a warning is raised, but ++# the pull succeeds."; ++mkdir temp1/newdir ++cd temp1 ++darcs add newdir ++darcs record -am newdir ++cd ../temp2 ++mkdir newdir ++darcs pull -a ../temp1 &> out ++cat out ++grep Backing out ++grep 'Finished pulling' out ++grep newdir out ++cd .. ++ ++rm -rf temp1 temp2 ++ ++ + # A test for issue662, which triggered: + # darcs failed: Error applying hunk to file ./t.t + # Error applying patch to the working directory. + +-IFS=''; +-export IFS; +-EMAIL=tester; +-export EMAIL; +- +-set -ev; +- + rm -rf tmp; + darcs init --hashed --repodir=tmp + touch tmp/t.t +@@ -27,3 +153,5 @@ + darcs pull -a ../ + darcs w -s + darcs revert -a ++ ++rm -rf tmp +diff -ruN darcs-2.0.0/tests/pull_two.sh darcs-2.0.2/tests/pull_two.sh +--- darcs-2.0.0/tests/pull_two.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/pull_two.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -5,36 +5,30 @@ + + set -ev + +-test $DARCS || DARCS=$PWD/../darcs +-ACTUAL_DARCS=`which $DARCS` +-DARCSPATH=`dirname $ACTUAL_DARCS` +-PATH="$DARCSPATH:$PATH" +-export PATH +- + rm -rf temp1 temp2 + + mkdir temp1 + cd temp1 + echo foo > bar +-$DARCS initialize ++darcs initialize + echo record author me > _darcs/prefs/defaults +-$DARCS add bar +-$DARCS record -a -m addbar ++darcs add bar ++darcs record -a -m addbar + + cd .. +-$DARCS get temp1 temp2 ++darcs get temp1 temp2 + cd temp1 + date > bar +-$DARCS record -a -m datebar ++darcs record -a -m datebar + + cd ../temp1 + echo aack >> bar +-$DARCS record -a -m aackbar ++darcs record -a -m aackbar + + cd ../temp2 + +-$DARCS pull -av +-$DARCS check ++darcs pull -av ++darcs check + + cd .. + rm -rf temp1 temp2 +diff -ruN darcs-2.0.0/tests/push-dry-run.sh darcs-2.0.2/tests/push-dry-run.sh +--- darcs-2.0.0/tests/push-dry-run.sh 1970-01-01 00:00:00.000000000 +0000 ++++ darcs-2.0.2/tests/push-dry-run.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -0,0 +1,28 @@ ++#!/usr/bin/env bash ++set -ev ++ ++# For issue855: wish: avoid taking lock if using --dry-run ++chmod -R u+w temp2 || : ++rm -rf temp1 temp2 ++mkdir temp1 ++cd temp1 ++darcs init ++cd .. ++mkdir temp2 ++cd temp2 ++darcs init ++touch x ++darcs add x ++darcs record -am "test" ++cd .. ++chmod -R u-w temp2 ++cd temp2 ++# need to capture this failure so that we can still ++# chmod -R u+w the directory even if we fail ++darcsexit=0 ++darcs push --dry-run ../temp1 || darcsexit=$? ++cd .. ++chmod -R u+w temp2 # so that other scripts can cleanup ++if [ $darcsexit -ne 0 ]; then ++ exit $darcsexit ++fi +diff -ruN darcs-2.0.0/tests/push_lock.sh darcs-2.0.2/tests/push_lock.sh +--- darcs-2.0.0/tests/push_lock.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/push_lock.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -4,24 +4,22 @@ + + set -ev + +-test $DARCS || DARCS=$PWD/../darcs +- + rm -rf tempc + mkdir tempc + cd tempc +-$DARCS init ++darcs init + echo foo > foo.c +-$DARCS rec -Ax -alm init ++darcs rec -Ax -alm init + cd .. + rm -rf temps +-$DARCS get tempc temps ++darcs get tempc temps + cd temps + echo server >> foo.c +-$DARCS rec -Ax -alm server ++darcs rec -Ax -alm server + cd ../tempc + echo client >> foo.c +-$DARCS rec -Ax -alm client +-if $DARCS push -a ../temps; then ++darcs rec -Ax -alm client ++if darcs push -a ../temps; then + false + fi + cd .. +diff -ruN darcs-2.0.0/tests/push.sh darcs-2.0.2/tests/push.sh +--- darcs-2.0.0/tests/push.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/push.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -1,28 +1,21 @@ + #!/usr/bin/env bash + set -ev + +- +-test $DARCS || DARCS=$PWD/../darcs +-ACTUAL_DARCS=`which $DARCS` +-DARCSPATH=`dirname $ACTUAL_DARCS` +-PATH="$DARCSPATH:$PATH" +-export PATH +- + rm -rf temp temp_0 + mkdir temp + cd temp +-$DARCS init ++darcs init + echo tester > _darcs/prefs/author + date > bla +-$DARCS add bla +-$DARCS record -a --patch-name=11 ++darcs add bla ++darcs record -a --patch-name=11 + cd .. +-$DARCS get temp ++darcs get temp + cd temp + date > bla2 +-$DARCS add bla2 +-$DARCS record -a --patch-name=22 +-$DARCS push -a ../temp_0 ++darcs add bla2 ++darcs record -a --patch-name=22 ++darcs push -a ../temp_0 + cd .. + + rm -rf temp temp_0 +diff -ruN darcs-2.0.0/tests/query_manifest.sh darcs-2.0.2/tests/query_manifest.sh +--- darcs-2.0.0/tests/query_manifest.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/query_manifest.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -14,9 +14,9 @@ + echo "./$x" >> dirs.tmp + echo "./$x" >> files-dirs.tmp + done +- "$DARCS" query manifest $3 --files --no-directories | sort > darcs-files.tmp +- "$DARCS" query manifest $3 --no-files --directories | sort > darcs-dirs.tmp +- "$DARCS" query manifest $3 --files --directories | sort > darcs-files-dirs.tmp ++ darcs query manifest $3 --files --no-directories | sort > darcs-files.tmp ++ darcs query manifest $3 --no-files --directories | sort > darcs-dirs.tmp ++ darcs query manifest $3 --files --directories | sort > darcs-files-dirs.tmp + for x in files dirs files-dirs ; do + sort -o sorted-$x.tmp $x.tmp + diff sorted-$x.tmp darcs-$x.tmp +@@ -24,70 +24,68 @@ + IFS='' + } + +-test $DARCS || DARCS=$PWD/../darcs +- + rm -rf temp + mkdir temp + cd temp +-$DARCS init ++darcs init + + check_manifest "" "" "--no-pending" + check_manifest "" "" "--pending" + touch a b +-$DARCS add a ++darcs add a + check_manifest "" "" "--no-pending" + check_manifest "a" "" "--pending" +-$DARCS add b ++darcs add b + mkdir c + check_manifest "" "" "--no-pending" + check_manifest "a b" "" "--pending" +-$DARCS add c ++darcs add c + touch c/1 c/2 + check_manifest "" "" "--no-pending" + check_manifest "a b" "c" "--pending" +-$DARCS add c/1 c/2 ++darcs add c/1 c/2 + check_manifest "" "" "--no-pending" + check_manifest "a b c/1 c/2" "c" "--pending" + mkdir d + touch d/3 d/4 +-$DARCS add d/3 d/4 ++darcs add d/3 d/4 + check_manifest "" "" "--no-pending" + check_manifest "a b c/1 c/2 d/3 d/4" "c d" "--pending" +-$DARCS record -A test --all --patch-name "patch 1" --skip-long-comment ++darcs record -A test --all --patch-name "patch 1" --skip-long-comment + check_manifest "a b c/1 c/2 d/3 d/4" "c d" "--no-pending" + check_manifest "a b c/1 c/2 d/3 d/4" "c d" "--pending" + +-$DARCS mv d e ++darcs mv d e + check_manifest "a b c/1 c/2 d/3 d/4" "c d" "--no-pending" + check_manifest "a b c/1 c/2 e/3 e/4" "c e" "--pending" + rm c/1 + check_manifest "a b c/1 c/2 d/3 d/4" "c d" "--no-pending" + check_manifest "a b c/1 c/2 e/3 e/4" "c e" "--pending" +-$DARCS remove c/1 ++darcs remove c/1 + check_manifest "a b c/1 c/2 d/3 d/4" "c d" "--no-pending" + check_manifest "a b c/2 e/3 e/4" "c e" "--pending" +-$DARCS mv c/2 c/1 ++darcs mv c/2 c/1 + check_manifest "a b c/1 c/2 d/3 d/4" "c d" "--no-pending" + check_manifest "a b c/1 e/3 e/4" "c e" "--pending" +-$DARCS record -A test --all --patch-name "patch 2" --skip-long-comment ++darcs record -A test --all --patch-name "patch 2" --skip-long-comment + check_manifest "a b c/1 e/3 e/4" "c e" "--no-pending" + check_manifest "a b c/1 e/3 e/4" "c e" "--pending" + +-$DARCS remove c/1 ++darcs remove c/1 + check_manifest "a b c/1 e/3 e/4" "c e" "--no-pending" + check_manifest "a b e/3 e/4" "c e" "--pending" +-$DARCS remove c ++darcs remove c + check_manifest "a b c/1 e/3 e/4" "c e" "--no-pending" + check_manifest "a b e/3 e/4" "e" "--pending" +-$DARCS record -A test --all --patch-name "patch 3" --skip-long-comment ++darcs record -A test --all --patch-name "patch 3" --skip-long-comment + check_manifest "a b e/3 e/4" "e" "--no-pending" + check_manifest "a b e/3 e/4" "e" "--pending" + +-$DARCS mv b b2 +-$DARCS mv b2 b3 ++darcs mv b b2 ++darcs mv b2 b3 + check_manifest "a b e/3 e/4" "e" "--no-pending" + check_manifest "a b3 e/3 e/4" "e" "--pending" +-$DARCS record -A test --all --patch-name "patch 3" --skip-long-comment ++darcs record -A test --all --patch-name "patch 3" --skip-long-comment + check_manifest "a b3 e/3 e/4" "e" "--no-pending" + check_manifest "a b3 e/3 e/4" "e" "--pending" + +diff -ruN darcs-2.0.0/tests/README.test_maintainers.txt darcs-2.0.2/tests/README.test_maintainers.txt +--- darcs-2.0.0/tests/README.test_maintainers.txt 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/README.test_maintainers.txt 2008-06-24 01:23:13.000000000 +0000 +@@ -39,6 +39,12 @@ + ./bin/prove script.pl + perl shell_harness script.sh + ++or alternatively to run a couple of tests ++ ++ echo test-name.sh > tests/tests_to_run ++ echo test-name2.sh >> tests/tests_to_run ++ make test_shell # or whichever you like! ++ + + Overview of types of tests + ========================== +@@ -61,7 +67,9 @@ + The Perl scripts are useful because of the featureful testing framework that + Perl provides, and the potential they offer to create more portable tests. + +-Right now both kinds of tests are equally accepted by the project. ++Right now both kinds of tests are equally accepted by the project, but ++shell tests are preferred by the main developers, as they are generally ++more useful and easier to debug. + + + Tips for writing tests +@@ -76,7 +84,15 @@ + Tips for writing Shell tests + ------------------------------- + +-- Consider adding this near the top of the script: ++- Copy an existing test, which will already have the following properties: ++ ++- Simply call darcs using "darcs" as you would in the shell. It is the ++ responsibility of the test harness to ensure that the darcs we are ++ testing is first in the path. ++ ++- Always use bash explicitly--this improves the portability of our tests. ++ ++- Always add this near the top of the script: + + set -ev + +@@ -84,13 +100,6 @@ + which is helpful for debugging. The "e" causes the script to exit as soon as + their is an error. + +-- Set an email address in the environment: +- export EMAIL=tester +- +- This is easier than adding "-A" to every record command. Eventually this +- service should provided in the testing infrastructure, like it is for the +- Perl scripts. +- + + Tips for writing Perl tests + ------------------------------- +@@ -114,19 +123,11 @@ + The future of testing darcs + ================================= + +-We should seek for our shell and Perl scripts to generate consistent +-output, which will provide some benefits. +- +-By switching the shell scripts to emit success and failure in the TAP* format, +-like Perl does, we can remove the duplicate code we have in the Perl and Shell +-harnesses, and generally simplify the infrastructure code. +- +-The "prove" script already supports running non-Perl test scripts through the +-"--exec" option. Once the shell scripts emit TAP output, we can use "prove" to +-run some of them in parallel, like we can for the Perl test scripts. +- +-The "git" project already has "t/test-lib.sh", which would provide the bulk of +-the code needed for this, although the output is not quite TAP format. . Their +-"t/README" provides a nice overview of their Shell testing framework. +- +-* TAP == Test Anything Protocol: http://testanything.org ++We would prefer to have all tests written in bash, as these tests are both ++easier to write (since you ordinarily run darcs from a shell in any case), ++and are more helpful when trying to track down bugs, for the same reason: ++it is easy to run bash tests by hand in a shell, examining each ++intermediate state. For this same reason, try to avoid defining functions ++in your test scripts. This makes them harder to run and generally harder ++to use. There are certainly cases where it is appropriate to define a ++function, but please do not do this just to avoid a little duplication. +diff -ruN darcs-2.0.0/tests/recordrace.sh darcs-2.0.2/tests/recordrace.sh +--- darcs-2.0.0/tests/recordrace.sh 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/tests/recordrace.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -1,21 +1,20 @@ + #!/usr/bin/env bash + set -ev + +-test $DARCS || DARCS=$PWD/../darcs + rm -rf foo1 foo2 + mkdir foo1 foo2 + cd foo1 +-$DARCS init ++darcs init + echo zig > foo +-$DARCS add foo ++darcs add foo + sleep 1 +-$DARCS record -a -m add_foo -A x ++darcs record -a -m add_foo -A x + #sleep 1 + echo zag >> foo +-$DARCS record --ignore-time -a -m mod_foo -A x ++darcs record --ignore-time -a -m mod_foo -A x + cd ../foo2 +-$DARCS init +-$DARCS pull -a ../foo1 ++darcs init ++darcs pull -a ../foo1 + cd .. + cmp foo1/foo foo2/foo + rm -rf foo1 foo2 +diff -ruN darcs-2.0.0/tests/repair.sh darcs-2.0.2/tests/repair.sh +--- darcs-2.0.0/tests/repair.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/repair.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -1,24 +1,22 @@ + #!/usr/bin/env bash + set -ev + +-test $DARCS || DARCS=$PWD/../darcs +- + rm -rf temp1 + mkdir temp1 + cd temp1 +-$DARCS initialize ++darcs initialize + echo ALL ignore-times >> _darcs/prefs/defaults + echo A1 > foo + mkdir d + echo A2 > d/bar +-$DARCS add foo +-$DARCS add d +-$DARCS add d/bar +-$DARCS record -a -m AA -A x ++darcs add foo ++darcs add d ++darcs add d/bar ++darcs record -a -m AA -A x + echo B > foo +-$DARCS record -a -m BB -A x ++darcs record -a -m BB -A x + echo C > foo +-$DARCS record -a -m CC -A x ++darcs record -a -m CC -A x + + for i in _darcs/pristine*; do + echo Empty the pristine directory: $i +@@ -26,7 +24,7 @@ + mkdir $i + done + +-$DARCS repair ++darcs repair + + cd .. + rm -rf temp1 +diff -ruN darcs-2.0.0/tests/replace_after_pending_add.sh darcs-2.0.2/tests/replace_after_pending_add.sh +--- darcs-2.0.0/tests/replace_after_pending_add.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/replace_after_pending_add.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -2,19 +2,17 @@ + + set -ev + +-[ -n "$DARCS" ] || DARCS=$PWD/../darcs +-EMAIL=tester +-export EMAIL +- + rm -fr temp1 + + mkdir temp1 + cd temp1 +-$DARCS init ++darcs --version ++ ++darcs init + + echo a b a b a b > A +-$DARCS add A +-if $DARCS replace a c A | grep Skipping; then ++darcs add A ++if darcs replace a c A | grep Skipping; then + exit 1 + fi + cd .. +diff -ruN darcs-2.0.0/tests/replace_after_pending_mv.sh darcs-2.0.2/tests/replace_after_pending_mv.sh +--- darcs-2.0.0/tests/replace_after_pending_mv.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/replace_after_pending_mv.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -2,21 +2,17 @@ + + set -ev + +-[ -n "$DARCS" ] || DARCS=$PWD/../darcs +-EMAIL=tester +-export EMAIL +- + rm -fr temp1 + + mkdir temp1 + cd temp1 +-$DARCS init ++darcs init + + echo a b a b a b > A +-$DARCS add A +-$DARCS record --all --patch-name=p1 +-$DARCS mv A B +-if $DARCS replace a c B | grep Skipping; then ++darcs add A ++darcs record --all --patch-name=p1 ++darcs mv A B ++if darcs replace a c B | grep Skipping; then + exit 1 + fi + cd .. +diff -ruN darcs-2.0.0/tests/replace.sh darcs-2.0.2/tests/replace.sh +--- darcs-2.0.0/tests/replace.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/replace.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -1,28 +1,24 @@ + #!/usr/bin/env bash + set -ev + +-DARCS_EMAIL=tester +-export DARCS_EMAIL +-test $DARCS || DARCS=$PWD/../darcs +- + rm -rf temp + mkdir temp + cd temp + +-$DARCS init ++darcs init + + echo "X X X" > foo +-$DARCS rec -alm "Added" ++darcs rec -alm "Added" + + # This should fail until replace handles spaces +-$DARCS replace ' X ' ' XX ' --token-chars '[ X]' foo && exit 1 || true ++darcs replace ' X ' ' XX ' --token-chars '[ X]' foo && exit 1 || true + + # Check that replace is not fooled by duplicate file names + # (i.e. not trying to performe the replace twice in the same file) +-$DARCS replace X Y foo foo +-$DARCS replace Y Z foo ../temp/foo +-$DARCS replace Z Q foo foo --repodir=../temp/ +-$DARCS rec -am "xyzq" ++darcs replace X Y foo foo ++darcs replace Y Z foo ../temp/foo ++darcs replace Z Q foo foo --repodir=../temp/ ++darcs rec -am "xyzq" + + + # Try to "overwrite" a hunk with a replace. +@@ -35,26 +31,26 @@ + + # this succeeds + echo "x" > foo +-$DARCS rec -am xx ++darcs rec -am xx + echo "y" > foo +-$DARCS replace --ignore-times x y foo ++darcs replace --ignore-times x y foo + + # this fails + echo "hej" > foo +-$DARCS rec -am hej ++darcs rec -am hej + echo "hopp" > foo +-$DARCS replace hej hopp foo ++darcs replace hej hopp foo + +-$DARCS whatsnew ++darcs whatsnew + + echo "src" > foo + echo "dst" >> foo +-$DARCS rec -am hop +-$DARCS replace src dst foo || true +-$DARCS replace --force src dst foo ++darcs rec -am hop ++darcs replace src dst foo || true ++darcs replace --force src dst foo + +-$DARCS whatsnew +-$DARCS whatsnew -ls ++darcs whatsnew ++darcs whatsnew -ls + + cd .. + rm -rf temp +diff -ruN darcs-2.0.0/tests/repodir.sh darcs-2.0.2/tests/repodir.sh +--- darcs-2.0.0/tests/repodir.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/repodir.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -2,9 +2,6 @@ + ### http://bugs.darcs.net/issue496 + ### _darcs/prefs/defaults ignored when using --repodir + set -ev +-: ${DARCS:=$PWD/../darcs} +-: ${DARCS_EMAIL:=tester} +-export DARCS_EMAIL + + ## All these commands SHOULD fail (hence leading NOTs). + ## I would use the builtin !, but that has the wrong semantics. +@@ -15,19 +12,19 @@ + cd temp + + mkdir repo +-$DARCS initialize --repodir repo ++darcs initialize --repodir repo + cd repo + date > foo +-$DARCS add foo +-$DARCS record -a -m auth ++darcs add foo ++darcs record -a -m auth + + echo > _darcs/prefs/defaults ALL disable # try to disable all +-not $DARCS changes +-not $DARCS changes --repodir "$PWD" ++not darcs changes ++not darcs changes --repodir "$PWD" + + cd .. + +-not $DARCS changes --repodir repo +-not $DARCS changes --repodir "$PWD/repo" ++not darcs changes --repodir repo ++not darcs changes --repodir "$PWD/repo" + + rm -rf temp +diff -ruN darcs-2.0.0/tests/repoformat.pl darcs-2.0.2/tests/repoformat.pl +--- darcs-2.0.0/tests/repoformat.pl 1970-01-01 00:00:00.000000000 +0000 ++++ darcs-2.0.2/tests/repoformat.pl 2008-06-24 01:23:13.000000000 +0000 +@@ -0,0 +1,23 @@ ++#!/usr/bin/env perl ++ ++use lib 'lib/perl', '../tests/lib/perl'; ++use Test::More 'no_plan'; ++use Test::Darcs; ++use Shell::Command; ++use File::Slurp; ++use Cwd 'abs_path'; ++use strict; ++ ++use File::Temp 'tempdir'; ++chdir tempdir( CLEANUP => 1 ); ++ ++mkpath 'first'; ++chdir 'first'; ++darcs 'init'; ++open FORMAT, ">>_darcs/format"; ++print FORMAT "gobbledygook\n"; ++close FORMAT; ++chdir '../'; ++ ++my $out = darcs "get first second"; ++like($out,qr/Can't understand repository format/i, "got expected failure when using unknown repoformat in get"); +diff -ruN darcs-2.0.0/tests/revert_interactive.sh darcs-2.0.2/tests/revert_interactive.sh +--- darcs-2.0.0/tests/revert_interactive.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/revert_interactive.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -1,18 +1,16 @@ + #!/usr/bin/env bash + set -ev + +-test $DARCS || DARCS=$PWD/../darcs +- + rm -rf temp1 + mkdir temp1 + cd temp1 +-$DARCS init ++darcs init + echo hello world > foo +-$DARCS add foo +-$DARCS record -a -m add -A x ++darcs add foo ++darcs record -a -m add -A x + echo goodbye world >> foo +-echo y/y | tr / \\012 | $DARCS revert +-$DARCS show contents foo | cmp foo - ++echo y/y | tr / \\012 | darcs revert ++darcs show contents foo | cmp foo - + + # Now let's test a trickier revert where changes commute nontrivially. + +@@ -24,14 +22,14 @@ + e + EOF + +-$DARCS record -a -A me -m cleanup ++darcs record -a -A me -m cleanup + + mv foo foo.tmp + cat foo.tmp | grep -v b | grep -v d > foo + +-echo "nyy" | $DARCS revert ++echo "nyy" | darcs revert + +-DARCS_DONT_COLOR=1 $DARCS wh > whatsnew ++DARCS_DONT_COLOR=1 darcs wh > whatsnew + cat > correct < bar + echo hello world > foo +-$DARCS add bar +-$DARCS replace hello goodbye bar foo ++darcs add bar ++darcs replace hello goodbye bar foo + +-echo "cnnnyy/y" | tr / \\012 | $DARCS revert ++echo "cnnnyy/y" | tr / \\012 | darcs revert + +-DARCS_DONT_COLOR=1 $DARCS wh > whatsnew ++DARCS_DONT_COLOR=1 darcs wh > whatsnew + cat > correct < foo +-$DARCS add foo ++darcs add foo + +-$DARCS revert -a +\ No newline at end of file ++darcs revert -a +diff -ruN darcs-2.0.0/tests/rmconflict.sh darcs-2.0.2/tests/rmconflict.sh +--- darcs-2.0.0/tests/rmconflict.sh 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/tests/rmconflict.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -1,26 +1,24 @@ + #!/usr/bin/env bash + set -ev + +-test $DARCS || DARCS=$PWD/../darcs +- + rm -rf tempA tempB + mkdir tempA tempB + cd tempA +-$DARCS init ++darcs init + touch foo +-$DARCS add foo +-$DARCS record -a -m addA -A x ++darcs add foo ++darcs record -a -m addA -A x + cd ../tempB +-$DARCS init +-$DARCS pull -a ../tempA +-$DARCS remove foo ++darcs init ++darcs pull -a ../tempA ++darcs remove foo + # rm foo +-$DARCS record -a -m rmB -A x ++darcs record -a -m rmB -A x + cd ../tempA +-$DARCS remove foo +-$DARCS record -a -m rmA -A x ++darcs remove foo ++darcs record -a -m rmA -A x + cd ../tempB +-$DARCS pull -a ../tempA ++darcs pull -a ../tempA + cd .. + rm -rf tempA tempB + +diff -ruN darcs-2.0.0/tests/rmdir.sh darcs-2.0.2/tests/rmdir.sh +--- darcs-2.0.0/tests/rmdir.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/rmdir.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -1,8 +1,6 @@ + #!/usr/bin/env bash + set -ev + +-test $DARCS || DARCS=$PWD/../darcs +- + rm -rf temp1 temp2 temp3 + + # initialise temp1 +diff -ruN darcs-2.0.0/tests/rollback-nothing.sh darcs-2.0.2/tests/rollback-nothing.sh +--- darcs-2.0.0/tests/rollback-nothing.sh 1970-01-01 00:00:00.000000000 +0000 ++++ darcs-2.0.2/tests/rollback-nothing.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -0,0 +1,16 @@ ++#!/usr/bin/env bash ++ ++set -ev ++ ++rm -rf temp ++mkdir temp ++cd temp ++darcs init ++date > file1 ++darcs add file1 ++darcs record -am "test" ++rm file1 ++darcs record -am "rm" ++echo yd | darcs rollback --last=1 -m 'oops' | grep 'No changes selected' ++cd .. ++rm -rf temp +diff -ruN darcs-2.0.0/tests/rollback.sh darcs-2.0.2/tests/rollback.sh +--- darcs-2.0.0/tests/rollback.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/rollback.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -2,37 +2,31 @@ + + set -ev + +-test $DARCS || DARCS=$PWD/../darcs +-ACTUAL_DARCS=`which $DARCS` +-DARCSPATH=`dirname $ACTUAL_DARCS` +-PATH="$DARCSPATH:$PATH" +-export PATH +- + range="0 1 2" + +-mkdir temp1 && cd temp1 && $DARCS init +-touch f && $DARCS add f ++mkdir temp1 && cd temp1 && darcs init ++touch f && darcs add f + for i in $range + do +- echo $i > f && $DARCS record -A me --ignore-time -m p$i --all f ++ echo $i > f && darcs record -A me --ignore-time -m p$i --all f + done + +-cd .. && mkdir temp2 && cd temp2 && $DARCS init ++cd .. && mkdir temp2 && cd temp2 && darcs init + + set -x + + : Demonstrate problem with regrem + for i in $range + do +- $DARCS pull --patch p$i ../temp1 --all +- if $DARCS whatsnew ; then ++ darcs pull --patch p$i ../temp1 --all ++ if darcs whatsnew ; then + : Resolve conflict - rollback our patch +- $DARCS revert --all +- $DARCS rollback -a --patch-name x0 +- $DARCS revert --all ++ darcs revert --all ++ darcs rollback -a --patch-name x0 ++ darcs revert --all + fi + : Create local change and record it +- echo X$i > f && $DARCS record -A me --ignore-time -m x$i --all f ++ echo X$i > f && darcs record -A me --ignore-time -m x$i --all f + done + + cd .. +diff -ruN darcs-2.0.0/tests/run-all-tests darcs-2.0.2/tests/run-all-tests +--- darcs-2.0.0/tests/run-all-tests 1970-01-01 00:00:00.000000000 +0000 ++++ darcs-2.0.2/tests/run-all-tests 2008-06-24 01:23:13.000000000 +0000 +@@ -0,0 +1,30 @@ ++#!/usr/bin/env bash ++ ++set -ev ++ ++#autoconf ++#./configure ++#make clean ++make -j4 darcs ++ ++echo "Let's check that make dist works properly..." ++ ++rm -rf darcs-test.tar.gz darcs-test ++make -j4 darcs-test.tar.gz ++tar zxvf darcs-test.tar.gz ++ ++cd darcs-test ++cat release/STATE ++echo ++./configure ++ ++cat release/STATE ++ ++make src/ThisVersion.lhs ++ ++cat release/STATE ++ ++make release/STATE ++ ++diff -u ../src/ThisVersion.lhs src/ThisVersion.lhs ++diff -u ../release/STATE release/STATE +diff -ruN darcs-2.0.0/tests/sametwice.sh darcs-2.0.2/tests/sametwice.sh +--- darcs-2.0.0/tests/sametwice.sh 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/tests/sametwice.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -1,30 +1,29 @@ + #!/usr/bin/env bash + set -ev + +-test $DARCS || DARCS=$PWD/../darcs + rm -rf temp1 temp2 + mkdir temp1 + cd temp1 +-$DARCS init ++darcs init + echo record author me > _darcs/prefs/defaults + echo ALL all >> _darcs/prefs/defaults + echo ALL verbose >> _darcs/prefs/defaults + echo ALL ignore-times >> _darcs/prefs/defaults + touch foo +-$DARCS add foo +-$DARCS whatsnew +-$DARCS record -m add_foo ++darcs add foo ++darcs whatsnew ++darcs record -m add_foo + echo hello >> foo +-$DARCS record -m mod_foo ++darcs record -m mod_foo + cd .. +-$DARCS get --repo-name temp2 temp1 ++darcs get --repo-name temp2 temp1 + cd temp2 + cp ../temp1/_darcs/prefs/defaults _darcs/prefs +-echo y/d/y | tr / \\012 | $DARCS unpull --interactive ++echo y/d/y | tr / \\012 | darcs unpull --interactive + test -f foo -a ! -s foo + echo hello >> foo +-$DARCS record -m mod_foo_again +-$DARCS pull ../temp1 ++darcs record -m mod_foo_again ++darcs pull ../temp1 + test -s foo + cd .. + rm -rf temp1 temp2 +diff -ruN darcs-2.0.0/tests/send_apply.sh darcs-2.0.2/tests/send_apply.sh +--- darcs-2.0.0/tests/send_apply.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/send_apply.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -1,34 +1,32 @@ + #!/usr/bin/env bash + set -ev + +-test $DARCS || DARCS=$PWD/../darcs +- + rm -rf temp1 temp2 + mkdir temp1 temp2 + + cd temp2 +-$DARCS init ++darcs init + + cd ../temp1 +-$DARCS init ++darcs init + touch foo bar +-$DARCS add foo bar +-$DARCS record -a -m add_foo_bar -A x +-$DARCS mv foo zig +-$DARCS mv bar foo +-$DARCS mv zig bar +-$DARCS record -a -m swap_foo_bar -A x +-$DARCS send --author=me --output=funpatch --dont-sign -a ../temp2 ++darcs add foo bar ++darcs record -a -m add_foo_bar -A x ++darcs mv foo zig ++darcs mv bar foo ++darcs mv zig bar ++darcs record -a -m swap_foo_bar -A x ++darcs send --author=me --output=funpatch --dont-sign -a ../temp2 + cd ../temp2 +-$DARCS apply ../temp1/funpatch ++darcs apply ../temp1/funpatch + cd .. + cmp temp1/bar temp2/bar + rm -rf temp2 + + mkdir temp2 + cd temp2 +-$DARCS init +-$DARCS apply < ../temp1/funpatch ++darcs init ++darcs apply < ../temp1/funpatch + cd .. + cmp temp1/bar temp2/bar + +diff -ruN darcs-2.0.0/tests/send.sh darcs-2.0.2/tests/send.sh +--- darcs-2.0.0/tests/send.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/send.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -1,7 +1,6 @@ + #!/usr/bin/env bash + set -ev + +-test $DARCS || DARCS=$PWD/../darcs + DARCS_EDITOR=echo + export DARCS_EDITOR + +@@ -9,30 +8,30 @@ + mkdir temp1 temp2 + + cd temp2 +-$DARCS init ++darcs init + + # setup test + cd ../temp1 +-$DARCS init ++darcs init + touch foo bar +-$DARCS add foo bar +-$DARCS record -a -m add_foo_bar -A x ++darcs add foo bar ++darcs record -a -m add_foo_bar -A x + + # Test that a default preference value is not needed to send +-$DARCS send --author=me -a --to=random@random --sendmail-command='grep "^To: random@random$" %<' ../temp2 ++darcs send --author=me -a --to=random@random --sendmail-command='grep "^To: random@random$" %<' ../temp2 + + # Test that a default preference will be used when no --to value is specified + echo "default@email" > ../temp2/_darcs/prefs/email +-$DARCS send --author=me -a --sendmail-command='grep "^To: default@email$" %<' ../temp2 ++darcs send --author=me -a --sendmail-command='grep "^To: default@email$" %<' ../temp2 + + # Test that the --to parameter overrides the default value in the repository +-$DARCS send --author=me -a --to=override@default --sendmail-command='grep "^To: override@default$" %<' ../temp2 ++darcs send --author=me -a --to=override@default --sendmail-command='grep "^To: override@default$" %<' ../temp2 + + # Test that the --subject parameter sets the subject + + # Test that the --output-auto-name parameter outputs what we expect +-$DARCS send --author=me -a --subject="it works" --output test1.dpatch ../temp2 +-$DARCS send --author=me -a --subject="it works" --output-auto-name ../temp2 ++darcs send --author=me -a --subject="it works" --output test1.dpatch ../temp2 ++darcs send --author=me -a --subject="it works" --output-auto-name ../temp2 + cmp test1.dpatch add_foo_bar.dpatch + + cd .. +diff -ruN darcs-2.0.0/tests/setpref.sh darcs-2.0.2/tests/setpref.sh +--- darcs-2.0.0/tests/setpref.sh 1970-01-01 00:00:00.000000000 +0000 ++++ darcs-2.0.2/tests/setpref.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -0,0 +1,26 @@ ++#!/usr/bin/env bash ++ ++set -ev ++ ++## I would use the builtin !, but that has the wrong semantics. ++not () { "$@" && exit 1 || :; } ++ ++rm -rf temp1 temp2 ++mkdir temp1 ++cd temp1 ++darcs init ++echo 'test file 1' > foo ++darcs record --look-for-adds --all -m"Patch 1" ++echo 'test boringfile' > bar ++darcs setpref boringfile bar ++darcs record --look-for-adds --all -m"Patch 2" ++echo 'test file 3' > baz ++# there should be no -R ++darcs record --look-for-adds --all -m"Patch 3" > ../temp2 ++cat ../temp2 ++not grep R ../temp2 ++ ++cd .. ++ ++rm -rf temp1 ++rm -f temp2 +diff -ruN darcs-2.0.0/tests/set_scripts_executable.pl darcs-2.0.2/tests/set_scripts_executable.pl +--- darcs-2.0.0/tests/set_scripts_executable.pl 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/set_scripts_executable.pl 2008-06-24 01:23:13.000000000 +0000 +@@ -11,7 +11,7 @@ + + my $test_dir = abs_path(); + +-if ($^O =~ /msys/i) { ++if ($^O =~ /win/i) { + pass 'test does not work on windows'; + } else { + my $test_name = 'darcs pull --set-scripts-executable works'; +diff -ruN darcs-2.0.0/tests/several_commands.sh darcs-2.0.2/tests/several_commands.sh +--- darcs-2.0.0/tests/several_commands.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/several_commands.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -1,27 +1,25 @@ + #!/usr/bin/env bash + set -ev + +-test $DARCS || DARCS=$PWD/../darcs +- + rm -rf temp1 + mkdir temp1 + cd temp1 +-$DARCS init ++darcs init + echo hello world > foo +-$DARCS add foo +-$DARCS record -a -m add -A x ++darcs add foo ++darcs record -a -m add -A x + echo goodbye world >> foo +-$DARCS diff +-$DARCS diff -u +-$DARCS whatsnew +-$DARCS whatsnew --summary +-echo y | $DARCS revert -a +-$DARCS show contents foo | cmp foo - ++darcs diff ++darcs diff -u ++darcs whatsnew ++darcs whatsnew --summary ++echo y | darcs revert -a ++darcs show contents foo | cmp foo - + mkdir d +-$DARCS add d +-$DARCS record -a -m 'add dir' -A x ++darcs add d ++darcs record -a -m 'add dir' -A x + rmdir d +-$DARCS revert -a d ++darcs revert -a d + cd .. + rm -rf temp1 + +diff -ruN darcs-2.0.0/tests/shell_harness darcs-2.0.2/tests/shell_harness +--- darcs-2.0.0/tests/shell_harness 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/shell_harness 2008-06-24 01:23:13.000000000 +0000 +@@ -15,9 +15,14 @@ + # Used for finding darcs, but may not be defined by the shell + $ENV{PWD} = cwd(); + +-# Put a false darcs first in PATH +-$ENV{PATH} = "$ENV{HOME}/bin:$ENV{PATH}"; +-chmod 0755, 'bin/darcs'; ++# Put the right darcs first in PATH ++my $darcspath="$ENV{HOME}/.."; ++if ($ENV{DARCS}) { ++ # User has asked for a particular darcs... ++ my $actualdarcs=`which $ENV{DARCS}`; ++ my $darcspath=`dirname "$actualdarcs"`; ++} ++$ENV{PATH} = "$darcspath:$ENV{PATH}"; + + # Some environment variables can act as defaults that we don't want + $ENV{EMAIL} = $ENV{DARCS_EMAIL} = 'tester'; +@@ -28,12 +33,13 @@ + $ENV{DARCS_DONT_COLOR} = 1; + $ENV{DARCS_DONT_ESCAPE_ANYTHING} = 1; + +-# Setting this helps us run the tests in path that as a space in it. +-# "man sh" explains it more. +-$ENV{IFS} = ''; +- + my $OK = 1; + my @Failures; ++ ++`which bash`; ++if( $? != 0 ) { ++ die "You need bash to run the shell tests!" ++} + + for my $test (@ARGV) { + my $test_out = "test_output/$test.out"; +diff -ruN darcs-2.0.0/tests/show-authors.sh darcs-2.0.2/tests/show-authors.sh +--- darcs-2.0.0/tests/show-authors.sh 1970-01-01 00:00:00.000000000 +0000 ++++ darcs-2.0.2/tests/show-authors.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -0,0 +1,30 @@ ++#!/usr/bin/env bash ++set -ev ++ ++rm -rf test ++mkdir test ++cd test ++darcs init ++echo zig > foo ++darcs add foo ++darcs record -a -m add_foo -A x ++echo zag >> foo ++darcs record -a -m mod_foo -A y ++echo bar > foo ++darcs record -a -m mod2 -A y ++ ++darcs show authors > authors ++grep x authors ++grep y authors ++ ++head -1 authors > first-author ++grep y first-author ++ ++darcs show authors --verbose ++darcs show authors --verbose | grep y | wc -l > num-patches ++cat num-patches ++grep 2 num-patches ++ ++cd .. ++rm -rf test ++ +diff -ruN darcs-2.0.0/tests/show-bug.sh darcs-2.0.2/tests/show-bug.sh +--- darcs-2.0.0/tests/show-bug.sh 1970-01-01 00:00:00.000000000 +0000 ++++ darcs-2.0.2/tests/show-bug.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -0,0 +1,32 @@ ++#!/usr/bin/env bash ++set -ev ++ ++## All these commands SHOULD fail (hence leading NOTs). ++## I would use the builtin !, but that has the wrong semantics. ++not () { "$@" && exit 1 || :; } ++ ++rm -rf test ++mkdir test ++cd test ++ ++darcs show bug --debug 1> stdout 2> stderr || true ++ ++cat stdout ++cat stderr ++ ++echo The following test will fail if this version of darcs is marked as ++echo obsolete. ++echo ================================================================== ++ ++not grep 'please do not' stderr ++ ++# The following test fails if HTTP isn't present, but would be a nice test ++# to have in place. ++ ++#not grep unable stderr ++ ++grep 'fake bug' stderr ++ ++cd .. ++rm -rf test ++ +diff -ruN darcs-2.0.0/tests/show_tags.sh darcs-2.0.2/tests/show_tags.sh +--- darcs-2.0.0/tests/show_tags.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/show_tags.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -1,30 +1,28 @@ + #!/usr/bin/env bash + set -ev + +-test $DARCS || DARCS=$PWD/../darcs +- + rm -rf temp1 + mkdir temp1 + cd temp1 +-$DARCS initialize ++darcs initialize + echo ALL ignore-times >> _darcs/prefs/defaults + echo A > foo +-$DARCS add foo +-$DARCS record -a -m AA -A x ++darcs add foo ++darcs record -a -m AA -A x + echo B > foo +-$DARCS record -a -m BB -A x ++darcs record -a -m BB -A x + echo C > foo +-$DARCS record -a -m CC -A x +-$DARCS tag -m 1.0 -A x ++darcs record -a -m CC -A x ++darcs tag -m 1.0 -A x + echo D > foo +-$DARCS record -a -m DD -A x ++darcs record -a -m DD -A x + echo E > foo +-$DARCS record -a -m EE -A x ++darcs record -a -m EE -A x + echo F > foo +-$DARCS record -a -m FF -A x +-$DARCS tag -m 2.0 -A x ++darcs record -a -m FF -A x ++darcs tag -m 2.0 -A x + +-$DARCS show tags > my ++darcs show tags > my + cat my + cat > ref < foo +-$DARCS add foo +-$DARCS record -a --author=me -m "First patch" ++darcs add foo ++darcs record -a --author=me -m "First patch" + i=1 + while test $i -le 100; do + echo foo $i > foo; +- $DARCS record --ignore-times -a --author=me -m "Patch $i" > bar ++ darcs record --ignore-times -a --author=me -m "Patch $i" > bar + i=`expr $i + 1` + done +-$DARCS tag --author=me -m 'silly tag' ++darcs tag --author=me -m 'silly tag' + i=1000 + while test $i -le 1096; do + echo foo $i > foo; +- $DARCS record --ignore-times -a --author=me -m "Patch $i" > bar ++ darcs record --ignore-times -a --author=me -m "Patch $i" > bar + i=`expr $i + 1` + done + +-$DARCS --version +-$DARCS changes | head ++darcs --version ++darcs changes | head + + cd .. + # rm -rf temp1 +diff -ruN darcs-2.0.0/tests/ssh.sh darcs-2.0.2/tests/ssh.sh +--- darcs-2.0.0/tests/ssh.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/ssh.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -1,10 +1,6 @@ + #!/usr/bin/env bash + set -ev + +-export EMAIL=tester +- +-test $DARCS || DARCS=$PWD/../darcs +- + if [ x${REMOTE_DIR} = x ]; then + REMOTE_DIR=sshtest + fi +@@ -129,13 +125,13 @@ + + cd testrepo + echo 'change for remote' > a +-$DARCS record --ignore-times -am 'change for remote' +-$DARCS push -a +-$DARCS ob --last 1 -a ++darcs record --ignore-times -am 'change for remote' ++darcs push -a ++darcs ob --last 1 -a + echo 'change for local' > a +-$DARCS record --ignore-times -am 'change for local' ++darcs record --ignore-times -am 'change for local' + +-if $DARCS push -a 2>&1 | grep -q 'conflicts options to apply' ; then ++if darcs push -a 2>&1 | grep -q 'conflicts options to apply' ; then + # do nothing. + echo "OK"; + else +diff -ruN darcs-2.0.0/tests/steve_and_monica_rollback.sh darcs-2.0.2/tests/steve_and_monica_rollback.sh +--- darcs-2.0.0/tests/steve_and_monica_rollback.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/steve_and_monica_rollback.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -2,9 +2,7 @@ + + # Issue578: A conflict rollback case for Darcs2 + +-darcs --version +- +-export EMAIL=tester ++set -ev + + rm -rf tmp_steve tmp_monica + +diff -ruN darcs-2.0.0/tests/three_way_conflict.sh darcs-2.0.2/tests/three_way_conflict.sh +--- darcs-2.0.0/tests/three_way_conflict.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/three_way_conflict.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -1,36 +1,34 @@ + #!/usr/bin/env bash + set -ev + +-test $DARCS || DARCS=$PWD/../darcs +- + rm -rf temp1 temp2 temp3 + mkdir -p temp1 temp2 temp3 + cd temp1 +-$DARCS init ++darcs init + cd ../temp2 +-$DARCS init ++darcs init + cd ../temp3 +-$DARCS init ++darcs init + + touch foo +-$DARCS add foo +-$DARCS record -a -A author -m add +-$DARCS push -a ../temp2 +-$DARCS push -a ../temp1 ++darcs add foo ++darcs record -a -A author -m add ++darcs push -a ../temp2 ++darcs push -a ../temp1 + + echo A > foo +-$DARCS record -a -A author -m AA ++darcs record -a -A author -m AA + cd ../temp2 + echo B > foo +-$DARCS record -a -A author -m BB ++darcs record -a -A author -m BB + cd ../temp1 + echo C > foo +-$DARCS record -a -A author -m CC ++darcs record -a -A author -m CC + +-$DARCS pull -a ../temp2 +-$DARCS pull -a ../temp3 ++darcs pull -a ../temp2 ++darcs pull -a ../temp3 + + cd ../temp2 +-$DARCS pull -a ../temp3 +-$DARCS pull -a ../temp1 ++darcs pull -a ../temp3 ++darcs pull -a ../temp1 + rm -rf temp1 temp2 temp3 +diff -ruN darcs-2.0.0/tests/tricky_unrecord.sh darcs-2.0.2/tests/tricky_unrecord.sh +--- darcs-2.0.0/tests/tricky_unrecord.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/tricky_unrecord.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -1,27 +1,26 @@ + #!/usr/bin/env bash + set -ev + +-test $DARCS || DARCS=$PWD/../darcs + rm -rf temp + mkdir temp + cd temp +-$DARCS init ++darcs init + date > temp.c +-$DARCS add temp.c +-$DARCS record --all -A test --patch-name=hi ++darcs add temp.c ++darcs record --all -A test --patch-name=hi + + mkdir d +-$DARCS add d +-$DARCS mv temp.c d/ +-$DARCS record --all -A test --patch-name=mvetc +-$DARCS show contents d/temp.c | cmp d/temp.c - +- +-echo y/d/y | tr / \\012 | $DARCS unrecord +-$DARCS whatsnew +-# $DARCS show contents d/temp.c | cmp d/temp.c - ++darcs add d ++darcs mv temp.c d/ ++darcs record --all -A test --patch-name=mvetc ++darcs show contents d/temp.c | cmp d/temp.c - ++ ++echo y/d/y | tr / \\012 | darcs unrecord ++darcs whatsnew ++# darcs show contents d/temp.c | cmp d/temp.c - + +-$DARCS record --all -A test --patch-name=again +-$DARCS show contents d/temp.c | cmp d/temp.c - ++darcs record --all -A test --patch-name=again ++darcs show contents d/temp.c | cmp d/temp.c - + + cd .. + rm -rf temp +diff -ruN darcs-2.0.0/tests/uniqueoptions.sh darcs-2.0.2/tests/uniqueoptions.sh +--- darcs-2.0.0/tests/uniqueoptions.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/uniqueoptions.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -3,57 +3,30 @@ + echo Checking that each command expects each option only once + echo + +-set -e ++set -ev ++ ++if echo $OS | grep -i windows; then ++ echo Noone knows how to handle newlines under cygwin, so we skip this test ++ exit 0 ++fi + +-test $DARCS || DARCS=$PWD/../darcs + rm -rf temp1 + mkdir temp1 + cd temp1 + +-command_good() { +- echo -n Checking $1... ' ' ++for i in `darcs --commands | grep -v -- -- | xargs echo`; do ++ echo -n Checking $i... ' ' + # only output actual command options, i.e. lines that contain a -- +- $DARCS $1 --help | grep -- "--" | sort > $1 +- uniq $1 > uni$1 +- if cmp $1 uni$1; then ++ darcs $i --help | grep -- "--" | sort > $i ++ uniq $i > uni$i ++ if cmp $i uni$i; then + echo passed. + else + echo failed! +- diff -c uni$1 $1 +- return 1 ++ diff -c uni$i $i ++ exit 1 + fi +- return 0 +-} +- +-command_good get +-command_good init +-$DARCS init +-command_good annotate +-command_good add +-command_good whatsnew +-command_good record +-command_good get +-command_good pull +-command_good remove +-command_good rollback +-command_good unrecord +-command_good unpull +-command_good check +-command_good revert +-command_good unrevert +-command_good dist +-command_good mv +-command_good replace +-command_good tag +-command_good push +-command_good apply +-command_good diff +-command_good setpref +-command_good trackdown +-command_good optimize +-command_good changes +-command_good annotate +-command_good repair ++done + + cd .. + rm -rf temp1 +diff -ruN darcs-2.0.0/tests/unpull.sh darcs-2.0.2/tests/unpull.sh +--- darcs-2.0.0/tests/unpull.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/unpull.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -1,25 +1,23 @@ + #!/usr/bin/env bash + set -ev + +-test $DARCS || DARCS=$PWD/../darcs +- + rm -rf temp1 + mkdir temp1 + cd temp1 +-$DARCS init ++darcs init + cat > f < f < f +-$DARCS rec -Ax -alm init +-$DARCS tag -Ax --checkpoint t +-echo y | $DARCS unrec -t t ++darcs rec -Ax -alm init ++darcs tag -Ax --checkpoint t ++echo y | darcs unrec -t t + # the complete inventory has only one patch to check +-$DARCS check --complete > out ++darcs check --complete > out + # The following test fails because the new progress code only + # prints out information on slow commands. + #grep '1 of 1' out >/dev/null + + # the checkpoint (if left) has two patches to check + # but it should have been removed +-$DARCS check --partial > out ++darcs check --partial > out + # The following test fails because the new progress code only + # prints out information on slow commands. + #grep '1 of 1' out >/dev/null +diff -ruN darcs-2.0.0/tests/unrevert_cancel.sh darcs-2.0.2/tests/unrevert_cancel.sh +--- darcs-2.0.0/tests/unrevert_cancel.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/unrevert_cancel.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -4,21 +4,19 @@ + + set -ev + +-test $DARCS || DARCS=$PWD/../darcs +- + rm -rf temp1 + mkdir temp1 + cd temp1 +-$DARCS init ++darcs init + touch a + touch b +-$DARCS add * +-$DARCS record -A moi -am init ++darcs add * ++darcs record -A moi -am init + echo plim >> a + echo plim >> b +-echo y/y/y/ | tr / \\012 | $DARCS revert ++echo y/y/y/ | tr / \\012 | darcs revert + echo ploum >> a +-echo nyy | tr / \\012 | $DARCS unrevert ++echo nyy | tr / \\012 | darcs unrevert + + cd .. + rm -rf temp1 +diff -ruN darcs-2.0.0/tests/unrevert.sh darcs-2.0.2/tests/unrevert.sh +--- darcs-2.0.0/tests/unrevert.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/unrevert.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -1,21 +1,19 @@ + #!/usr/bin/env bash + set -ev + +-test $DARCS || DARCS=$PWD/../darcs +- + rm -rf temp1 + mkdir temp1 + cd temp1 +-$DARCS init ++darcs init + echo hello world > foo +-$DARCS add foo +-$DARCS record -a -m add -A x ++darcs add foo ++darcs record -a -m add -A x + echo goodbye world >> foo + cp foo bar +-$DARCS revert -a +-$DARCS show contents foo | cmp foo - ++darcs revert -a ++darcs show contents foo | cmp foo - + +-$DARCS unrevert -a ++darcs unrevert -a + cmp foo bar + + cd .. +diff -ruN darcs-2.0.0/tests/what_sl.sh darcs-2.0.2/tests/what_sl.sh +--- darcs-2.0.0/tests/what_sl.sh 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/what_sl.sh 2008-06-24 01:23:13.000000000 +0000 +@@ -1,21 +1,18 @@ + #!/usr/bin/env bash + +- + set -ev + +-test $DARCS || DARCS=$PWD/../darcs +- + rm -rf temp1 + mkdir temp1 + cd temp1 +-$DARCS init ++darcs init + touch foo +-$DARCS add foo +-$DARCS rec -m t1 -a -A tester ++darcs add foo ++darcs rec -m t1 -a -A tester + echo 1 >> foo +-$DARCS what -s | grep -v No\ changes +-$DARCS what -l | grep -v No\ changes +-$DARCS what -sl | grep -v No\ changes ++darcs what -s | grep -v No\ changes ++darcs what -l | grep -v No\ changes ++darcs what -sl | grep -v No\ changes + + cd .. + rm -rf temp1 +diff -ruN darcs-2.0.0/tests/whatsnew.pl darcs-2.0.2/tests/whatsnew.pl +--- darcs-2.0.0/tests/whatsnew.pl 2008-04-07 15:08:20.000000000 +0000 ++++ darcs-2.0.2/tests/whatsnew.pl 2008-06-24 01:23:13.000000000 +0000 +@@ -32,7 +32,7 @@ + + my $test_name = 'whatsnew works with uncommon file names'; + +-if ($^O =~ /msys/i) { ++if ($^O =~ /(msys|win32)/i) { + pass 'test does not work on windows'; + } else { + touch(qw/\\/); +diff -ruN darcs-2.0.0/tools/update_roundup.pl darcs-2.0.2/tools/update_roundup.pl +--- darcs-2.0.0/tools/update_roundup.pl 2008-04-07 15:08:19.000000000 +0000 ++++ darcs-2.0.2/tools/update_roundup.pl 2008-06-24 01:23:12.000000000 +0000 +@@ -11,15 +11,7 @@ + # resolved issue123 + # in the first line of the patch. + +-# Can be called with --branch=stable to resolve items as "resolved-in-stable". +-# By default we would mark them "resolved-in-unstable" +- + use Getopt::Long; +-my $branch = 'unstable'; +-GetOptions ( "branch=s" => \$branch ); +- +-# TODO: validate branch to only be exactly 'unstable' or 'stable' +- + + use MIME::Lite; + use XML::Simple; +@@ -44,15 +36,14 @@ + # 'some other patch' => { ... }, + + for my $patch_name (keys %{ $xml->{patch} }) { +- my $status_issue_re = qr/(resolved?) \s+ (issue\d+)/msxi; ++ my $issue_re = qr/resolved? \s+ (issue\d+)/msxi; + +- next unless ($patch_name =~ $status_issue_re); +- my ($status,$issue) = ($1,$2); +- $status =~ s/resolve$/resolved/; ++ next unless ($patch_name =~ $issue_re); ++ my $issue = $1; + my $patch = $xml->{patch}{$patch_name}; + + # Using the Command Line would be a simpler alternative. +- # my $out = `roundup-admin -i /var/lib/roundup/trackers/darcs set $issue status=$status`; ++ # my $out = `roundup-admin -i /var/lib/roundup/trackers/darcs set $issue status=resolved-in-unstable`; + # warn "unexpected output: $out" if $out; + + my $author = $patch->{author}; +@@ -60,27 +51,22 @@ + # Otherwise, we default to darcs-devel as the sender. + my $email = ($author =~ m/\@/) ? $author : 'darcs-devel@darcs.net'; + +- my $full_status = "${status}-in-$branch"; +- + my $comment = $patch->{comment} ? "\n$patch->{comment}" : ''; + + my $patch_name_minus_status = $patch_name; +- $patch_name_minus_status =~ s/$status_issue_re(:?\s?)//; ++ $patch_name_minus_status =~ s/$issue_re(:?\s?)//; + + # Each patches can potentially update the status of a different issue, so generates a different e-mail + my $msg = MIME::Lite->new( + From => $email, + To =>'bugs@darcs.net', + #To =>'mark@stosberg.com', +- Subject =>"[$issue] $patch_name_minus_status [status=$full_status]", ++ Subject =>"[$issue] $patch_name_minus_status [status=resolved-in-unstable]", + Type =>'text/plain', +- Data => qq!The following patch updated the status of $issue to be $status in the $branch branch: ++ Data => qq!The following patch updated the status of $issue to be resolved: + + * $patch_name $comment + +-You can view the patch details online here: +-http://darcs.net/cgi-bin/darcs.cgi/$branch/?c=annotate&p=$patch->{hash} +- + ! + ); + $msg->send; hunk ./series 1 +darcs-2.0.0-2.0.2.diff