[PATCH 1 of 1] doc: add "icasefs" additional help topic for case insensitive filesystem

FUJIWARA Katsunori foozy at lares.dti.ne.jp
Mon Apr 16 09:02:16 CDT 2012


# HG changeset patch
# User FUJIWARA Katsunori <foozy at lares.dti.ne.jp>
# Date 1334584599 -32400
# Node ID 4e738ea05ee07701fdc90afcc641753fc5076eac
# Parent  9b26d541e972428a21d44837650932b2f2f5aeb0
doc: add "icasefs" additional help topic for case insensitive filesystem

diff -r 9b26d541e972 -r 4e738ea05ee0 contrib/wix/help.wxs
--- a/contrib/wix/help.wxs	Sat Apr 14 01:39:35 2012 -0500
+++ b/contrib/wix/help.wxs	Mon Apr 16 22:56:39 2012 +0900
@@ -17,6 +17,7 @@
           <File Name="glossary.txt" />
           <File Name="hgignore.txt" />
           <File Name="hgweb.txt" />
+          <File Name="icasefs.txt" />
           <File Name="merge-tools.txt" />
           <File Name="multirevs.txt" />
           <File Name="patterns.txt" />
diff -r 9b26d541e972 -r 4e738ea05ee0 mercurial/help.py
--- a/mercurial/help.py	Sat Apr 14 01:39:35 2012 -0500
+++ b/mercurial/help.py	Mon Apr 16 22:56:39 2012 +0900
@@ -74,6 +74,8 @@
    (["hgignore", "ignore"], _("syntax for Mercurial ignore files"),
     loaddoc('hgignore')),
    (["phases"], _("Working with Phases"), loaddoc('phases')),
+   (["icasefs"], _("Working on case insensitive filesystm"),
+    loaddoc('icasefs')),
 ])
 
 # Map topics to lists of callable taking the current topic help and
