'''หมายเหตุ:''' คุณอาจจะอยากใช้แพคเกจพร้อมใช้งานสำหรับวินโดวส์ที่ BinaryPackages มากกว่า! ในการติดตั้ง Mercurial จากซอร์สโค้ดในวินโดวส์ คุณจะต้องมี * โปรแกรม Python interpreter (เช่นจาก [[http://www.python.org|python.org]], หรือ [[http://www.activestate.com/Products/ActivePython/|ActivePython]]) * โปรแกรม C compiler (คุณต้องคอมไพล์ extensions บางตัวที่ถูกใช้โดย Mercurial, คุณต้องใช้เฉพาะเพื่อคอมไพล์เท่านั้น ไม่จำเป็นสำหรับการใช้งาน Mercurial) * แน่นอน ต้องมีซอร์สโค้ดของ Mercurial * โปรแกรมการรวมการแก้ไขแบบสามทาง (a three-way [[MergeProgram|merge program]]) ถ้าคุณใช้ไพธอนจาก [[http://www.python.org|python.org]] คุณสามารถทำให้คำสั่ง {{{clone}}} ของ Mercurial เร็วขึ้นได้มากถ้าคุณติดตั้ง [[http://sourceforge.net/project/showfiles.php?group_id=78018&package_id=79063|win32 API extensions]] ด้วย (แต่ลองดูหมายเหตุเพิ่มเติมด้านล่างเกี่ยวกับ hardlinks ในวินโดวส์นะ) ถ้าคุณใช้ไพธอน 2.4 คุณจะต้องมี [[http://starship.python.net/crew/mhammond/win32/Downloads.html|mfc71.dll]] ด้วย (extensions เหล่านี้เป็นส่วนนึงของ [[http://www.activestate.com/Products/ActivePython/|ActivePython]] อยู่แล้วแต่ว่าโปรแกรม Active``Python ไม่ใช่โปรแกรมแบบโอเพนซอร์สทั้งหมด) ลองดู [[BuildingWindowsInstaller]] สำหรับขั้นตอนในการสร้างตัวติดตั้งของ Mercurial หน้า [[BuildingOnWindows]] ก็มีคำแนะนำเพิ่มเติมในการ build Mercurial ในวินโดวส์ ------- หน้านี้อธิบายปัญหาที่คุณอาจเจอระหว่างการติดตั้ง Mercurial และวิธีแก้ปัญหาเหล่านี้ การติดตั้งแบบง่ายที่สุดก็คือคุณแค่่ต้องใช้คำสั่ง {{{ python setup.py install --force }}} ในไดเร็คทอรี่ที่คุณเก็บซอร์สโค้ด แล้วทุกอย่างก็จะ"ทำงานได้" ตัวเลือก {{{-f/--force}}} เป็นการทำให้แน่ใจว่าโปรแกรมที่เคยติดตั้งไว้แล้วจะถูกแทนที่ด้วยโปรแกรมเวอร์ชั่นใหม่ [[สารบัญ]] == คำแนะนำในการ build == === MingW32 === ==== การ build โดยใช้ MingW32 ==== โดยปกติไพฑอนและ Active``Python จะหาโปรแกรม Microsoft Visual C เพื่อคอมไพล์ extensions ต่างๆ เพราะฉะนั้นคุณจะต้องบอก {{{setup.py}}} ให้ใช้ compiler ของ Ming``W32 แทน ซึ่งคุณสามารถทำได้โดยพิมพ์ {{{ python setup.py build --force -c mingw32 python setup.py install --force --skip-build }}} หรือแบบย่อ: {{{ python setup.py build -f -c mingw32 install -f }}} ถ้าคุณไม่ค่อยคุ้นกับ mingw32 ก่อนอื่นคุณต้องดาวน์โหลดและติดตั้งแพคเกจเหล่านี้ซะก่อน ตามลำดับดังนี้: {{{ msys.exe msysDTK.exe }}} หลังจากนั้นให้ดาวน์โหลดและติดตั้งแพคเกจดังนี้ในไดเร็คทอรี่ที่คุณติดตั้งแพคเกจ msys (เช่น {{{c:\msys\1.0\}}}) {{{ MinGW.exe }}} คุณสามารถดาวน์โหลดโปรแกรมนี้ได้ที่ http://www.mingw.org จากนั้นให้เพิ่มไดเร็คทอรี่ของไพธอนและ mingw ไว้ในตัวแปร PATH และพิมพ์คำสั่งสำหรับ build ในคอมมานด์พร๊อมต์: {{{ set PATH=%PATH%;c:\python24;c:\msys\1.0\mingw\bin }}} ถ้าคุณพบข้อผิดพลาดในการคอมไพล์ใน Mercurial เวอร์ชั่น 0.9.2 ขึ้นไป คุณอาจจะต้องใช้ libpython24.a ใน PYTHONPATH\libs ในกรณีนี้คุณต้อง: {{{ pexports C:\WINDOWS\system32\python24.dll > python24.def dlltool --dllname C:\WINDOWS\system32\python24.dll --def python24.def --output-lib C:\Python24\libs\libpython24.a }}} จากนั้นสคริปต์ setup.py จะทำงานได้ตามปกติ ==== วิธี build แบบง่ายกว่าด้วย MingW32 ผ่าน Cygwin ==== คุณสามารถติดตั้ง MinGW32 ได้ง่ายกว่าผ่าน Cygwin เพราะว่ามันมีตัวติดตั้งแบบกราฟฟิค หลังจากติดตั้งโดยใช้โปรแกรม ({{{setup.exe}}}) ให้เพิ่มไดเร็คทอรี่ bin ของ cygwin เข้าไปใน path และทำตามขั้นตอนการ build สำหรับ mingw32 จากด้านบน เช่น {{{ set PATH=%PATH%;c:\python24;c:\cygwin\bin python setup.py build --force -c mingw32 python setup.py install --force --skip-build }}} === MS Visual Studio === ==== การ build โดยใช้ MSVC ==== ถ้าคุณจะใช้ MS Visual C เพื่อ build คุณจะต้องติดตั้งเวอร์ชั่นไพธอนท่เหมาะสมหรือใช้ Active``Python: * Active``Python 2.4.1 ต้องการ VC7.1 * Active``Python 2.3.5 ต้องการ VC6 * (TODO: expand that list) คุณสามารถ ''บังคับ'' ให้ไพธอนใช้คอมไพเลอร์ที่คุณมีอยู่แล้วถึงแม้ว่ามันจะไม่ตรงกันกับที่ได้ระบุไว้ก็ตาม คุณจะต้องใช้ shell ที่มีการตั้งค่าตัวแปรต่างๆพร้อมสำหรับการคอมไพล์แล้ว จากนั้นจึงบอก distutils ว่ามันจะต้องเชื่อถือคอมไพเลอร์ที่อยู่ใน path: {{{ set DISTUTILS_USE_SDK=1 set MSSdk=1 }}} (ดูเอกสาร [[http://docs.python.org/dist/module-distutils.msvccompiler.html|distutils msvc]]) ถ้าคุณไม่ทำตามตัวอย่างข้างบนและรันคำสั่ง `python setup.py build` คุณอาจจะเจอข้อผิดพลาดแบบนี้: {{{ ... AttributeError: MSVCCompiler instance has no attribute '_MSVCCompiler__root' }}} ปัญหาอื่นๆ: ถ้าคุณใช้ไพธอน 2.6 ลองดูบั๊ก at http://bugs.python.org/issue3741 เราสามารถใช้วิธีนี้เพื่อ build Mercurial สำหรับ Active``Python 2.4.2 และ Active``Python 2.5.1 บนแพลทฟอร์ม x86 และกับไพธอนจาก python.org เวอร์ชั่น 2.5 และ 2.6 บนแพลทฟอร์ม amd64 ด้วย Visual Studio 2005 (VC++ 8) แต่ก่อนก็มีคนสามารถ build Mercurial โดยใช้ Platform SDK compiler (ของ Microsoft Platform SDK สำหรับ Windows Server 2003 R2) อีกวิธีนึงสำหรับหลีกเลี่ยงปัญหาเรื่องเวอร์ชั่นคือเปลี่ยนค่าที่บอกว่าไพธอนของคุณถูก build ด้วยคอมไพเลอร์เวอร์ชั่นไหนเป็นเวอร์ชั่นที่ตรงกับคอมไพเลอร์ของคุณ โดยแก้ไขไฟล์ msvccompiler.py ในไดเร็คทอรี่ python/Lib/distutils เป็นเวอร์ชั่นของ MSVC ที่คุณมี เช่น: {{{ def __init__ (self, verbose=0, dry_run=0, force=0): CCompiler.__init__ (self, verbose, dry_run, force) self.__version = get_build_version() + self.__version = 6 # override build version to match compiler }}} (Q: OK to delete the above alternative workaround? -- cboos) ==== หมายเหตุการใช้ MS VC++ 8 ==== ถ้าคุณมี Visual Studio 2005 คุณน่าจะสามารถ build extension ต่างๆได้แต่ว่า extension เหล่านั้นจะไม่ถูกโหลดขึ้นมาใช้งานด้วยข้อผิดพลาด: {{{ ... ImportError: DLL load failed with error code 193 }}} หรือข้อผิดพลาดอื่นที่คล้ายๆกันเช่น `abort: could not import module found.!` วิธีการแก้ไขก็คือให้ embed ไฟล์ `.manifest` เข้าไปในโมดูล `.pyd`: {{{ # (สมมุติว่าคุณอยู่ใน bash shell ของ cygwin) $ python setup.py build_ext $ cd build/lib.win32-2.5/mercurial $ for pyd in *.pyd; do mt.exe -nologo -outputresource:$pyd\;2 -manifest $pyd.manifest; done $ cd ../../.. $ python setup.py install }}} == คำแนะนำในการติดตั้ง == === Where is my Mercurial? === โดยปกติ ไฟล์ของ Mercurial จะถูกติดตั้งในไดเร็คทอรี่ {{{Scripts}}} ของไดเร็คทอรี่ที่คุณติดตั้งไพธอน คุณสามารถสร้าง batch file เล็กๆในไดเร็คทอรี่ที่อยู่ใน path (เช่นในไดเร็คทอรี่ Windows) เพื่อให้คุณใช้งาน Mercurial ได้ ถ้าคุณใช้วินโดวส์ 9x (วินโดวส์ 95, 98 หรือ ME) สร้างไฟล์ชื่อ {{{hg.bat}}} พร้อมเนื้อหานี้: {{{ @echo off shift python \hg %0 %1 %2 %3 %4 %5 %6 %7 %8 %9 }}} ยกตัวอย่างเช่น ถ้าคุณติดตั้งไพธอนที่ {{{c:\python}}} เนื้อหาของไฟล์จะเป็น {{{ @echo off shift python c:\python\hg %0 %1 %2 %3 %4 %5 %6 %7 %8 %9 }}} ถ้าคุณใช้ Windows NT ให้สร้างไฟล์ชื่อ {{{hg.cmd}}} พร้อมเนื้อหานี้: {{{ @python \hg %* }}} ยกตัวอย่างเช่น ถ้าคุณติดตั้งไพธอนที่ {{{c:\python}}} เนื้อหาของไฟล์จะเป็น {{{ @python c:\python\Scripts\hg %* }}} อีกวิธีที่อาจจะดีกว่าสำหรับบางคนก็คือให้หา Mercurial จากใน PATH เลย ถ้าคุณใช้ hg.exe วิธีนี้ก็โอเค แต่ถ้าคุณใช้ hg แบบที่เป็นไฟล์ไพธอนคุณจะต้องเปลี่ยนชื่อไฟล์จาก 'hg' เป็น 'hg.py' และถ้าคุณได้ตั้งค่าในวินโดว์ให้มองไฟล์ที่มีนามสกุล .py เป็นโปรแกรมวินโดวส์จะรัน Mercurial ให้ทันที แต่ถึงแม้ว่าวินโดวส์จะรันสคริปต์ไพธอนให้ คุณก็อาจเจอบั๊กเกี่ยวกับการทำ redirection ในวินโดวส์ซึ่งก็มีมานานแล้ว นอกจากนั้นในวินโดวส์ XP คุณอาจพบปัญหาเกี่ยวกับสถานะการจบโปรแกรมที่หายไปอีกด้วยถ้าคุณใช้งาน Mercurial แบบสคริปต์ไพธอน วิธีแก้ปัญหาก็คือใช้ batch file นี้ -- ให้ใส่ไฟล์นี้ไว้ในไดเร็คทอรี่ที่อยู่ใน PATH ของคุณและวินโดวส์จะหาโปรแกรม 'hg' โดยที่ไม่ต้องมีนามสกุล .py ใน PATH จากนั้นจึงจะรันสคริปต์ properly: (name the file '''hg.cmd''') {{{ @echo off for /f %%i in ("hg") DO set HGSCRIPT="%%~$PATH:i" if %HGSCRIPT% == "" ( echo Cannot find hg on PATH exit /b 1 ) python %HGSCRIPT% %* }}} อีกวิธีก็คือการเพิ่มนามสกุล .py ในตัวแปร PATHEXT ถ้าคุณได้ตั้งค่าให้ไฟล์ที่มีนามสกุล .py ทำงานได้ทันทีเมื่อมีการรันไฟล์นั้นๆการเพิ่มนามสกุลใน PATHEXT จะทำให้คุณสามารถรันสคริปต์ไพธอนได้โดยไม่ต้องลงท้ายด้วยนามสกุล .py ซึ่งก็สะดวกดี ตัวเลือกนี้ก็สามารถทำงานถึงแม้ว่าคุณจะใช้ UTF-8 ใน console ของวินโดวส์ (เช่น code page 65001) ซึ่งทำให้ไฟล์นามสกุล BAT และ CMD ทำงานไม่ได้ === ปัญหาอื่นๆ === Win``Zip7 ไม่สร้างไฟล์เปล่าถ้าแตกจากไฟล์นามสกุล .tar แต่ Win``Zip9 ทำงานได้ตามปกติ เวอร์ชั่นแรกๆของ Mercurial มีปัญหากับการใช้ตัวอักษร tildes ใน glob patterns บน windows อัพเกรด Mercurial ถ้าคุณพบปัญหานี้ ==== การใช้งาน SSH protocol ในวินโดวส์ ==== มี 3 วิธี: * ติดตั้ง cygwin และ OpenSSH และใช้ shell ของ cygwin ที่มี ssh อยู่ใน PATH อยู่แล้ว * ติดตั้ง [[http://www.chiark.greenend.org.uk/~sgtatham/putty/|PuTTY]] และทำตามขั้นตอนใน [[http://www.selenic.com/mercurial/wiki/index.cgi/TipsAndTricks#head-728e29f739157fd04e05843a07c87b3a2027f973|TipsAndTricks]] * ติดตั้ง cygwin และ OpenSSH และแก้ไฟล์ Mercurial.ini ให้ใช้ไฟล์โปรแกรมที่ติดตั้งโดย cygwin แก้ไขไฟล์ Mercurial.ini ดังนี้: {{{ [ui] ssh = C:\cygwin\bin\ssh.exe }}} === แก้ไขปัญหาเรื่อง path ในวินโดวส์ === ถ้าคุณพยายามใช้ Mercurial ในไดเร็คทอรี่ที่มีไดเร็คทอรี่ย่อยที่ชื่อ 'mercurial' เช่นเวลาคุณทำงานกับซอร์สโค้ดของ Mercurial ไพธอนอาจจะไม่สามารถโหลดโมดูลที่ Mercurial ต้องการได้ และคุณอาจเจอ stack trace แบบนี้: {{{ ... File "C:\projects\hg\mercurial\demandload.py", line 54, in module return object.__getattribute__(self, 'importer').module() File "C:\projects\hg\mercurial\demandload.py", line 30, in module self.fromlist) File "C:\projects\hg\mercurial\mdiff.py", line 9, in ? import struct, bdiff, util, mpatch ImportError: No module named bdiff }}} ลองดูหัวข้อกลุ่มข่าว "Fix the path problem on Windows..." ต้นเหตุของปัญหาก็คือไพธอนในวินโดวส์จะเพิ่มไดเร็คทอรี่ปัจจุบันเข้าไปใน search path ของไพธอน '''ก่อน''' ไดเร็คทอรี่ที่เก็บไลบรารี่ต่างๆ ทำให้ไพธอนงงและไม่สามารถหา extension ที่ต้องการเจอเวลาคุณใช้ hg ใน repository ของตัวเอง มี patch ที่ลบไดเร็คทอรี่ปัจจุบันออกจาก path แต่ว่าก็มีวิธีแก้ที่ดีกว่าจาก K.Thananchayan นั่นก็คือแค่เพิ่มค่าในรีจิสทรี่ (เปลี่ยน 2.4 เป็นเวอร์ชั่นไพธอนของคุณ) {{{ HKLM/SOFTWARE/Python/PythonCore/2.4/PythonPath/XXX (Default) REG_SZ "YYY" }}} === Hardlinks on Windows === Mercurial now includes support for cloning with hardlinks on Windows. However for this to work, your filesystem needs to support them (i.e. NTFS) and you need the {{{win32}}} API extensions documented above. If you have a filesystem that does not support hardlinks or don't have the {{{win32file}}} module from pywin32, mercurial clone will still work just fine - but you won't get the benefits of hardlinking of course. Note that pywin32 is only available for the Windows/x64 platform starting with Python 2.6. For versions of Mercurial prior to 0.7, Mercurial won't realise that it has to 'break' hardlinks. The upshot is that if you have repositories cloned with hardlinks you must not use pre-0.7 versions of mercurial on them (either the source or the destination clone), or use a version of python without {{{win32file}}}. If you do you are likely to get corruption. A simple solution to break the hardlinks is to copy (using xcopy or File Explorer) one of the repositories, deleting the clone. Copying it back afterwards. === Default editor === The default editor for commit messages is 'vi'. The Windows installer creates a mercurial.ini that sets it to notepad. You can set the EDITOR (or HGEDITOR) environment variable to specify your preference or set it in mercurial.ini: {{{ [ui] editor = whatever }}} ---- CategoryWindows