Mercurial > hg
view contrib/wix/mercurial.wxs @ 24992:7df090c9c9fe
localrepo: use changelog.hasnode instead of self.__contains__
Before this patch, releasing the store lock implies the actions below, when
the transaction is aborted:
1. "commithook()" scheduled in "localrepository.commit()" is invoked
2. "changectx.__init__()" is invoked via "self.__contains__()"
3. specified ID is examined against "repo.dirstate.p1()"
4. validation function is invoked in "dirstate.p1()"
In subsequent patches, "dirstate.invalidate()" invocations for
discarding changes are replaced with "dirstateguard", but discarding
changes by "dirstateguard" is executed after releasing the store lock:
resources are acquired in "wlock => dirstateguard => store lock" order,
and are released in reverse order.
This may cause that "dirstate.p1()" still refers to the changeset to be
rolled-back at (4) above: pushing multiple patches by "hg qpush" is
a typical case.
When releasing the store lock, such changesets are:
- not contained in "repo.changelog", if it is reloaded from
".hg/00changelog.i", as that file was already truncated by
"transaction.abort()"
- still contained in it, otherwise
(this "dirty read" problem is discussed in "Transaction Plan"
http://mercurial.selenic.com/wiki/TransactionPlan)
Validation function shows "unknown working parent" warning in the
former case, but reloading "repo.changelog" depends on the timestamp
of ".hg/00changelog.i". This causes occasional test failures.
In the case of scheduled "commithook()", it just wants to examine
whether "node ID" of committed changeset is still valid or not. Other
examinations implied in "changectx.__init__()" are meaningless.
To avoid showing the "unknown working parent" warning irregularly, this
patch uses "changelog.hasnode()" instead of "node in self" to examine
existence of committed changeset.
author | FUJIWARA Katsunori <foozy@lares.dti.ne.jp> |
---|---|
date | Thu, 07 May 2015 12:07:10 +0900 |
parents | 6e38b6fc4123 |
children | 95e042d77a5f |
line wrap: on
line source
<?xml version='1.0' encoding='windows-1252'?> <Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'> <!-- Copyright 2010 Steve Borho <steve@borho.org> This software may be used and distributed according to the terms of the GNU General Public License version 2 or any later version. --> <?include guids.wxi ?> <?include defines.wxi ?> <?if $(var.Platform) = "x64" ?> <?define PFolder = ProgramFiles64Folder ?> <?else?> <?define PFolder = ProgramFilesFolder ?> <?endif?> <Product Id='*' Name='Mercurial $(var.Version) ($(var.Platform))' UpgradeCode='$(var.ProductUpgradeCode)' Language='1033' Codepage='1252' Version='$(var.Version)' Manufacturer='Matt Mackall and others'> <Package Id='*' Keywords='Installer' Description="Mercurial distributed SCM (version $(var.Version))" Comments='$(var.Comments)' Platform='$(var.Platform)' Manufacturer='Matt Mackall and others' InstallerVersion='300' Languages='1033' Compressed='yes' SummaryCodepage='1252' /> <Media Id='1' Cabinet='mercurial.cab' EmbedCab='yes' DiskPrompt='CD-ROM #1' CompressionLevel='high' /> <Property Id='DiskPrompt' Value="Mercurial $(var.Version) Installation [1]" /> <Condition Message='Mercurial MSI installers require Windows XP or higher'> VersionNT >= 501 </Condition> <Property Id="INSTALLDIR"> <ComponentSearch Id='SearchForMainExecutableComponent' Guid='$(var.ComponentMainExecutableGUID)' /> </Property> <!--Property Id='ARPCOMMENTS'>any comments</Property--> <Property Id='ARPCONTACT'>mercurial@selenic.com</Property> <Property Id='ARPHELPLINK'>http://mercurial.selenic.com/wiki/</Property> <Property Id='ARPURLINFOABOUT'>http://mercurial.selenic.com/about/</Property> <Property Id='ARPURLUPDATEINFO'>http://mercurial.selenic.com/downloads/</Property> <Property Id='ARPHELPTELEPHONE'>http://mercurial.selenic.com/wiki/Support</Property> <Property Id='ARPPRODUCTICON'>hgIcon.ico</Property> <Property Id='INSTALLEDMERCURIALPRODUCTS' Secure='yes'></Property> <Property Id='REINSTALLMODE'>amus</Property> <!--Auto-accept the license page--> <Property Id='LicenseAccepted'>1</Property> <Directory Id='TARGETDIR' Name='SourceDir'> <Directory Id='$(var.PFolder)' Name='PFiles'> <Directory Id='INSTALLDIR' Name='Mercurial'> <Component Id='MainExecutable' Guid='$(var.ComponentMainExecutableGUID)' Win64='$(var.IsX64)'> <File Id='hgEXE' Name='hg.exe' Source='dist\hg.exe' KeyPath='yes' /> <Environment Id="Environment" Name="PATH" Part="last" System="yes" Permanent="no" Value="[INSTALLDIR]" Action="set" /> </Component> <Component Id='ReadMe' Guid='$(var.ReadMe.guid)' Win64='$(var.IsX64)'> <File Id='ReadMe' Name='ReadMe.html' Source='contrib\win32\ReadMe.html' KeyPath='yes'/> </Component> <Component Id='COPYING' Guid='$(var.COPYING.guid)' Win64='$(var.IsX64)'> <File Id='COPYING' Name='COPYING.rtf' Source='contrib\wix\COPYING.rtf' KeyPath='yes'/> </Component> <Directory Id='HGRCD' Name='hgrc.d'> <Component Id='mercurial.rc' Guid='$(var.mercurial.rc.guid)' Win64='$(var.IsX64)'> <File Id='mercurial.rc' Name='Mercurial.rc' Source='contrib\win32\mercurial.ini' ReadOnly='yes' KeyPath='yes'/> </Component> <Component Id='mergetools.rc' Guid='$(var.mergetools.rc.guid)' Win64='$(var.IsX64)'> <File Id='mergetools.rc' Name='MergeTools.rc' Source='mercurial\default.d\mergetools.rc' ReadOnly='yes' KeyPath='yes'/> </Component> </Directory> </Directory> </Directory> <Directory Id="ProgramMenuFolder" Name="Programs"> <Directory Id="ProgramMenuDir" Name="Mercurial $(var.Version)"> <Component Id="ProgramMenuDir" Guid="$(var.ProgramMenuDir.guid)" Win64='$(var.IsX64)'> <RemoveFolder Id='ProgramMenuDir' On='uninstall' /> <RegistryValue Root='HKCU' Key='Software\Mercurial\InstallDir' Type='string' Value='[INSTALLDIR]' KeyPath='yes' /> <Shortcut Id='UrlShortcut' Directory='ProgramMenuDir' Name='Mercurial Web Site' Target='[ARPHELPLINK]' Icon="hgIcon.ico" IconIndex='0' /> </Component> </Directory> </Directory> <?if $(var.Platform) = "x86" ?> <Merge Id='VCRuntime' DiskId='1' Language='1033' SourceFile='$(var.VCRedistSrcDir)\microsoft.vcxx.crt.x86_msm.msm' /> <Merge Id='VCRuntimePolicy' DiskId='1' Language='1033' SourceFile='$(var.VCRedistSrcDir)\policy.x.xx.microsoft.vcxx.crt.x86_msm.msm' /> <?else?> <Merge Id='VCRuntime' DiskId='1' Language='1033' SourceFile='$(var.VCRedistSrcDir)\microsoft.vcxx.crt.x64_msm.msm' /> <Merge Id='VCRuntimePolicy' DiskId='1' Language='1033' SourceFile='$(var.VCRedistSrcDir)\policy.x.xx.microsoft.vcxx.crt.x64_msm.msm' /> <?endif?> </Directory> <Feature Id='Complete' Title='Mercurial' Description='The complete package' Display='expand' Level='1' ConfigurableDirectory='INSTALLDIR' > <Feature Id='MainProgram' Title='Program' Description='Mercurial command line app' Level='1' Absent='disallow' > <ComponentRef Id='MainExecutable' /> <ComponentRef Id='distOutput' /> <ComponentRef Id='ProgramMenuDir' /> <ComponentRef Id='ReadMe' /> <ComponentRef Id='COPYING' /> <ComponentRef Id='mercurial.rc' /> <ComponentRef Id='mergetools.rc' /> <ComponentRef Id='helpFolder' /> <ComponentGroupRef Id='templatesFolder' /> <MergeRef Id='VCRuntime' /> <MergeRef Id='VCRuntimePolicy' /> </Feature> <Feature Id='Locales' Title='Translations' Description='Translations' Level='1'> <ComponentGroupRef Id='localeFolder' /> <ComponentRef Id='i18nFolder' /> </Feature> <Feature Id='Documentation' Title='Documentation' Description='HTML man pages' Level='1'> <ComponentGroupRef Id='docFolder' /> </Feature> <Feature Id='Misc' Title='Miscellaneous' Description='Contributed scripts' Level='1'> <ComponentGroupRef Id='contribFolder' /> </Feature> </Feature> <UIRef Id="WixUI_FeatureTree" /> <UIRef Id="WixUI_ErrorProgressText" /> <WixVariable Id="WixUILicenseRtf" Value="contrib\wix\COPYING.rtf" /> <Icon Id="hgIcon.ico" SourceFile="contrib/win32/mercurial.ico" /> <Upgrade Id='$(var.ProductUpgradeCode)'> <UpgradeVersion IncludeMinimum='yes' Minimum='0.0.0' IncludeMaximum='no' OnlyDetect='no' Property='INSTALLEDMERCURIALPRODUCTS' /> </Upgrade> <InstallExecuteSequence> <RemoveExistingProducts After='InstallInitialize'/> </InstallExecuteSequence> </Product> </Wix>