Search code examples
windowsmercurialnon-alphanumeric

creating mercurial repo in directory whose name has dollar signs


I am trying to create a mercurial repository in a directory whose name includes dollar signs. This is an equivalent and simplified example of what i get on windows 10 cmd.exe with mercurial 4.1.3 :

C:\test\dir1>hg init

C:\test\dir1>hg status

C:\test\dir1>cd ../dir$$1

C:\test\dir$$1>hg init

C:\test\dir$$1>hg status 
abort: repository C:\test\dir$$1 not found!

so i hope this is clear, the only difference seems to be the dollar signs in the second directory name. thanks in advance!


Solution

  • Mercurial seems to treat dollar signs as an environment variable escape:

    C:\test>set X=abc
    
    C:\test>echo $X          # Not the shell expanding it, that would be %X%.
    $X
    
    C:\test>hg init $X
    
    C:\test>dir
     Volume in drive C has no label.
     Volume Serial Number is CE8B-D448
    
     Directory of C:\test
    
    11/10/2017  09:27 PM    <DIR>          .
    11/10/2017  09:27 PM    <DIR>          ..
    11/10/2017  09:27 PM    <DIR>          abc
                   0 File(s)              0 bytes
                   3 Dir(s)  53,899,231,232 bytes free
    

    Mercurial has expanded $X as an environment variable. Also:

    C:\test>hg init dir$$x
    
    C:\test>dir
     Volume in drive C has no label.
     Volume Serial Number is CE8B-D448
    
     Directory of C:\test
    
    11/10/2017  09:30 PM    <DIR>          .
    11/10/2017  09:30 PM    <DIR>          ..
    11/10/2017  09:30 PM    <DIR>          dir$x
                   0 File(s)              0 bytes
                   3 Dir(s)  53,899,091,968 bytes free
    

    Two dollar signs insert one dollar sign. When you are in a directory named dir$$x, Mercurial is using dir$x for the name. I found a workaround with hg -R. status, but better to avoid dollar signs.