NEWS.md (112066B)
1 # UNISON NEWS 2 3 This file contains a summary of user-visible or important changes, in 4 the style of the GNU coding standards. By user-visible, we include 5 changes relevant for those building unison from source. We omit most 6 bugfixes, minor improvements, and cleanups, but of course every 7 release contains some. Refer to the documentation for details; this 8 file is a terse notice of changes rather than a tutorial about new 9 features. 10 11 As of 2022, this file (NEWS.md at top level) is used for news. 12 13 Some software has a "changelog" file that records all changes, but 14 unison uses git history for that, and thus there is no changelog file. 15 16 ## Changes in 2.53.7 17 18 Released 2024-11-04 19 20 * Fix for parallel builds of the gui. (If 2.53.6 built for you, 21 because you didn't build the GUI, you didn't use -j, or you got 22 lucky, there is no need to update to 2.53.7.) 23 24 ## Changes in 2.53.6 25 26 Released 2024-11-04 27 28 * Remove workaround for Windows DST: Time differences of one hour 29 are no longer treated as not different. 30 * Time remaining, when over 24h, shown as days and HMS instead of 31 just HMS. 32 * Stop using deprecated [GdkPixbuf.from_xpm_data] (avoids problems 33 with some versions of gdkpixbuf). Attempt to avoid soundness 34 issues with lablgtk while doing so. 35 36 Deprecation warning: support for external rsync will be removed, 37 likely in 2.54.0. 38 39 DEPRECATION MAY HAPPEN WITH LESS THAN TYPICAL NOTICE: 40 lablgtk is difficult to use safely, and future maintenance is 41 unclear. Implementing the GUI without lablgtk requires more effort 42 than seems likely to happen. Thus, it is possible that support for 43 the unison GUI may end suddenly, on a particular platform, or on all 44 platforms -- even in a micro release. See 45 https://github.com/bcpierce00/unison/issues/1075 46 47 ## Changes in 2.53.5 48 49 Released 2024-05-06 50 51 * Various minor bugfixes. 52 * Recovery from errors during repeat mode (enabled in 2.53.1) is disabled 53 for time being. 54 55 ## Changes in 2.53.4 56 57 Released 2024-02-19 58 59 * Improved and simplified makefiles. Please review your build scripts 60 for changed build goals, input variables and build artifact names. 61 See INSTALL.md for details. 62 * opam build uses the makefile build system. 63 * Various fixes in Windows and Cygwin builds. 64 * Preferences "force", "prefer" and related "partial" preferences now 65 work slightly differently with values "newer" and "older". Previously, 66 if mtimes in both replicas were equal then always the second root 67 propagated to the first root (possibly reverting user changes). It 68 is now made explicit that "newer" and "older" only work when mtimes 69 are different. 70 * Cleanups in documentation. 71 * Bugfixes, minor improvements, cleanups. 72 73 ## Changes in 2.53.3 74 75 Released 2023-04-28 76 77 * On Linux, allow syncing the xattrs where POSIX draft ACLS are 78 stored, which enables syncing the ACL info. (Note that this does 79 not enable syncing ACLs with the `-acl` switch, and does not 80 enable syncing ACLs between other systems and Linux. See the 81 manual.) 82 * Improved ETA calculation and sync speed display in text UI. 83 * Fix CI Windows builds (again). 84 * Drop unmaintained "make install" target. 85 * Bugfixes, minor improvements, cleanups. 86 87 ## Changes in 2.53.2 88 89 Released 2023-03-20 90 91 * Change version string to 2.53.2 (2.53.1 identified as 2.53.0). 92 93 ## Changes in 2.53.1 94 95 Released 2023-03-19 96 97 * Repeat mode is more fault tolerant, recovering after temporary 98 errors. 99 * Preferences "force", "prefer" and related no longer require 100 specifying the full root. 101 * Improve stopping of update propagation. 102 * Enable VT input escape codes in Windows. 103 * Respect user-provided CFLAGS, CPPFLAGS, LDFLAGS, LDLIBS. 104 * Add build instructions in INSTALL.md (and drop from manual). 105 * Add graceful stop in repeat mode - SIGUSR2. 106 * Add watch+seconds to 'repeat' preference. 107 108 ## Changes in 2.53.0 109 110 Released 2022-11-07 111 112 * OCaml >= 4.08 is required to build unison. 113 * unison can be built with (unreleased) OCaml 5. 114 * Change GUI to use GTK3 (via lablgtk3) instead of GTK2 (via lablgtk2) 115 * Add support for syncing extended attributes. 116 * Add support for syncing ACLs. 117 * On Windows, add the ability to build unison as a hybrid 118 application (GUI application attached to a text console) by 119 defining UI_WINOS=hybrid (see src/Makefile). Add this to CI. 120 (Doing this for non-Windows is unnecessary as all applications, 121 both GUI and non-GUI, are always executed with a connection to 122 stdout/stderr. GUI-only applications (ie, no stdout/stderr) is a 123 Windows-only concept.) 124 * Notable bugfixes 125 - Merge results are stored in archive more accurately. 126 - Windows `\\?\` paths now work correctly (including `\\?\Volume{GUID}\` paths). 127 * CI changes 128 - The macOS binaries are properly signed. 129 - Add workaround for bugs in the github CI Windows builds, one of 130 which resulted in the 2.52.1 GUI version failing, in the Windows 131 CI build artifacts. (This does not affect platforms other than 132 Windows, and may not affect other Windows builds.) 133 * Changes that should not affect behavior 134 - Clean up a variety of unmaintained and unused bits, mainly 135 build-related. 136 - OCaml's Unix library is now extensively used also on 137 Windows. This allowed removal of large amount of 138 Windows-specific OCaml and mainly C code. 139 140 ## Changes in 2.52.1 141 142 Released 2022-05-08 143 144 * Deprecate ocaml < 4.08: 2.53.0 will require 4.08 or higher 145 * Add man page 146 * Remove rsh:// URI scheme (ssh:// of course remains). 147 * Significant bugfixes and minor improvements 148 * Deprecate "backups" preference (see manual for alternatives) 149 * Deprecate "stream" and "halfduplex" preferences 150 151 ## Changes in 2.52.0 152 153 Released 2022-03-12 154 155 * Feature negotiation, compatible with 2.51. 156 * New archive format (independent of ocaml version, based on umarshal) 157 Upgrade is automatic. 158 * New wire protocol (independent of ocaml version, based on umarshal) 159 New protocol is used if both sides are >= 2.52.0. 160 * Compatibility with 2.48 161 * Support for unix-domain sockets 162 * Many bugfixes and minor improvements 163 * ocaml compatibility is now >= 4.01 164 * NEWS is now in NEWS.md and not in the manual 165 166 ## Changes in 2.51.5 167 168 Released 2021-12-18 169 170 * Restore OCaml compat to before 4.02 171 * dune/opam improvements/fixes 172 * Improve GTK UI by using GtkTreeView 173 * Add support for syncing symlinks on Windows (NTFS) 174 * Improve ssh support on Windows (hide Windows console in GUI mode) 175 * Many bugfixes and minor improvements 176 177 ## Changes in 2.51.4 178 179 Released 2021-06-24 180 181 * OCaml 4.12 support 182 * fsmonitor improvements and Solaris support 183 * Color support in text UI, with a new preference, disabled by 184 NO_COLOR. 185 * Interactive profile selection in text UI, enabled by a new 186 preference. 187 * Working files are stored in the unison directory (typically 188 /.unison) rather than $HOME. 189 * Build cleanups, CI improvements, housekeeping 190 * Many bugfixes and minor improvements 191 192 ## Changes in 2.51.3 193 194 Released 2020-10-21 195 196 * Some nontrivial changes to profile parsing (G.raud Meyer) 197 + '=' has been considered whitespace until now: several 198 following chars are considered as only one; trailing chars are 199 discarded; any non empty sequence of char is splitting. This 200 is non standard and leads to confusion, for example -ignore== 201 'Name .*=*' is valid when -ignore='Name .*=*' is not, and 202 worse -ignore='Name *=' is the same as -ignore='Name *'. The 203 parser now takes just a single '=' as delimiter after the 204 option name. Other = characters are considered as part of the 205 value being assigned to the option. 206 * Numerous improvements to the text user-interface (G.raud Meyer) 207 + New key-commands that restrict the display to a set of 208 "matching" items: ones that are offering to propagate changes 209 in a particular direction, conflicts, files to be merged, 210 etc., plus several more useful key-commands. Type "?" to 211 Unison to see all available commands. 212 213 ## Changes in 2.51.0 through 2.51.2 214 215 * Repository transplanted from SVN to Git and moved to GitHub () 216 (https://github.com/bcpierce00/unison). 217 * Add a new preference, 'atomic', for specifying directories that 218 should be treated atomically: if there are changes within such a 219 directory in both replicase, the whole directory is marked as a 220 conflict instead of propagating any of the changes. Thanks to 221 Julian Squires for submitting this patch! 222 * OSX / macOS 223 + Ported to 10.13, High Sierra, and Apple's new APFS (earlier 224 versions of Unison break because of new behavior of 225 AppleDouble files) 226 + Replaced Growl with OS X native notification center. 227 * Miscellaneous: 228 + The OCaml compiler version is now included in the "connection 229 header -- the string that's printed when connecting to a 230 remote server -- to facilitate debugging version mismatch 231 issues. 232 + Compatible with OCaml 4.06. 233 + Added a DockerFile for the convenience of Docker users. 234 + Many small bugfixes and UI improvements. 235 236 ## Changes in 2.48 237 238 * Incorporated a patch from Christopher Zimmermann to replace the 239 Uprintf module (which doesn't work with OCaml 4.02, causing Unison 240 to crash) with equivalent functionality from the standard library. 241 * Incorporated a refresh of the OSX GUI, contributed by Alan Shutko. 242 * Added a maxsizethreshold option, which prevents the transfer of 243 files larger than the size specified (in Kb). 244 * Added a "copyonconflict" preference, to make a copy of files that 245 would otherwise be overwritten or deleted in case of conflicting 246 changes. (This makes it possible to automatically resolve conflicts 247 in a fairly safe way when synchronizing continuously, in 248 combination with the "repeat = watch" and "prefer = newer" 249 preferences. 250 * File system monitoring: 251 + The file watcher now fails when unable to watch a directory, 252 rather than silently ignoring the issue. 253 + File system monitoring: more robust communication with the 254 helper program (in socket mode, the unison server will still 255 work properly despite unexpected unison client 256 disconnections). 257 + A bytecode version of unison-fsmonitor is now produced by 258 "make NATIVE=false" 259 + Improved search for unison-fsmonitor 260 + Detect when the helper process exits. 261 + More robust file watching helper programs for Windows and 262 Linux. They communicate with Unison through pipes (Unison 263 redirects stdin and stdout), using a race-free protocol. 264 + Retries paths with failures using an exponential backoff 265 algorithm. 266 + The information returned by the file watchers are used 267 independently for each replica; thus, when only one replica 268 has changes, Unison will only rescan this replica. 269 + When available, used by the graphical UIs to speed up 270 rescanning (can be disabled by setting the new watch 271 preference to 272 + Small fix to the way fsmonitor.py gets invoked when using the 273 file watching functionality, suggested by Josh Berdine. Unison 274 will now look for fsmonitor.py in the same directory where the 275 Unison executable itself lives. 276 * Minor: 277 + Fixed a bug in export procedure that was messing up 278 documentation strings. 279 + Incorporated a patch from Irányossy Knoblauch Artúr to make 280 temp file names fit within 143 characters (to make eCryptFS 281 happy). 282 + Added a string to the Conflict direction to document the 283 reason of the conflict. 284 + Log conflicts and problems in the text UI even if nothing is 285 propagated. 286 + Use hash function from OCaml 3.x for comparing archives, even 287 when compiled with OCaml 4.x. 288 + Do not restart Unison in case of uncaught exception when the 289 repeat preference is set. This seems safer. And it does not 290 work, for instance, in case of lost connection. 291 + Fix Unix.readlink invalid argument error under Windows 292 + Fix a crash when the output of the diff program is too large. 293 + Fixed Makefile for cross-compiling towards Windows (updated to 294 MinGW-w64) 295 296 ## Changes in very old versions 297 298 (Note that these are written 'Changes since' and thus the content 299 applies to the release after that.) 300 301 Changes since 2.40.63: 302 * New preference fastercheckUNSAFE, which can be used (with care!) to 303 achieve much faster update detection when all the common files in 304 the two replicas are known to be identical. See the manual for more 305 information. 306 This feature should still be considered experimental, but it's 307 ready for other people to try out. 308 * Added option clientHostName. If specified, it will be used to as 309 the client host name, overriding UNISONLOCALHOSTNAME and the actual 310 host name. 311 * OS X GUI: 312 + fix crash under Lion, because of problems with the toolbar, 313 using the fix suggested in 314 http://blitzbasic.com/Community/posts.php?topic=95778. 315 + uimacnew09 is now the standard graphical interface on OSX 316 + A small improvement to the uimacnew09 interface from Alan 317 Schmitt and Steve Kalkwarf: when Unison is run with the -batch 318 flag, the interface will now automatically propagate changes 319 and terminate, without waiting for user interaction. 320 + Show a modal warning window if there is no archive for the 321 hosts. The user can then choose to exit or proceed (proceed is 322 the default). The window is not shown if the batch preference 323 is true. 324 + file details panel selectable 325 * GTK GUI: 326 + New version of uigtk2.ml from Matt Zagrabelny that reorganizes 327 the icons in a slightly more intuitive way. 328 * Minor fixes: 329 + Setting the prefer preference to older or newer now propagates 330 deletions when there is no conflict. 331 + Correctly quote the path when running merge commands. 332 + Add quotes to paths when calling external file watcher 333 utility. 334 + Incorporate a patch to fsmonitor.py (the external filewatcher 335 utility) from Tomasz Zernicki to make it work better under 336 Windows. 337 + Incorporated new version of fsmonitor.py from Christophe Gohle 338 + Fixed incompatibility with OpenSSH 5.6. 339 + Fixed fingerprint cache: do not cache file properties 340 + Some spelling corrections in documentation and comments from 341 Stephane Glondu 342 + Fixed O_APPEND mode for open under Windows 343 + Fixed String.sub invalid argument error when an AppleDouble 344 file does not contain a finder information field 345 + Trim duplicate paths when using "-repeat watch" 346 + Unison now passes path arguments and -follow directives to 347 fsmonitor.py. This seems to work except for one small issue 348 with how fsmonitor.py treats -follow directives for 349 directories that don't exist (or maybe this is an issue with 350 how it treats any kind of monitoring when the thing being 351 monitored doesn't exist?). If we create a symlink to a 352 nonexistent directory, give Unison (hence fsmonitor.py) a 353 'follow' directive for the symlink, start unison, and then 354 create the directory, fsmonitor.py misses the change. 355 + Lines added in profile files by unison always start at a new 356 line 357 358 Changes since 2.40.1: 359 * Added "BelowPath" patterns, that match a path as well as all paths 360 below (convenient to use with nodeletion,update,creationpartial 361 preferences) 362 * Added a "fat" preference that makes Unison use the right options 363 when one of the replica is on a FAT filesystem. 364 * Allow "prefer/force=newer" even when not synchronizing modification 365 times. (The reconciler will not be aware of the modification time 366 of unchanged files, so the synchronization choices of Unison can be 367 different from when "times=true", but the behavior remains sane: 368 changed files with the most recent modification time will be 369 propagated.) 370 * Minor fixes and improvements: 371 + Compare filenames up to decomposition in case sensitive mode 372 when one host is running MacOSX and the unicode preference is 373 set to true. 374 + Rsync: somewhat faster compressor 375 + Make Unicode the default on all architectures (it was only the 376 default when a Mac OS X or Windows machine was involved). 377 378 Changes since 2.32: 379 * Major enhancement: Unicode support. 380 + Unison should now handle unicode filenames correctly on all 381 platforms. 382 + This functionality is controlled by a new preference unicode. 383 + Unicode mode is now the default when one of the hosts is under 384 Windows or MacOS. This may make upgrades a bit more painful 385 (the archives cannot be reused), but this is a much saner 386 default. 387 * Partial transfer of directories. If an error occurs while 388 transferring a directory, the part transferred so far is copied 389 into place (and the archives are updated accordingly). The 390 "maxerrors" preference controls how many transfer error Unison will 391 accept before stopping the transfer of a directory (by default, 392 only one). This makes it possible to transfer most of a directory 393 even if there are some errors. Currently, only the first error is 394 reported by the GUIs. 395 Also, allow partial transfer of a directory when there was an error 396 deep inside this directory during update detection. At the moment, 397 this is only activated with the text and GTK UIs, which have been 398 modified so that they show that the transfer is going to be partial 399 and so that they can display all errors. 400 * Improvement to the code for resuming directory transfers: 401 + if a file was not correctly transferred (or the source has 402 been modified since, with unchanged size), Unison performs a 403 new transfer rather than failing 404 + spurious files are deleted (this can happen if a file is 405 deleted on the source replica before resuming the transfer; 406 not deleting the file would result in it reappearing on the 407 target replica) 408 * Experimental streaming protocol for transferring file contents (can 409 be disabled by setting the directive "stream" to false): file 410 contents is transferred asynchronously (without waiting for a 411 response from the destination after each chunk sent) rather than 412 using the synchronous RPC mechanism. As a consequence: 413 + Unison now transfers the contents of a single file at a time 414 (Unison used to transfer several contents simultaneously in 415 order to hide the connection latency.) 416 + the transfer of large files uses the full available bandwidth 417 and is not slowed done due to the connection latency anymore 418 + we get performance improvement for small files as well by 419 scheduling many files simultaneously (as scheduling a file for 420 transfer consume little resource: it does not mean allocating 421 a large buffer anymore) 422 * Changes to the internal implementation of the rsync algorithm: 423 + use longer blocks for large files (the size of a block is the 424 square root of the size of the file for large files); 425 + transmit less checksum information per block (we still have 426 less than one chance in a hundred million of transferring a 427 file incorrectly, and Unison will catch any transfer error 428 when fingerprinting the whole file) 429 + avoid transfer overhead (which was 4 bytes per block) 430 For a 1G file, the first optimization saves a factor 50 on the 431 amount of data transferred from the target to the source (blocks 432 are 32768 bytes rather than just 700 bytes). The two other 433 optimizations save another factor of 2 (from 24 bytes per block 434 down to 10). 435 * Implemented an on-disk file fingerprint cache to speed-up update 436 detection after a crash: this way, Unison does not have do 437 recompute all the file fingerprints from scratch. 438 + When Unison detects that the archive case-sensitivity mode 439 does not match the current settings, it populates the 440 fingerprint cache using the archive contents. This way, 441 changing the case-sensitivity mode should be reasonably fast. 442 * New preferences "noupdate=root", "nodeletion=root", 443 "nocreation=root" that prevent Unison from performing files 444 updates, deletions or creations on the given root. Also 'partial' 445 versions of 'noupdate', 'nodeletion' and 'nocreation' 446 * Limit the number of simultaneous external copy program ("copymax" 447 preference) 448 * New "links" preference. When set to false, Unison will report an 449 error on symlinks during update detection. (This is the default 450 when one host is running Windows but not Cygwin.) This is better 451 than failing during propagation. 452 * Added a preference "halfduplex" to force half-duplex communication 453 with the server. This may be useful on unreliable links (as a more 454 efficient alternative to "maxthreads = 1"). 455 * Renamed preference "pretendwin" to "ignoreinodenumbers" (an alias 456 is kept for backwards compatibility). 457 * Ignore one-second differences when synchronizing modification time. 458 (Technically, this is an incompatible archive format change, but it 459 is backward compatible. To trigger a problem, a user would have to 460 synchronize modification times on a filesystem with a two-second 461 granularity and then downgrade to a previous version of Unison, 462 which does not work well in such a case. Thus, it does not seem 463 worthwhile to increment the archive format number, which would 464 impact all users.) 465 * Do not keep many files simultaneously opened anymore when the rsync 466 algorithm is in use. 467 * Add "ignorearchives" preference to ignore existing archives (to 468 avoid forcing users to delete them manually, in situations where 469 one archive has gotten deleted or corrupted). 470 * Mac OS 471 + fixed rsync bug which could result in an "index out of bounds" 472 error when transferring resource forks. 473 + Fixed bug which made Unison ignore finder information and 474 resource fork when compiled to 64bit on Mac OSX. 475 + should now be 64 bit clean (the Growl framework is not up to 476 date, though) 477 + Made the bridge between Objective C and Ocaml code GC friendly 478 (it was allocating ML values and putting them in an array 479 which was not registered with the GC) 480 + use darker grey arrows (patch contributed by Eric Y. Kow) 481 * GTK user interface 482 + assistant for creating profiles 483 + profile editor 484 + pop up a summary window when the replicas are not fully 485 synchronized after transport 486 + display estimated remaining time and transfer rate on the 487 progress bar 488 + allow simultaneous selection of several items 489 + Do not reload the preference file before a new update 490 detection if it is unchanged 491 + disabled scrolling to the first unfinished item during 492 transport. It goes way too fast when lot of small files are 493 synchronized, and it makes it impossible to browse the file 494 list during transport. 495 + take into account the "height" preference again 496 + the internal list of selected reconciler item was not always 497 in sync with what was displayed (GTK bug?); workaround 498 implemented 499 + Do not display "Looking for change" messages during 500 propagation (when checking the targe is unchanged) but only 501 during update detection 502 + Apply patch to fix some crashes in the OSX GUI, thanks to Onne 503 Gorter. 504 * Text UI 505 + During update detection, display status by updating a single 506 line rather than generating a new line of output every so 507 often. Should be less confusing. 508 * Windows 509 + Fastcheck is now the default under Windows. People mostly use 510 NTFS nowadays and the Unicode API provides an equivalent to 511 inode numbers for this filesystem. 512 + Only use long UNC path for accessing replicas (as '..' is not 513 handled with this format of paths, but can be useful) 514 + Windows text UI: now put the console into UTF-8 output mode. 515 This is the right thing to do when in Unicode mode, and is no 516 worse than what we had previously otherwise (the console use 517 some esoteric encoding by default). This only works when using 518 a Unicode font instead of the default raster font. 519 + Don't get the home directory from environment variable HOME 520 under Windows (except for Cygwin binaries): we don't want the 521 behavior of Unison to depends on whether it is run from a 522 Cygwin shell (where HOME is set) or in any other way (where 523 HOME is usually not set). 524 * Miscellaneous fixes and improvements 525 + Made a server waiting on a socket more resilient to unexpected 526 lost connections from the client. 527 + Small patch to property setting code suggested by Ulrich 528 Gernkow. 529 + Several fixes to the change transfer functions (both the 530 internal ones and external transfers using rsync). In 531 particular, limit the number of simultaneous transfer using an 532 rsync (as the rsync algorithm can use a large amount of memory 533 when processing huge files) 534 + Keep track of which file contents are being transferred, and 535 delay the transfer of a file when another file with the same 536 contents is currently being transferred. This way, the second 537 transfer can be skipped and replaced by a local copy. 538 + Experimental update detection optimization: do not read the 539 contents of unchanged directories 540 + When a file transfer fails, turn off fastcheck for this file 541 on the next sync. 542 + Fixed bug with case insensitive mode on a case sensitive 543 filesystem: 544 o if file "a/a" is created on one replica and directory "A" 545 is created on the other, the file failed to be 546 synchronized the first time Unison is run afterwards, as 547 Unison uses the wrong path "a/a" (if Unison is run again, 548 the directories are in the archive, so the right path is 549 used); 550 o if file "a" appears on one replica and file "A" appears 551 on the other with different contents, Unison was unable 552 to synchronize them. 553 + Improved error reporting when the destination is updated 554 during synchronization: Unison now tells which file has been 555 updated, and how. 556 + Limit the length of temporary file names 557 + Case sensitivity information put in the archive (in a backward 558 compatible way) and checked when the archive is loaded 559 + Got rid of the 16mb marshalling limit by marshalling to a 560 bigarray. 561 + Resume copy of partially transferred files. 562 563 Changes since 2.31: 564 * Small user interface changes 565 + Small change to text UI "scanning..." messages, to print just 566 directories (hopefully making it clearer that individual files 567 are not necessarily being fingerprinted). 568 * Minor fixes and improvements: 569 + Ignore one hour differences when deciding whether a file may 570 have been updated. This avoids slow update detection after 571 daylight saving time changes under Windows. This makes Unison 572 slightly more likely to miss an update, but it should be safe 573 enough. 574 + Fix a small bug that was affecting mainly windows users. We 575 need to commit the archives at the end of the sync even if 576 there are no updates to propagate because some files (in fact, 577 if we've just switched to DST on windows, a LOT of files) 578 might have new modtimes in the archive. (Changed the text UI 579 only. It's less clear where to change the GUI.) 580 + Don't delete the temp file when a transfer fails due to a 581 fingerprint mismatch (so that we can have a look and see why!) 582 We've also added more debugging code togive more informative 583 error messages when we encounter the dreaded and longstanding 584 "assert failed during file transfer" bug 585 + Incorrect paths ("path" directive) now result in an error 586 update item rather than a fatal error. 587 + Create parent directories (with correct permissions) during 588 transport for paths which point to non-existent locations in 589 the destination replica. 590 591 Changes since 2.27: 592 * If Unison is interrupted during a directory transfer, it will now 593 leave the partially transferred directory intact in a temporary 594 location. (This maintains the invariant that new files/directories 595 are transferred either completely or not at all.) The next time 596 Unison is run, it will continue filling in this temporary 597 directory, skipping transferring files that it finds are already 598 there. 599 * We've added experimental support for invoking an external file 600 transfer tool for whole-file copies instead of Unison's built-in 601 transfer protocol. Three new preferences have been added: 602 + copyprog is a string giving the name (and command-line 603 switches, if needed) of an external program that can be used 604 to copy large files efficiently. By default, rsync is invoked, 605 but other tools such as scp can be used instead by changing 606 the value of this preference. (Although this is not its 607 primary purpose, rsync is actually a pretty fast way of 608 copying files that don't already exist on the receiving host.) 609 For files that do already exist on (but that have been changed 610 in one replica), Unison will always use its built-in 611 implementation of the rsync algorithm. 612 + Added a "copyprogrest" preference, so that we can give 613 different command lines for invoking the external copy utility 614 depending on whether a partially transferred file already 615 exists or not. (Rsync doesn't seem to care about this, but 616 other utilities may.) 617 + copythreshold is an integer (-1 by default), indicating above 618 what filesize (in megabytes) Unison should use the external 619 copying utility specified by copyprog. Specifying 0 will cause 620 ALL copies to use the external program; a negative number will 621 prevent any files from using it. (Default is -1.) 622 Thanks to Alan Schmitt for a huge amount of hacking and to an 623 anonymous sponsor for suggesting and underwriting this extension. 624 * Small improvements: 625 + Added a new preference, dontchmod. By default, Unison uses the 626 chmod system call to set the permission bits of files after it 627 has copied them. But in some circumstances (and under some 628 operating systems), the chmod call always fails. Setting this 629 preference completely prevents Unison from ever calling chmod. 630 + Don't ignore files that look like backup files if the 631 backuplocation preference is set to central 632 + Shortened the names of several preferences. The old names are 633 also still supported, for backwards compatibility, but they do 634 not appear in the documentation. 635 + Lots of little documentation tidying. (In particular, 636 preferences are separated into Basic and Advanced! This should 637 hopefully make Unison a little more approachable for new 638 users. 639 + Unison can sometimes fail to transfer a file, giving the 640 unhelpful message "Destination updated during synchronization" 641 even though the file has not been changed. This can be caused 642 by programs that change either the file's contents or the 643 file's extended attributes without changing its modification 644 time. It's not clear what is the best fix for this - it is not 645 Unison's fault, but it makes Unison's behavior puzzling - but 646 at least Unison can be more helpful about suggesting a 647 workaround (running once with fastcheck set to false). The 648 failure message has been changed to give this advice. 649 + Further improvements to the OS X GUI (thanks to Alan Schmitt 650 and Craig Federighi). 651 * Very preliminary support for triggering Unison from an external 652 filesystem-watching utility. The current implementation is very 653 simple, not efficient, and almost completely untested--not ready 654 for real users. But if someone wants to help improve it (e.g., by 655 writing a filesystem watcher for your favorite OS), please make 656 yourself known! 657 On the Unison side, the new behavior is very simple: 658 + use the text UI 659 + start Unison with the command-line flag "-repeat FOO", where 660 FOO is name of a file where Unison should look for 661 notifications of changes 662 + when it starts up, Unison will read the whole contents of this 663 file (on both hosts), which should be a newline-separated list 664 of paths (relative to the root of the synchronization) and 665 synchronize just these paths, as if it had been started with 666 the "-path=xxx" option for each one of them 667 + when it finishes, it will sleep for a few seconds and then 668 examine the watchfile again; if anything has been added, it 669 will read the new paths, synchronize them, and go back to 670 sleep 671 + that's it! 672 To use this to drive Unison "incrementally," just start it in this 673 mode and start up a tool (on each host) to watch for new changes to 674 the filesystem and append the appropriate paths to the watchfile. 675 Hopefully such tools should not be too hard to write. 676 * Bug fixes: 677 + Fixed a bug that was causing new files to be created with 678 permissions 0x600 instead of using a reasonable default (like 679 0x644), if the 'perms' flag was set to 0. (Bug reported by Ben 680 Crowell.) 681 + Follow maxthreads preference when transferring directories. 682 683 Changes since 2.17: 684 * Major rewrite and cleanup of the whole Mac OS X graphical user 685 interface by Craig Federighi. Thanks, Craig!!! 686 * Small fix to ctime (non-)handling in update detection under windows 687 with fastcheck. 688 * Several small fixes to the GTK2 UI to make it work better under 689 Windows [thanks to Karl M for these]. 690 * The backup functionality has been completely rewritten. The 691 external interface has not changed, but numerous bugs, irregular 692 behaviors, and cross-platform inconsistencies have been corrected. 693 * The Unison project now accepts donations via PayPal. If you'd like 694 to donate, you can find a link to the donation page on the Unison 695 home page (http://www.cis.upenn.edu/ bcpierce/unison/lists.html). 696 * Some important safety improvements: 697 + Added a new mountpoint preference, which can be used to 698 specify a path that must exist in both replicas at the end of 699 update detection (otherwise Unison aborts). This can be used 700 to avoid potentially dangerous situations when Unison is used 701 with removable media such as external hard drives and compact 702 flash cards. 703 + The confirmation of "big deletes" is now controlled by a 704 boolean preference confirmbigdeletes. Default is true, which 705 gives the same behavior as previously. (This functionality is 706 at least partly superseded by the mountpoint preference, but 707 it has been left in place in case it is useful to some 708 people.) 709 + If Unison is asked to "follow" a symbolic link but there is 710 nothing at the other end of the link, it will now flag this 711 path as an error, rather than treating the symlink itself as 712 missing or deleted. This avoids a potentially dangerous 713 situation where a followed symlink points to an external 714 filesystem that might be offline when Unison is run (whereupon 715 Unison would cheerfully delete the corresponding files in the 716 other replica!). 717 * Smaller changes: 718 + Added forcepartial and preferpartial preferences, which behave 719 like force and prefer but can be specified on a per-path 720 basis. [Thanks to Alan Schmitt for this.] 721 + A bare-bones self test feature was added, which runs unison 722 through some of its paces and checks that the results are as 723 expected. The coverage of the tests is still very limited, but 724 the facility has already been very useful in debugging the new 725 backup functionality (especially in exposing some subtle 726 cross-platform issues). 727 + Refined debugging code so that the verbosity of individual 728 modules can be controlled separately. Instead of just putting 729 '-debug verbose' on the command line, you can put '-debug 730 update+', which causes all the extra messages in the Update 731 module, but not other modules, to be printed. Putting '-debug 732 verbose' causes all modules to print with maximum verbosity. 733 + Removed mergebatch preference. (It never seemed very useful, 734 and its semantics were confusing.) 735 + Rewrote some of the merging functionality, for better 736 cooperation with external Harmony instances. 737 + Changed the temp file prefix from .# to .unison. 738 + Compressed the output from the text user interface 739 (particularly when run with the -terse flag) to make it easier 740 to interpret the results when Unison is run several times in 741 succession from a script. 742 + Diff and merge functions now work under Windows. 743 + Changed the order of arguments to the default diff command (so 744 that the + and - annotations in diff's output are reversed). 745 + Added .mpp files to the "never fastcheck" list (like .xls 746 files). 747 * Many small bugfixes, including: 748 + Fixed a longstanding bug regarding fastcheck and daylight 749 saving time under Windows when Unison is set up to synchronize 750 modification times. (Modification times cannot be updated in 751 the archive in this case, so we have to ignore one hour 752 differences.) 753 + Fixed a bug that would occasionally cause the archives to be 754 left in non-identical states on the two hosts after 755 synchronization. 756 + Fixed a bug that prevented Unison from communicating correctly 757 between 32- and 64-bit architectures. 758 + On windows, file creation times are no longer used as a proxy 759 for inode numbers. (This is unfortunate, as it makes fastcheck 760 a little less safe. But it turns out that file creation times 761 are not reliable under Windows: if a file is removed and a new 762 file is created in its place, the new one will sometimes be 763 given the same creation date as the old one!) 764 + Set read-only file to R/W on OSX before attempting to change 765 other attributes. 766 + Fixed bug resulting in spurious "Aborted" errors during 767 transport (thanks to Jerome Vouillon) 768 + Enable diff if file contents have changed in one replica, but 769 only properties in the other. 770 + Removed misleading documentation for 'repeat' preference. 771 + Fixed a bug in merging code where Unison could sometimes 772 deadlock with the external merge program, if the latter 773 produced large amounts of output. 774 + Workaround for a bug compiling gtk2 user interface against 775 current versions of gtk2+ libraries. 776 + Added a better error message for "ambiguous paths". 777 + Squashed a longstanding bug that would cause file transfer to 778 fail with the message "Failed: Error in readWrite: Is a 779 directory." 780 + Replaced symlinks with copies of their targets in the Growl 781 framework in src/uimac. This should make the sources easier to 782 check out from the svn repository on WinXP systems. 783 + Added a workaround (suggested by Karl M.) for the problem 784 discussed on the unison users mailing list where, on the 785 Windows platform, the server would hang when transferring 786 files. I conjecture that the problem has to do with the RPC 787 mechanism, which was used to make a call back from the server 788 to the client (inside the Trace.log function) so that the log 789 message would be appended to the log file on the client. The 790 workaround is to dump these messages (about when xferbycopying 791 shortcuts are applied and whether they succeed) just to the 792 standard output of the Unison process, not to the log file. 793 794 Changes since 2.13.0: 795 * The features for performing backups and for invoking external merge 796 programs have been completely rewritten by Stephane Lescuyer 797 (thanks, Stephane!). The user-visible functionality should not 798 change, but the internals have been rationalized and there are a 799 number of new features. See the manual (in particular, the 800 description of the backupXXX preferences) for details. 801 * Incorporated patches for ipv6 support, contributed by Samuel 802 Thibault. (Note that, due to a bug in the released OCaml 3.08.3 803 compiler, this code will not actually work with ipv6 unless 804 compiled with the CVS version of the OCaml compiler, where the bug 805 has been fixed; however, ipv4 should continue to work normally.) 806 * OSX interface: 807 + Incorporated Ben Willmore's cool new icon for the Mac UI. 808 * Small fixes: 809 + Fixed off by one error in month numbers (in printed dates) 810 reported by Bob Burger 811 812 Changes since 2.12.0: 813 * New convention for release numbering: Releases will continue to be 814 given numbers of the form X.Y.Z, but, from now on, just the major 815 version number (X.Y) will be considered significant when checking 816 compatibility between client and server versions. The third 817 component of the version number will be used only to identify 818 "patch levels" of releases. 819 This change goes hand in hand with a change to the procedure for 820 making new releases. Candidate releases will initially be given 821 "beta release" status when they are announced for public 822 consumption. Any bugs that are discovered will be fixed in a 823 separate branch of the source repository (without changing the 824 major version number) and new tarballs re-released as needed. When 825 this process converges, the patched beta version will be dubbed 826 stable. 827 * Warning (failure in batch mode) when one path is completely 828 emptied. This prevents Unison from deleting everything on one 829 replica when the other disappear. 830 * Fix diff bug (where no difference is shown the first time the diff 831 command is given). 832 * User interface changes: 833 + Improved workaround for button focus problem (GTK2 UI) 834 + Put leading zeroes in date fields 835 + More robust handling of character encodings in GTK2 UI 836 + Changed format of modification time displays, from modified at 837 hh:mm:ss on dd MMM, yyyy to modified on yyyy-mm-dd hh:mm:ss 838 + Changed time display to include seconds (so that people on FAT 839 filesystems will not be confused when Unison tries to update a 840 file time to an odd number of seconds and the filesystem 841 truncates it to an even number!) 842 + Use the diff "-u" option by default when showing differences 843 between files (the output is more readable) 844 + In text mode, pipe the diff output to a pager if the 845 environment variable PAGER is set 846 + Bug fixes and cleanups in ssh password prompting. Now works 847 with the GTK2 UI under Linux. (Hopefully the Mac OS X one is 848 not broken!) 849 + Include profile name in the GTK2 window name 850 + Added bindings ',' (same as '<') and '.' (same as '>') in the 851 GTK2 UI 852 * Mac GUI: 853 + actions like < and > scroll to the next item as necessary. 854 + Restart has a menu item and keyboard shortcut (command-R). 855 + Added a command-line tool for Mac OS X. It can be installed 856 from the Unison menu. 857 + New icon. 858 + Handle the "help" command-line argument properly. 859 + Handle profiles given on the command line properly. 860 + When a profile has been selected, the profile dialog is 861 replaced by a "connecting" message while the connection is 862 being made. This gives better feedback. 863 + Size of left and right columns is now large enough so that 864 "PropsChanged" is not cut off. 865 * Minor changes: 866 + Disable multi-threading when both roots are local 867 + Improved error handling code. In particular, make sure all 868 files are closed in case of a transient failure 869 + Under Windows, use $UNISON for home directory as a last resort 870 (it was wrongly moved before $HOME and $USERPROFILE in Unison 871 2.12.0) 872 + Reopen the logfile if its name changes (profile change) 873 + Double-check that permissions and modification times have been 874 properly set: there are some combination of OS and filesystem 875 on which setting them can fail in a silent way. 876 + Check for bad Windows filenames for pure Windows 877 synchronization also (not just cross architecture 878 synchronization). This way, filenames containing backslashes, 879 which are not correctly handled by unison, are rejected right 880 away. 881 + Attempt to resolve issues with synchronizing modification 882 times of read-only files under Windows 883 + Ignore chmod failures when deleting files 884 + Ignore trailing dots in filenames in case insensitive mode 885 + Proper quoting of paths, files and extensions ignored using 886 the UI 887 + The strings CURRENT1 and CURRENT2 are now correctly substituted 888 when they occur in the diff preference 889 + Improvements to syncing resource forks between Macs via a 890 non-Mac system. 891 892 Changes since 2.10.2: 893 * INCOMPATIBLE CHANGE: Archive format has changed. 894 * Source code availability: The Unison sources are now managed using 895 Subversion. One nice side-effect is that anonymous checkout is now 896 possible, like this: 897 svn co https://cvs.cis.upenn.edu:3690/svnroot/unison/ 898 899 We will also continue to export a "developer tarball" of the 900 current (modulo one day) sources in the web export directory. To 901 receive commit logs for changes to the sources, subscribe to the 902 unison-hackers list (http://www.cis.upenn.edu/ 903 bcpierce/unison/lists.html). 904 * Text user interface: 905 + Substantial reworking of the internal logic of the text UI to 906 make it a bit easier to modify. 907 + The dumbtty flag in the text UI is automatically set to true 908 if the client is running on a Unix system and the EMACS 909 environment variable is set to anything other than the empty 910 string. 911 * Native OS X gui: 912 + Added a synchronize menu item with keyboard shortcut 913 + Added a merge menu item, still needs to be debugged 914 + Fixes to compile for Panther 915 + Miscellaneous improvements and bugfixes 916 * Small changes: 917 + Changed the filename checking code to apply to Windows only, 918 instead of OS X as well. 919 + Finder flags now synchronized 920 + Fallback in copy.ml for filesystem that do not support O_EXCL 921 + Changed buffer size for local file copy (was highly 922 inefficient with synchronous writes) 923 + Ignore chmod failure when deleting a directory 924 + Fixed assertion failure when resolving a conflict content 925 change / permission changes in favor of the content change. 926 + Workaround for transferring large files using rsync. 927 + Use buffered I/O for files (this is the only way to open files 928 in binary mode under Cygwin). 929 + On non-Cygwin Windows systems, the UNISON environment variable 930 is now checked first to determine where to look for Unison's 931 archive and preference files, followed by HOME and USERPROFILE 932 in that order. On Unix and Cygwin systems, HOME is used. 933 + Generalized diff preference so that it can be given either as 934 just the command name to be used for calculating diffs or else 935 a whole command line, containing the strings CURRENT1 and 936 CURRENT2, which will be replaced by the names of the files to 937 be diff'ed before the command is called. 938 + Recognize password prompts in some newer versions of ssh. 939 940 Changes since 2.9.20: 941 * INCOMPATIBLE CHANGE: Archive format has changed. 942 * Major functionality changes: 943 + Major tidying and enhancement of 'merge' functionality. The 944 main user-visible change is that the external merge program 945 may either write the merged output to a single new file, as 946 before, or it may modify one or both of its input files, or it 947 may write two new files. In the latter cases, its 948 modifications will be copied back into place on both the local 949 and the remote host, and (if the two files are now equal) the 950 archive will be updated appropriately. More information can be 951 found in the user manual. Thanks to Malo Denielou and Alan 952 Schmitt for these improvements. 953 Warning: the new merging functionality is not completely 954 compatible with old versions! Check the manual for details. 955 + Files larger than 2Gb are now supported. 956 + Added preliminary (and still somewhat experimental) support 957 for the Apple OS X operating system. 958 o Resource forks should be transferred correctly. (See the 959 manual for details of how this works when synchronizing 960 HFS with non-HFS volumes.) Synchronization of file type 961 and creator information is also supported. 962 o On OSX systems, the name of the directory for storing 963 Unison's archives, preference files, etc., is now 964 determined as follows: 965 # if ~/.unison exists, use it 966 # otherwise, use ~/Library/Application Support/Unison, 967 creating it if necessary. 968 o A preliminary native-Cocoa user interface is under 969 construction. This still needs some work, and some users 970 experience unpredictable crashes, so it is only for 971 hackers for now. Run make with UISTYLE=mac to build this 972 interface. 973 * Minor functionality changes: 974 + Added an ignorelocks preference, which forces Unison to 975 override left-over archive locks. (Setting this preference is 976 dangerous! Use it only if you are positive you know what you 977 are doing.) 978 + Added a new preference assumeContentsAreImmutable. If a 979 directory matches one of the patterns set in this preference, 980 then update detection is skipped for files in this directory. 981 (The purpose is to speed update detection for cases like Mail 982 folders, which contain lots and lots of immutable files.) Also 983 a preference assumeContentsAreImmutableNot, which overrides 984 the first, similarly to ignorenot. (Later amendment: these 985 preferences are now called immutable and immutablenot.) 986 + The ignorecase flag has been changed from a boolean to a 987 three-valued preference. The default setting, called default, 988 checks the operating systems running on the client and server 989 and ignores filename case if either of them is OSX or Windows. 990 Setting ignorecase to true or false overrides this behavior. 991 If you have been setting ignorecase on the command line using 992 -ignorecase=true or -ignorecase=false, you will need to change 993 to -ignorecase true or -ignorecase false. 994 + a new preference, 'repeat', for the text user interface 995 (only). If 'repeat' is set to a number, then, after it 996 finishes synchronizing, Unison will wait for that many seconds 997 and then start over, continuing this way until it is killed 998 from outside. Setting repeat to true will automatically set 999 the batch preference to true. 1000 + Excel files are now handled specially, so that the fastcheck 1001 optimization is skipped even if the fastcheck flag is set. 1002 (Excel does some naughty things with modtimes, making this 1003 optimization unreliable and leading to failures during change 1004 propagation.) 1005 + The ignorecase flag has been changed from a boolean to a 1006 three-valued preference. The default setting, called 1007 'default', checks the operating systems running on the client 1008 and server and ignores filename case if either of them is OSX 1009 or Windows. Setting ignorecase to 'true' or 'false' overrides 1010 this behavior. 1011 + Added a new preference, 'repeat', for the text user interface 1012 (only, at the moment). If 'repeat' is set to a number, then, 1013 after it finishes synchronizing, Unison will wait for that 1014 many seconds and then start over, continuing this way until it 1015 is killed from outside. Setting repeat to true will 1016 automatically set the batch preference to true. 1017 + The 'rshargs' preference has been split into 'rshargs' and 1018 'sshargs' (mainly to make the documentation clearer). In fact, 1019 'rshargs' is no longer mentioned in the documentation at all, 1020 since pretty much everybody uses ssh now anyway. 1021 * Documentation 1022 + The web pages have been completely redesigned and reorganized. 1023 (Thanks to Alan Schmitt for help with this.) 1024 * User interface improvements 1025 + Added a GTK2 user interface, capable (among other things) of 1026 displaying filenames in any locale encoding. Kudos to Stephen 1027 Tse for contributing this code! 1028 + The text UI now prints a list of failed and skipped transfers 1029 at the end of synchronization. 1030 + Restarting update detection from the graphical UI will reload 1031 the current profile (which in particular will reset the -path 1032 preference, in case it has been narrowed by using the "Recheck 1033 unsynchronized items" command). 1034 + Several small improvements to the text user interface, 1035 including a progress display. 1036 * Bug fixes (too numerous to count, actually, but here are some): 1037 + The maxthreads preference works now. 1038 + Fixed bug where warning message about uname returning an 1039 unrecognized result was preventing connection to server. (The 1040 warning is no longer printed, and all systems where 'uname' 1041 returns anything other than 'Darwin' are assumed not to be 1042 running OS X.) 1043 + Fixed a problem on OS X that caused some valid file names 1044 (e.g., those including colons) to be considered invalid. 1045 + Patched Path.followLink to follow links under cygwin in 1046 addition to Unix (suggested by Matt Swift). 1047 + Small change to the storeRootsName function, suggested by 1048 bliviero at ichips.intel.com, to fix a problem in unison with 1049 the `rootalias' option, which allows you to tell unison that 1050 two roots contain the same files. Rootalias was being applied 1051 after the hosts were sorted, so it wouldn't work properly in 1052 all cases. 1053 + Incorporated a fix by Dmitry Bely for setting utimes of 1054 read-only files on Win32 systems. 1055 * Installation / portability: 1056 + Unison now compiles with OCaml version 3.07 and later out of 1057 the box. 1058 + Makefile.OCaml fixed to compile out of the box under OpenBSD. 1059 + a few additional ports (e.g. OpenBSD, Zaurus/IPAQ) are now 1060 mentioned in the documentation 1061 + Unison can now be installed easily on OSX systems using the 1062 Fink package manager 1063 1064 Changes since 2.9.1: 1065 * Added a preference maxthreads that can be used to limit the number 1066 of simultaneous file transfers. 1067 * Added a backupdir preference, which controls where backup files are 1068 stored. 1069 * Basic support added for OSX. In particular, Unison now recognizes 1070 when one of the hosts being synchronized is running OSX and 1071 switches to a case-insensitive treatment of filenames (i.e., 'foo' 1072 and 'FOO' are considered to be the same file). (OSX is not yet 1073 fully working, however: in particular, files with resource forks 1074 will not be synchronized correctly.) 1075 * The same hash used to form the archive name is now also added to 1076 the names of the temp files created during file transfer. The 1077 reason for this is that, during update detection, we are going to 1078 silently delete any old temp files that we find along the way, and 1079 we want to prevent ourselves from deleting temp files belonging to 1080 other instances of Unison that may be running in parallel, e.g. 1081 synchronizing with a different host. Thanks to Ruslan Ermilov for 1082 this suggestion. 1083 * Several small user interface improvements 1084 * Documentation 1085 + FAQ and bug reporting instructions have been split out as 1086 separate HTML pages, accessible directly from the unison web 1087 page. 1088 + Additions to FAQ, in particular suggestions about performance 1089 tuning. 1090 * Makefile 1091 + Makefile.OCaml now sets UISTYLE=text or UISTYLE=gtk 1092 automatically, depending on whether it finds lablgtk installed 1093 + Unison should now compile "out of the box" under OSX 1094 1095 Changes since 2.8.1: 1096 * Changing profile works again under Windows 1097 * File movement optimization: Unison now tries to use local copy 1098 instead of transfer for moved or copied files. It is controlled by 1099 a boolean option "xferbycopying". 1100 * Network statistics window (transfer rate, amount of data 1101 transferred). [NB: not available in Windows-Cygwin version.] 1102 * symlinks work under the cygwin version (which is dynamically 1103 linked). 1104 * Fixed potential deadlock when synchronizing between Windows and 1105 Unix 1106 * Small improvements: 1107 + If neither the USERPROFILE nor the HOME environment variables 1108 are set, then Unison will put its temporary commit log (called 1109 DANGER.README) into the directory named by the UNISON 1110 environment variable, if any; otherwise it will use C:. 1111 + alternative set of values for fastcheck: yes = true; no = 1112 false; default = auto. 1113 + -silent implies -contactquietly 1114 * Source code: 1115 + Code reorganization and tidying. (Started breaking up some of 1116 the basic utility modules so that the non-unison-specific 1117 stuff can be made available for other projects.) 1118 + several Makefile and docs changes (for release); 1119 + further comments in "update.ml"; 1120 + connection information is not stored in global variables 1121 anymore. 1122 1123 Changes since 2.7.78: 1124 * Small bugfix to textual user interface under Unix (to avoid leaving 1125 the terminal in a bad state where it would not echo inputs after 1126 Unison exited). 1127 1128 Changes since 2.7.39: 1129 * Improvements to the main web page (stable and beta version docs are 1130 now both accessible). 1131 * User manual revised. 1132 * Added some new preferences: 1133 + "sshcmd" and "rshcmd" for specifying paths to ssh and rsh 1134 programs. 1135 + "contactquietly" for suppressing the "contacting server" 1136 message during Unison startup (under the graphical UI). 1137 * Bug fixes: 1138 + Fixed small bug in UI that neglected to change the displayed 1139 column headers if loading a new profile caused the roots to 1140 change. 1141 + Fixed a bug that would put the text UI into an infinite loop 1142 if it encountered a conflict when run in batch mode. 1143 + Added some code to try to fix the display of non-Ascii 1144 characters in filenames on Windows systems in the GTK UI. 1145 (This code is currently untested--if you're one of the people 1146 that had reported problems with display of non-ascii 1147 filenames, we'd appreciate knowing if this actually fixes 1148 things.) 1149 + `-prefer/-force newer' works properly now. (The bug was 1150 reported by Sebastian Urbaniak and Sean Fulton.) 1151 * User interface and Unison behavior: 1152 + Renamed `Proceed' to `Go' in the graphical UI. 1153 + Added exit status for the textual user interface. 1154 + Paths that are not synchronized because of conflicts or errors 1155 during update detection are now noted in the log file. 1156 + [END] messages in log now use a briefer format 1157 + Changed the text UI startup sequence so that ./unison -ui text 1158 will use the default profile instead of failing. 1159 + Made some improvements to the error messages. 1160 + Added some debugging messages to remote.ml. 1161 1162 Changes since 2.7.7: 1163 * Incorporated, once again, a multi-threaded transport sub-system. It 1164 transfers several files at the same time, thereby making much more 1165 effective use of available network bandwidth. Unlike the earlier 1166 attempt, this time we do not rely on the native thread library of 1167 OCaml. Instead, we implement a light-weight, non-preemptive 1168 multi-thread library in OCaml directly. This version appears 1169 stable. 1170 Some adjustments to unison are made to accommodate the 1171 multi-threaded version. These include, in particular, changes to 1172 the user interface and logging, for example: 1173 + Two log entries for each transferring task, one for the 1174 beginning, one for the end. 1175 + Suppressed warning messages against removing temp files left 1176 by a previous unison run, because warning does not work nicely 1177 under multi-threading. The temp file names are made less 1178 likely to coincide with the name of a file created by the 1179 user. They take the form 1180 .#<filename>.<serial>.unison.tmp. [N.b. This was later changed 1181 to .unison.<filename>.<serial>.unison.tmp.] 1182 * Added a new command to the GTK user interface: pressing 'f' causes 1183 Unison to start a new update detection phase, using as paths just 1184 those paths that have been detected as changed and not yet marked 1185 as successfully completed. Use this command to quickly restart 1186 Unison on just the set of paths still needing attention after a 1187 previous run. 1188 * Made the ignorecase preference user-visible, and changed the 1189 initialization code so that it can be manually set to true, even if 1190 neither host is running Windows. (This may be useful, e.g., when 1191 using Unison running on a Unix system with a FAT volume mounted.) 1192 * Small improvements and bug fixes: 1193 + Errors in preference files now generate fatal errors rather 1194 than warnings at startup time. (I.e., you can't go on from 1195 them.) Also, we fixed a bug that was preventing these warnings 1196 from appearing in the text UI, so some users who have been 1197 running (unsuspectingly) with garbage in their prefs files may 1198 now get error reports. 1199 + Error reporting for preference files now provides file name 1200 and line number. 1201 + More intelligible message in the case of identical change to 1202 the same files: "Nothing to do: replicas have been changed 1203 only in identical ways since last sync." 1204 + Files with prefix '.#' excluded when scanning for preference 1205 files. 1206 + Rsync instructions are send directly instead of first 1207 marshaled. 1208 + Won't try forever to get the fingerprint of a continuously 1209 changing file: unison will give up after certain number of 1210 retries. 1211 + Other bug fixes, including the one reported by Peter Selinger 1212 (force=older preference not working). 1213 * Compilation: 1214 + Upgraded to the new OCaml 3.04 compiler, with the LablGtk 1215 1.2.3 library (patched version used for compiling under 1216 Windows). 1217 + Added the option to compile unison on the Windows platform 1218 with Cygwin GNU C compiler. This option only supports building 1219 dynamically linked unison executables. 1220 1221 Changes since 2.7.4: 1222 * Fixed a silly (but debilitating) bug in the client startup 1223 sequence. 1224 1225 Changes since 2.7.1: 1226 * Added addprefsto preference, which (when set) controls which 1227 preference file new preferences (e.g. new ignore patterns) are 1228 added to. 1229 * Bug fix: read the initial connection header one byte at a time, so 1230 that we don't block if the header is shorter than expected. (This 1231 bug did not affect normal operation -- it just made it hard to tell 1232 when you were trying to use Unison incorrectly with an old version 1233 of the server, since it would hang instead of giving an error 1234 message.) 1235 1236 Changes since 2.6.59: 1237 * Changed fastcheck from a boolean to a string preference. Its legal 1238 values are yes (for a fast check), no (for a safe check), or 1239 default (for a fast check--which also happens to be safe--when 1240 running on Unix and a safe check when on Windows). The default is 1241 default. 1242 * Several preferences have been renamed for consistency. All 1243 preference names are now spelled out in lowercase. For backward 1244 compatibility, the old names still work, but they are not mentioned 1245 in the manual any more. 1246 * The temp files created by the 'diff' and 'merge' commands are now 1247 named by prepending a new prefix to the file name, rather than 1248 appending a suffix. This should avoid confusing diff/merge programs 1249 that depend on the suffix to guess the type of the file contents. 1250 * We now set the keepalive option on the server socket, to make sure 1251 that the server times out if the communication link is unexpectedly 1252 broken. 1253 * Bug fixes: 1254 + When updating small files, Unison now closes the destination 1255 file. 1256 + File permissions are properly updated when the file is behind 1257 a followed link. 1258 + Several other small fixes. 1259 1260 Changes since 2.6.38: 1261 * Major Windows performance improvement! 1262 We've added a preference fastcheck that makes Unison look only at a 1263 file's creation time and last-modified time to check whether it has 1264 changed. This should result in a huge speedup when checking for 1265 updates in large replicas. 1266 When this switch is set, Unison will use file creation times as 1267 'pseudo inode numbers' when scanning Windows replicas for updates, 1268 instead of reading the full contents of every file. This may cause 1269 Unison to miss propagating an update if the create time, 1270 modification time, and length of the file are all unchanged by the 1271 update (this is not easy to achieve, but it can be done). However, 1272 Unison will never overwrite such an update with a change from the 1273 other replica, since it always does a safe check for updates just 1274 before propagating a change. Thus, it is reasonable to use this 1275 switch most of the time and occasionally run Unison once with 1276 fastcheck set to false, if you are worried that Unison may have 1277 overlooked an update. 1278 Warning: This change is has not yet been thoroughly field-tested. 1279 If you set the fastcheck preference, pay careful attention to what 1280 Unison is doing. 1281 * New functionality: centralized backups and merging 1282 + This version incorporates two pieces of major new 1283 functionality, implemented by Sylvain Roy during a summer 1284 internship at Penn: a centralized backup facility that keeps a 1285 full backup of (selected files in) each replica, and a merging 1286 feature that allows Unison to invoke an external file-merging 1287 tool to resolve conflicting changes to individual files. 1288 + Centralized backups: 1289 o Unison now maintains full backups of the 1290 last-synchronized versions of (some of) the files in each 1291 replica; these function both as backups in the usual 1292 sense and as the "common version" when invoking external 1293 merge programs. 1294 o The backed up files are stored in a directory 1295 /.unison/backup on each host. (The name of this directory 1296 can be changed by setting the environment variable 1297 UNISONBACKUPDIR.) 1298 o The predicate backup controls which files are actually 1299 backed up: giving the preference 'backup = Path *' causes 1300 backing up of all files. 1301 o Files are added to the backup directory whenever unison 1302 updates its archive. This means that 1303 # When unison reconstructs its archive from scratch 1304 (e.g., because of an upgrade, or because the archive 1305 files have been manually deleted), all files will be 1306 backed up. 1307 # Otherwise, each file will be backed up the first 1308 time unison propagates an update for it. 1309 o The preference backupversions controls how many previous 1310 versions of each file are kept. The default is 2 (i.e., 1311 the last synchronized version plus one backup). 1312 o For backward compatibility, the backups preference is 1313 also still supported, but backup is now preferred. 1314 o It is OK to manually delete files from the backup 1315 directory (or to throw away the directory itself). Before 1316 unison uses any of these files for anything important, it 1317 checks that its fingerprint matches the one that it 1318 expects. 1319 + Merging: 1320 o Both user interfaces offer a new 'merge' command, invoked 1321 by pressing 'm' (with a changed file selected). 1322 o The actual merging is performed by an external program. 1323 The preferences merge and merge2 control how this program 1324 is invoked. If a backup exists for this file (see the 1325 backup preference), then the merge preference is used for 1326 this purpose; otherwise merge2 is used. In both cases, 1327 the value of the preference should be a string 1328 representing the command that should be passed to a shell 1329 to invoke the merge program. Within this string, the 1330 special substrings CURRENT1, CURRENT2, NEW, and OLD may 1331 appear at any point. Unison will substitute these as 1332 follows before invoking the command: 1333 # CURRENT1 is replaced by the name of the local copy 1334 of the file; 1335 # CURRENT2 is replaced by the name of a temporary 1336 file, into which the contents of the remote copy of 1337 the file have been transferred by Unison prior to 1338 performing the merge; 1339 # NEW is replaced by the name of a temporary file that 1340 Unison expects to be written by the merge program 1341 when it finishes, giving the desired new contents of 1342 the file; and 1343 # OLD is replaced by the name of the backed up copy of 1344 the original version of the file (i.e., its state at 1345 the end of the last successful run of Unison), if 1346 one exists (applies only to merge, not merge2). 1347 For example, on Unix systems setting the merge preference 1348 to 1349 merge = diff3 -m CURRENT1 OLD CURRENT2 > NEW 1350 1351 will tell Unison to use the external diff3 program for 1352 merging. 1353 A large number of external merging programs are 1354 available. For example, emacs users may find the 1355 following convenient: 1356 merge2 = emacs -q --eval '(ediff-merge-files "CURRENT1" "CURRENT2" 1357 nil "NEW")' 1358 merge = emacs -q --eval '(ediff-merge-files-with-ancestor 1359 "CURRENT1" "CURRENT2" "OLD" nil "NEW")' 1360 1361 (These commands are displayed here on two lines to avoid 1362 running off the edge of the page. In your preference 1363 file, each should be written on a single line.) 1364 o If the external program exits without leaving any file at 1365 the path NEW, Unison considers the merge to have failed. 1366 If the merge program writes a file called NEW but exits 1367 with a non-zero status code, then Unison considers the 1368 merge to have succeeded but to have generated conflicts. 1369 In this case, it attempts to invoke an external editor so 1370 that the user can resolve the conflicts. The value of the 1371 editor preference controls what editor is invoked by 1372 Unison. The default is emacs. 1373 o Please send us suggestions for other useful values of the 1374 merge2 and merge preferences - we'd like to give several 1375 examples in the manual. 1376 * Smaller changes: 1377 + When one preference file includes another, unison no longer 1378 adds the suffix '.prf' to the included file by default. If a 1379 file with precisely the given name exists in the .unison 1380 directory, it will be used; otherwise Unison will add .prf, as 1381 it did before. (This change means that included preference 1382 files can be named blah.include instead of blah.prf, so that 1383 unison will not offer them in its 'choose a preference file' 1384 dialog.) 1385 + For Linux systems, we now offer both a statically linked and a 1386 dynamically linked executable. The static one is larger, but 1387 will probably run on more systems, since it doesn't depend on 1388 the same versions of dynamically linked library modules being 1389 available. 1390 + Fixed the force and prefer preferences, which were getting the 1391 propagation direction exactly backwards. 1392 + Fixed a bug in the startup code that would cause unison to 1393 crash when the default profile (~/.unison/default.prf) does 1394 not exist. 1395 + Fixed a bug where, on the run when a profile is first created, 1396 Unison would confusingly display the roots in reverse order in 1397 the user interface. 1398 * For developers: 1399 + We've added a module dependency diagram to the source 1400 distribution, in src/DEPENDENCIES.ps, to help new prospective 1401 developers with navigating the code. 1402 1403 Changes since 2.6.11: 1404 * INCOMPATIBLE CHANGE: Archive format has changed. 1405 * INCOMPATIBLE CHANGE: The startup sequence has been completely 1406 rewritten and greatly simplified. The main user-visible change is 1407 that the defaultpath preference has been removed. Its effect can be 1408 approximated by using multiple profiles, with include directives to 1409 incorporate common settings. All uses of defaultpath in existing 1410 profiles should be changed to path. 1411 Another change in startup behavior that will affect some users is 1412 that it is no longer possible to specify roots both in the profile 1413 and on the command line. 1414 You can achieve a similar effect, though, by breaking your profile 1415 into two: 1416 default.prf = 1417 root = blah 1418 root = foo 1419 include common 1420 1421 common.prf = 1422 <everything else> 1423 1424 Now do 1425 unison common root1 root2 1426 1427 when you want to specify roots explicitly. 1428 * The -prefer and -force options have been extended to allow users to 1429 specify that files with more recent modtimes should be propagated, 1430 writing either -prefer newer or -force newer. (For symmetry, Unison 1431 will also accept -prefer older or -force older.) The -force 1432 older/newer options can only be used when -times is also set. 1433 The graphical user interface provides access to these facilities on 1434 a one-off basis via the Actions menu. 1435 * Names of roots can now be "aliased" to allow replicas to be 1436 relocated without changing the name of the archive file where 1437 Unison stores information between runs. (This feature is for 1438 experts only. See the "Archive Files" section of the manual for 1439 more information.) 1440 * Graphical user-interface: 1441 + A new command is provided in the Synchronization menu for 1442 switching to a new profile without restarting Unison from 1443 scratch. 1444 + The GUI also supports one-key shortcuts for commonly used 1445 profiles. If a profile contains a preference of the form 'key 1446 = n', where n is a single digit, then pressing this key will 1447 cause Unison to immediately switch to this profile and begin 1448 synchronization again from scratch. (Any actions that may have 1449 been selected for a set of changes currently being displayed 1450 will be discarded.) 1451 + Each profile may include a preference 'label = <string>' 1452 giving a descriptive string that described the options 1453 selected in this profile. The string is listed along with the 1454 profile name in the profile selection dialog, and displayed in 1455 the top-right corner of the main Unison window. 1456 * Minor: 1457 + Fixed a bug that would sometimes cause the 'diff' display to 1458 order the files backwards relative to the main user interface. 1459 (Thanks to Pascal Brisset for this fix.) 1460 + On Unix systems, the graphical version of Unison will check 1461 the DISPLAY variable and, if it is not set, automatically fall 1462 back to the textual user interface. 1463 + Synchronization paths (path preferences) are now matched 1464 against the ignore preferences. So if a path is both specified 1465 in a path preference and ignored, it will be skipped. 1466 + Numerous other bugfixes and small improvements. 1467 1468 Changes since 2.6.1: 1469 * The synchronization of modification times has been disabled for 1470 directories. 1471 * Preference files may now include lines of the form include <name>, 1472 which will cause name.prf to be read at that point. 1473 * The synchronization of permission between Windows and Unix now 1474 works properly. 1475 * A binding CYGWIN=binmode in now added to the environment so that 1476 the Cygwin port of OpenSSH works properly in a non-Cygwin context. 1477 * The servercmd and addversionno preferences can now be used 1478 together: -addversionno appends an appropriate -NNN to the server 1479 command, which is found by using the value of the -servercmd 1480 preference if there is one, or else just unison. 1481 * Both '-pref=val' and '-pref val' are now allowed for boolean 1482 values. (The former can be used to set a preference to false.) 1483 * Lot of small bugs fixed. 1484 1485 Changes since 2.5.31: 1486 * The log preference is now set to true by default, since the log 1487 file seems useful for most users. 1488 * Several miscellaneous bugfixes (most involving symlinks). 1489 1490 Changes since 2.5.25: 1491 * INCOMPATIBLE CHANGE: Archive format has changed (again). 1492 * Several significant bugs introduced in 2.5.25 have been fixed. 1493 1494 Changes since 2.5.1: 1495 * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you 1496 synchronize your replicas before upgrading, to avoid spurious 1497 conflicts. The first sync after upgrading will be slow. 1498 * New functionality: 1499 + Unison now synchronizes file modtimes, user-ids, and 1500 group-ids. 1501 These new features are controlled by a set of new preferences, 1502 all of which are currently false by default. 1503 o When the times preference is set to true, file 1504 modification times are propaged. (Because the 1505 representations of time may not have the same granularity 1506 on both replicas, Unison may not always be able to make 1507 the modtimes precisely equal, but it will get them as 1508 close as the operating systems involved allow.) 1509 o When the owner preference is set to true, file ownership 1510 information is synchronized. 1511 o When the group preference is set to true, group 1512 information is synchronized. 1513 o When the numericIds preference is set to true, owner and 1514 group information is synchronized numerically. By 1515 default, owner and group numbers are converted to names 1516 on each replica and these names are synchronized. (The 1517 special user id 0 and the special group 0 are never 1518 mapped via user/group names even if this preference is 1519 not set.) 1520 + Added an integer-valued preference perms that can be used to 1521 control the propagation of permission bits. The value of this 1522 preference is a mask indicating which permission bits should 1523 be synchronized. It is set by default to 0o1777: all bits but 1524 the set-uid and set-gid bits are synchronised (synchronizing 1525 these latter bits can be a security hazard). If you want to 1526 synchronize all bits, you can set the value of this preference 1527 to -1. 1528 + Added a log preference (default false), which makes Unison 1529 keep a complete record of the changes it makes to the 1530 replicas. By default, this record is written to a file called 1531 unison.log in the user's home directory (the value of the HOME 1532 environment variable). If you want it someplace else, set the 1533 logfile preference to the full pathname you want Unison to 1534 use. 1535 + Added an ignorenot preference that maintains a set of patterns 1536 for paths that should definitely not be ignored, whether or 1537 not they match an ignore pattern. (That is, a path will now be 1538 ignored iff it matches an ignore pattern and does not match 1539 any ignorenot patterns.) 1540 * User-interface improvements: 1541 + Roots are now displayed in the user interface in the same 1542 order as they were given on the command line or in the 1543 preferences file. 1544 + When the batch preference is set, the graphical user interface 1545 no longer waits for user confirmation when it displays a 1546 warning message: it simply pops up an advisory window with a 1547 Dismiss button at the bottom and keeps on going. 1548 + Added a new preference for controlling how many status 1549 messages are printed during update detection: statusdepth 1550 controls the maximum depth for paths on the local machine 1551 (longer paths are not displayed, nor are non-directory paths). 1552 The value should be an integer; default is 1. 1553 + Removed the trace and silent preferences. They did not seem 1554 very useful, and there were too many preferences for 1555 controlling output in various ways. 1556 + The text UI now displays just the default command (the one 1557 that will be used if the user just types <return>) instead of 1558 all available commands. Typing ? will print the full list of 1559 possibilities. 1560 + The function that finds the canonical hostname of the local 1561 host (which is used, for example, in calculating the name of 1562 the archive file used to remember which files have been 1563 synchronized) normally uses the gethostname operating system 1564 call. However, if the environment variable UNISONLOCALHOSTNAME 1565 is set, its value will now be used instead. This makes it 1566 easier to use Unison in situations where a machine's name 1567 changes frequently (e.g., because it is a laptop and gets 1568 moved around a lot). 1569 + File owner and group are now displayed in the "detail window" 1570 at the bottom of the screen, when unison is configured to 1571 synchronize them. 1572 * For hackers: 1573 + Updated to Jacques Garrigue's new version of lablgtk, which 1574 means we can throw away our local patched version. 1575 If you're compiling the GTK version of unison from sources, 1576 you'll need to update your copy of lablgtk to the developers 1577 release. (Warning: installing lablgtk under Windows is 1578 currently a bit challenging.) 1579 + The TODO.txt file (in the source distribution) has been 1580 cleaned up and reorganized. The list of pending tasks should 1581 be much easier to make sense of, for people that may want to 1582 contribute their programming energies. There is also a 1583 separate file BUGS.txt for open bugs. 1584 + The Tk user interface has been removed (it was not being 1585 maintained and no longer compiles). 1586 + The debug preference now prints quite a bit of additional 1587 information that should be useful for identifying sources of 1588 problems. 1589 + The version number of the remote server is now checked right 1590 away during the connection setup handshake, rather than later. 1591 (Somebody sent a bug report of a server crash that turned out 1592 to come from using inconsistent versions: better to check this 1593 earlier and in a way that can't crash either client or 1594 server.) 1595 + Unison now runs correctly on 64-bit architectures (e.g. Alpha 1596 linux). We will not be distributing binaries for these 1597 architectures ourselves (at least for a while) but if someone 1598 would like to make them available, we'll be glad to provide a 1599 link to them. 1600 * Bug fixes: 1601 + Pattern matching (e.g. for ignore) is now case-insensitive 1602 when Unison is in case-insensitive mode (i.e., when one of the 1603 replicas is on a windows machine). 1604 + Some people had trouble with mysterious failures during 1605 propagation of updates, where files would be falsely reported 1606 as having changed during synchronization. This should be 1607 fixed. 1608 + Numerous smaller fixes. 1609 1610 Changes since 2.4.1: 1611 * Added a number of 'sorting modes' for the user interface. By 1612 default, conflicting changes are displayed at the top, and the rest 1613 of the entries are sorted in alphabetical order. This behavior can 1614 be changed in the following ways: 1615 + Setting the sortnewfirst preference to true causes newly 1616 created files to be displayed before changed files. 1617 + Setting sortbysize causes files to be displayed in increasing 1618 order of size. 1619 + Giving the preference sortfirst=<pattern> (where <pattern> is 1620 a path descriptor in the same format as 'ignore' and 'follow' 1621 patterns, causes paths matching this pattern to be displayed 1622 first. 1623 + Similarly, giving the preference sortlast=<pattern> causes 1624 paths matching this pattern to be displayed last. 1625 The sorting preferences are described in more detail in the user 1626 manual. The sortnewfirst and sortbysize flags can also be accessed 1627 from the 'Sort' menu in the graphical user interface. 1628 * Added two new preferences that can be used to change unison's 1629 fundamental behavior to make it more like a mirroring tool instead 1630 of a synchronizer. 1631 + Giving the preference prefer with argument <root> (by adding 1632 -prefer <root> to the command line or prefer=<root>) to your 1633 profile) means that, if there is a conflict, the contents of 1634 <root> should be propagated to the other replica (with no 1635 questions asked). Non-conflicting changes are treated as 1636 usual. 1637 + Giving the preference force with argument <root> will make 1638 unison resolve all differences in favor of the given root, 1639 even if it was the other replica that was changed. 1640 These options should be used with care! (More information is 1641 available in the manual.) 1642 * Small changes: 1643 + Changed default answer to 'Yes' in all two-button dialogs in 1644 the graphical interface (this seems more intuitive). 1645 + The rsync preference has been removed (it was used to activate 1646 rsync compression for file transfers, but rsync compression is 1647 now enabled by default). 1648 + In the text user interface, the arrows indicating which 1649 direction changes are being propagated are printed differently 1650 when the user has overridden Unison's default recommendation 1651 (====> instead of ---->). This matches the behavior of the 1652 graphical interface, which displays such arrows in a different 1653 color. 1654 + Carriage returns (Control-M's) are ignored at the ends of 1655 lines in profiles, for Windows compatibility. 1656 + All preferences are now fully documented in the user manual. 1657 1658 Changes since 2.3.12: 1659 * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you 1660 synchronize your replicas before upgrading, to avoid spurious 1661 conflicts. The first sync after upgrading will be slow. 1662 * New/improved functionality: 1663 + A new preference -sortbysize controls the order in which 1664 changes are displayed to the user: when it is set to true, the 1665 smallest changed files are displayed first. (The default 1666 setting is false.) 1667 + A new preference -sortnewfirst causes newly created files to 1668 be listed before other updates in the user interface. 1669 + We now allow the ssh protocol to specify a port. 1670 + Incompatible change: The unison: protocol is deprecated, and 1671 we added file: and socket:. You may have to modify your 1672 profiles in the .unison directory. If a replica is specified 1673 without an explicit protocol, we now assume it refers to a 1674 file. (Previously "//saul/foo" meant to use SSH to connect to 1675 saul, then access the foo directory. Now it means to access 1676 saul via a remote file mechanism such as samba; the old effect 1677 is now achieved by writing ssh://saul/foo.) 1678 + Changed the startup sequence for the case where roots are 1679 given but no profile is given on the command line. The new 1680 behavior is to use the default profile (creating it if it does 1681 not exist), and temporarily override its roots. The manual 1682 claimed that this case would work by reading no profile at 1683 all, but AFAIK this was never true. 1684 + In all user interfaces, files with conflicts are always listed 1685 first 1686 + A new preference 'sshversion' can be used to control which 1687 version of ssh should be used to connect to the server. Legal 1688 values are 1 and 2. (Default is empty, which will make unison 1689 use whatever version of ssh is installed as the default 'ssh' 1690 command.) 1691 + The situation when the permissions of a file was updated the 1692 same on both side is now handled correctly (we used to report 1693 a spurious conflict) 1694 * Improvements for the Windows version: 1695 + The fact that filenames are treated case-insensitively under 1696 Windows should now be handled correctly. The exact behavior is 1697 described in the cross-platform section of the manual. 1698 + It should be possible to synchronize with Windows shares, 1699 e.g., //host/drive/path. 1700 + Workarounds to the bug in syncing root directories in Windows. 1701 The most difficult thing to fix is an ocaml bug: Unix.opendir 1702 fails on c: in some versions of Windows. 1703 * Improvements to the GTK user interface (the Tk interface is no 1704 longer being maintained): 1705 + The UI now displays actions differently (in blue) when they 1706 have been explicitly changed by the user from Unison's default 1707 recommendation. 1708 + More colorful appearance. 1709 + The initial profile selection window works better. 1710 + If any transfers failed, a message to this effect is displayed 1711 along with 'Synchronization complete' at the end of the 1712 transfer phase (in case they may have scrolled off the top). 1713 + Added a global progress meter, displaying the percentage of 1714 total bytes that have been transferred so far. 1715 * Improvements to the text user interface: 1716 + The file details will be displayed automatically when a 1717 conflict is been detected. 1718 + when a warning is generated (e.g. for a temporary file left 1719 over from a previous run of unison) Unison will no longer wait 1720 for a response if it is running in -batch mode. 1721 + The UI now displays a short list of possible inputs each time 1722 it waits for user interaction. 1723 + The UI now quits immediately (rather than looping back and 1724 starting the interaction again) if the user presses 'q' when 1725 asked whether to propagate changes. 1726 + Pressing 'g' in the text user interface will proceed 1727 immediately with propagating updates, without asking any more 1728 questions. 1729 * Documentation and installation changes: 1730 + The manual now includes a FAQ, plus sections on common 1731 problems and on tricks contributed by users. 1732 + Both the download page and the download directory explicitly 1733 say what are the current stable and beta-test version numbers. 1734 + The OCaml sources for the up-to-the-minute developers' version 1735 (not guaranteed to be stable, or even to compile, at any given 1736 time!) are now available from the download page. 1737 + Added a subsection to the manual describing cross-platform 1738 issues (case conflicts, illegal filenames) 1739 * Many small bug fixes and random improvements. 1740 1741 Changes since 2.3.1: 1742 * Several bug fixes. The most important is a bug in the rsync module 1743 that would occasionally cause change propagation to fail with a 1744 'rename' error. 1745 1746 Changes since 2.2: 1747 * The multi-threaded transport system is now disabled by default. (It 1748 is not stable enough yet.) 1749 * Various bug fixes. 1750 * A new experimental feature: 1751 The final component of a -path argument may now be the wildcard 1752 specifier *. When Unison sees such a path, it expands this path on 1753 the client into into the corresponding list of paths by listing the 1754 contents of that directory. 1755 Note that if you use wildcard paths from the command line, you will 1756 probably need to use quotes or a backslash to prevent the * from 1757 being interpreted by your shell. 1758 If both roots are local, the contents of the first one will be used 1759 for expanding wildcard paths. (Nb: this is the first one after the 1760 canonization step - i.e., the one that is listed first in the user 1761 interface - not the one listed first on the command line or in the 1762 preferences file.) 1763 1764 Changes since 2.1: 1765 * The transport subsystem now includes an implementation by Sylvain 1766 Gommier and Norman Ramsey of Tridgell and Mackerras's rsync 1767 protocol. This protocol achieves much faster transfers when only a 1768 small part of a large file has been changed by sending just diffs. 1769 This feature is mainly helpful for transfers over slow links--on 1770 fast local area networks it can actually degrade performance--so we 1771 have left it off by default. Start unison with the -rsync option 1772 (or put rsync=true in your preferences file) to turn it on. 1773 * "Progress bars" are now displayed during remote file transfers, 1774 showing what percentage of each file has been transferred so far. 1775 * The version numbering scheme has changed. New releases will now be 1776 have numbers like 2.2.30, where the second component is incremented 1777 on every significant public release and the third component is the 1778 "patch level." 1779 * Miscellaneous improvements to the GTK-based user interface. 1780 * The manual is now available in PDF format. 1781 * We are experimenting with using a multi-threaded transport 1782 subsystem to transfer several files at the same time, making much 1783 more effective use of available network bandwidth. This feature is 1784 not completely stable yet, so by default it is disabled in the 1785 release version of Unison. 1786 If you want to play with the multi-threaded version, you'll need to 1787 recompile Unison from sources (as described in the documentation), 1788 setting the THREADS flag in Makefile.OCaml to true. Make sure that 1789 your OCaml compiler has been installed with the -with-pthreads 1790 configuration option. (You can verify this by checking whether the 1791 file threads/threads.cma in the OCaml standard library directory 1792 contains the string -lpthread near the end.) 1793 1794 Changes since 1.292: 1795 * Reduced memory footprint (this is especially important during the 1796 first run of unison, where it has to gather information about all 1797 the files in both repositories). 1798 * Fixed a bug that would cause the socket server under NT to fail 1799 after the client exits. 1800 * Added a SHIFT modifier to the Ignore menu shortcut keys in GTK 1801 interface (to avoid hitting them accidentally). 1802 1803 Changes since 1.231: 1804 * Tunneling over ssh is now supported in the Windows version. See the 1805 installation section of the manual for detailed instructions. 1806 * The transport subsystem now includes an implementation of the rsync 1807 protocol, built by Sylvain Gommier and Norman Ramsey. This protocol 1808 achieves much faster transfers when only a small part of a large 1809 file has been changed by sending just diffs. The rsync feature is 1810 off by default in the current version. Use the -rsync switch to 1811 turn it on. (Nb. We still have a lot of tuning to do: you may not 1812 notice much speedup yet.) 1813 * We're experimenting with a multi-threaded transport subsystem, 1814 written by Jerome Vouillon. The downloadable binaries are still 1815 single-threaded: if you want to try the multi-threaded version, 1816 you'll need to recompile from sources. (Say make THREADS=true.) 1817 Native thread support from the compiler is required. Use the option 1818 -threads N to select the maximal number of concurrent threads 1819 (default is 5). Multi-threaded and single-threaded clients/servers 1820 can interoperate. 1821 * A new GTK-based user interface is now available, thanks to Jacques 1822 Garrigue. The Tk user interface still works, but we'll be shifting 1823 development effort to the GTK interface from now on. 1824 * OCaml 3.00 is now required for compiling Unison from sources. The 1825 modules uitk and myfileselect have been changed to use labltk 1826 instead of camltk. To compile the Tk interface in Windows, you must 1827 have ocaml-3.00 and tk8.3. When installing tk8.3, put it in c:\Tcl 1828 rather than the suggested c:\Program Files\Tcl, and be sure to 1829 install the headers and libraries (which are not installed by 1830 default). 1831 * Added a new -addversionno switch, which causes unison to use 1832 unison-<currentversionnumber> instead of just unison as the remote 1833 server command. This allows multiple versions of unison to coexist 1834 conveniently on the same server: whichever version is run on the 1835 client, the same version will be selected on the server. 1836 1837 Changes since 1.219: 1838 * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you 1839 synchronize your replicas before upgrading, to avoid spurious 1840 conflicts. The first sync after upgrading will be slow. 1841 * This version fixes several annoying bugs, including: 1842 + Some cases where propagation of file permissions was not 1843 working. 1844 + umask is now ignored when creating directories 1845 + directories are create writable, so that a read-only directory 1846 and its contents can be propagated. 1847 + Handling of warnings generated by the server. 1848 + Synchronizing a path whose parent is not a directory on both 1849 sides is now flagged as erroneous. 1850 + Fixed some bugs related to symnbolic links and nonexistent 1851 roots. 1852 o When a change (deletion or new contents) is propagated 1853 onto a 'follow'ed symlink, the file pointed to by the 1854 link is now changed. (We used to change the link itself, 1855 which doesn't fit our assertion that 'follow' means the 1856 link is completely invisible) 1857 o When one root did not exist, propagating the other root 1858 on top of it used to fail, because unison could not 1859 calculate the working directory into which to write 1860 changes. This should be fixed. 1861 * A human-readable timestamp has been added to Unison's archive 1862 files. 1863 * The semantics of Path and Name regular expressions now correspond 1864 better. 1865 * Some minor improvements to the text UI (e.g. a command for going 1866 back to previous items) 1867 * The organization of the export directory has changed -- should be 1868 easier to find / download things now. 1869 1870 Changes since 1.200: 1871 * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you 1872 synchronize your replicas before upgrading, to avoid spurious 1873 conflicts. The first sync after upgrading will be slow. 1874 * This version has not been tested extensively on Windows. 1875 * Major internal changes designed to make unison safer to run at the 1876 same time as the replicas are being changed by the user. 1877 * Internal performance improvements. 1878 1879 Changes since 1.190: 1880 * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you 1881 synchronize your replicas before upgrading, to avoid spurious 1882 conflicts. The first sync after upgrading will be slow. 1883 * A number of internal functions have been changed to reduce the 1884 amount of memory allocation, especially during the first 1885 synchronization. This should help power users with very big 1886 replicas. 1887 * Reimplementation of low-level remote procedure call stuff, in 1888 preparation for adding rsync-like smart file transfer in a later 1889 release. 1890 * Miscellaneous bug fixes. 1891 1892 Changes since 1.180: 1893 * INCOMPATIBLE CHANGE: Archive format has changed. Make sure you 1894 synchronize your replicas before upgrading, to avoid spurious 1895 conflicts. The first sync after upgrading will be slow. 1896 * Fixed some small bugs in the interpretation of ignore patterns. 1897 * Fixed some problems that were preventing the Windows version from 1898 working correctly when click-started. 1899 * Fixes to treatment of file permissions under Windows, which were 1900 causing spurious reports of different permissions when 1901 synchronizing between windows and unix systems. 1902 * Fixed one more non-tail-recursive list processing function, which 1903 was causing stack overflows when synchronizing very large replicas. 1904 1905 Changes since 1.169: 1906 * The text user interface now provides commands for ignoring files. 1907 * We found and fixed some more non-tail-recursive list processing 1908 functions. Some power users have reported success with very large 1909 replicas. 1910 * INCOMPATIBLE CHANGE: Files ending in .tmp are no longer ignored 1911 automatically. If you want to ignore such files, put an appropriate 1912 ignore pattern in your profile. 1913 * INCOMPATIBLE CHANGE: The syntax of ignore and follow patterns has 1914 changed. Instead of putting a line of the form 1915 ignore = <regexp> 1916 1917 in your profile (.unison/default.prf), you should put: 1918 ignore = Regex <regexp> 1919 1920 Moreover, two other styles of pattern are also recognized: 1921 ignore = Name <name> 1922 1923 matches any path in which one component matches <name>, while 1924 ignore = Path <path> 1925 1926 matches exactly the path <path>. 1927 Standard "globbing" conventions can be used in <name> and <path>: 1928 + a ? matches any single character except / 1929 + a * matches any sequence of characters not including / 1930 + [xyz] matches any character from the set {x, y, z } 1931 + {a,bb,ccc} matches any one of a, bb, or ccc. 1932 See the user manual for some examples. 1933 1934 Changes since 1.146: 1935 * Some users were reporting stack overflows when synchronizing huge 1936 directories. We found and fixed some non-tail-recursive list 1937 processing functions, which we hope will solve the problem. Please 1938 give it a try and let us know. 1939 * Major additions to the documentation. 1940 1941 Changes since 1.142: 1942 * Major internal tidying and many small bugfixes. 1943 * Major additions to the user manual. 1944 * Unison can now be started with no arguments - it will prompt 1945 automatically for the name of a profile file containing the roots 1946 to be synchronized. This makes it possible to start the graphical 1947 UI from a desktop icon. 1948 * Fixed a small bug where the text UI on NT was raising a 'no such 1949 signal' exception. 1950 1951 Changes since 1.139: 1952 * The precompiled windows binary in the last release was compiled 1953 with an old OCaml compiler, causing propagation of permissions not 1954 to work (and perhaps leading to some other strange behaviors we've 1955 heard reports about). This has been corrected. If you're using 1956 precompiled binaries on Windows, please upgrade. 1957 * Added a -debug command line flag, which controls debugging of 1958 various modules. Say -debug XXX to enable debug tracing for module 1959 XXX, or -debug all to turn on absolutely everything. 1960 * Fixed a small bug where the text UI on NT was raising a 'no such 1961 signal' exception. 1962 1963 Changes since 1.111: 1964 * INCOMPATIBLE CHANGE: The names and formats of the preference files 1965 in the .unison directory have changed. In particular: 1966 + the file "prefs" should be renamed to default.prf 1967 + the contents of the file "ignore" should be merged into 1968 default.prf. Each line of the form REGEXP in ignore should 1969 become a line of the form ignore = REGEXP in default.prf. 1970 * Unison now handles permission bits and symbolic links. See the 1971 manual for details. 1972 * You can now have different preference files in your .unison 1973 directory. If you start unison like this 1974 unison profilename 1975 1976 (i.e. with just one "anonymous" command-line argument), then the 1977 file ~/.unison/profilename.prf will be loaded instead of 1978 default.prf. 1979 * Some improvements to terminal handling in the text user interface 1980 * Added a switch -killServer that terminates the remote server 1981 process when the unison client is shutting down, even when using 1982 sockets for communication. (By default, a remote server created 1983 using ssh/rsh is terminated automatically, while a socket server is 1984 left running.) 1985 * When started in 'socket server' mode, unison prints 'server 1986 started' on stderr when it is ready to accept connections. (This 1987 may be useful for scripts that want to tell when a socket-mode 1988 server has finished initialization.) 1989 * We now make a nightly mirror of our current internal development 1990 tree, in case anyone wants an up-to-the-minute version to hack 1991 around with. 1992 * Added a file CONTRIB with some suggestions for how to help us make 1993 Unison better.