diff -r 9b26d541e972 -r 4e738ea05ee0 mercurial/help/icasefs.txt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/help/icasefs.txt	Mon Apr 16 22:56:39 2012 +0900
@@ -0,0 +1,141 @@
+If you work on case insensitive filesystem (e.g.: NTFS on Windows,
+HFS+ on Mac OS, and so on), you should know some know-how or
+workaround on it.
+
+Warning for case-folding collision
+----------------------------------
+
+You may see warning for case-folding collision at :hg:`add`.
+
+In this case, collision occurs in files which you want to add, or
+between them and ones already existing in parent revision.
+
+It is just warning, so specified files are added. But you must not add
+such files, if you want to cooperate with members who (should) work on
+case insensitive filesystem.
+
+.. note::
+   Please also see ``portablefilenames`` in ``ui`` section of :hg:`help
+   config` for detail
+
+Abort for case-folding collision
+--------------------------------
+
+Abort updating to another version
+"""""""""""""""""""""""""""""""""
+
+:hg:`update` is aborted for case-folding collision, if target
+revision has files colliding each other.
+
+.. note::
+   If you want(or have) to browse or repair such revisions on case
+   insensitive filesystem, please see ``Updating manually`` section.
+
+Perhaps, your updating may be also aborted, even though the target
+revision has no files colliding each other.
+
+In this case, :hg:`update` is aborted, because files in target
+revision and working directory are considered as a cause of
+case-folding collision in linear update merge, even though you don't
+want to do linear update merging.
+
+Please see ``Updating with --check or --clean`` section in this case.
+
+Abort merging with another revision
+"""""""""""""""""""""""""""""""""""
+
+:hg:`merge` may be aborted for case-folding collision.
+
+If you can ``update --clean`` to each target revisions, files in each
+revisions should collide each other.
+
+Only if one of files colliding each other is renamed from the other,
+Mercurial allows merging them into one of them: merging is not aborted
+in this case.
+
+Otherwise, you should rename one of them or both to avoid case-folding
+collision before merging.
+
+Please see ``Renaming colliding files`` section in this case.
+
+
+Workaround
+----------
+
+Updating with --check or --clean
+""""""""""""""""""""""""""""""""
+
+Please use ``--check`` or ``--clean`` options to update working
+directory simply.
+
+These options avoid collision check between target revision and
+current working context, so you can update to specified revision, if
+it has no files colliding each other.
+
+Renaming colliding files
+""""""""""""""""""""""""
+
+On case insensitive filesystem, updating to revisions which have files
+colliding each other is aborted in normal way, even with ``--check``
+or ``--clean``.
+
+To repair such revisions, you should rename colliding files to another
+on case sensitive filesystem, and commit them to create new collision
+safe revision.
+
+.. note::
+   If you want(or have) to browse or repair such revisions on case
+   insensitive filesystem, please see ``Updating manually`` section.
+
+If :hg:`merge` is aborted, but :hg:`update --check` to each
+revisions successes, collision occurs between revision to be merged.
+
+In this case, files in one of them or both should be renamed to avoid
+collision before merging.
+
+With recent Mercurial, you can change case of filename safely in steps
+below, even on case insensitive filesystem::
+
+    $ hg rename a tmp
+    $ hg rename tmp A
+
+Updating manually
+"""""""""""""""""
+
+You can update working directory to the revision which has files
+colliding each other by bypassing consistency check of Mercurial.
+
+If you want to clone the repository which has such revisions, clone
+with ``-U`` to avoid the initial checkout::
+
+    $ hg clone -U REPOURL
+
+Or, if such revisions already exist in your repository, update working
+directory by ``null`` revision at first::
+
+    $ hg update null
+
+Next, use :hg:`revert` to retrieve all the files except the colliding
+files from a `TARGET` revision::
+
+    $ hg revert -a -r TARGET -X BADFILEPAT
+
+``BADFILEPAT`` is used to avoid retrieve colliding files, so two ore
+more patterns may be required, if there are many collisions.
+
+Next, set the parent of the working copy to ``TARGET`` manually::
+
+    $ hg debugrebuildstate -r TARGET
+
+Now, Mercurial should be in a state where the ``TARGET`` revisions is
+checked out except the colliding files.
+
+For example, it is assumed that two files named as ``badfile`` and
+``BADFILE`` exist in ``TARGET`` revision, and you want to rename
+``BADFILE`` to ``ANOTHERFILE`` to avoid collision::
+
+    $ hg cat -r TARGET -o ANOTHERFILE
+    $ hg rename --after BADFILE ANOTHERFILE
+
+Then, you can create the collision safe revision by committing above
+renaming.
diff -r 9b26d541e972 -r 4e738ea05ee0 tests/test-globalopts.t
--- a/tests/test-globalopts.t	Sat Apr 14 01:39:35 2012 -0500
+++ b/tests/test-globalopts.t	Mon Apr 16 22:56:39 2012 +0900
@@ -344,6 +344,7 @@
    glossary      Glossary
    hgignore      syntax for Mercurial ignore files
    hgweb         Configuring hgweb
+   icasefs       Working on case insensitive filesystm
    merge-tools   Merge Tools
    multirevs     Specifying Multiple Revisions
    patterns      File Name Patterns
@@ -428,6 +429,7 @@
    glossary      Glossary
    hgignore      syntax for Mercurial ignore files
    hgweb         Configuring hgweb
+   icasefs       Working on case insensitive filesystm
    merge-tools   Merge Tools
    multirevs     Specifying Multiple Revisions
    patterns      File Name Patterns
diff -r 9b26d541e972 -r 4e738ea05ee0 tests/test-help.t
--- a/tests/test-help.t	Sat Apr 14 01:39:35 2012 -0500
+++ b/tests/test-help.t	Mon Apr 16 22:56:39 2012 +0900
@@ -116,6 +116,7 @@
    glossary      Glossary
    hgignore      syntax for Mercurial ignore files
    hgweb         Configuring hgweb
+   icasefs       Working on case insensitive filesystm
    merge-tools   Merge Tools
    multirevs     Specifying Multiple Revisions
    patterns      File Name Patterns
@@ -194,6 +195,7 @@
    glossary      Glossary
    hgignore      syntax for Mercurial ignore files
    hgweb         Configuring hgweb
+   icasefs       Working on case insensitive filesystm
    merge-tools   Merge Tools
    multirevs     Specifying Multiple Revisions
    patterns      File Name Patterns
@@ -690,6 +692,7 @@
    glossary      Glossary
    hgignore      syntax for Mercurial ignore files
    hgweb         Configuring hgweb
+   icasefs       Working on case insensitive filesystm
    merge-tools   Merge Tools
    multirevs     Specifying Multiple Revisions
    patterns      File Name Patterns


More information about the Mercurial-devel mailing list