2010-02-06 16 views

Respuesta

15

Establezca (o desarme) el bit ejecutable en el archivo, y luego hg lo marcará como modificado. Comprométalo

Tendrá que habilitar difs estilo git para ver los modos en la salida de diff, pero todavía está allí independientemente.

+0

no tengo esta misma experiencia con Mercurial 2.7.1. Para mí, cambiar el indicador ejecutable en el archivo no cambia el estado de ese archivo. –

+5

Esto no funciona en Windows, que no tiene esa noción; consulte https://stackoverflow.com/questions/2702825/setting-mercurials-execute-bit-on-windows –

0

Para Linux o Unix puede usar chmod +x filename.

Para Windows necesita crear un archivo de parche y luego aplicarlo usando el argumento --bypass al hg import. Esto podría hacerse mediante la creación de un archivo de script de PowerShell denominado SetFileExecutable.ps1, con el siguiente texto

param (
    [String]$comment = "+execbit", 
    [Parameter(Mandatory=$true)][string]$fileRelativePath, 
    [Parameter(Mandatory=$true)][string]$repositoryRoot 
) 

$fileRelativePath = $fileRelativePath.Replace('\', '/') 

$diff = "$comment" + [System.Environment]::NewLine + 
    [System.Environment]::NewLine + 
    "diff --git a/$fileRelativePath b/$fileRelativePath" + [System.Environment]::NewLine + 
    "old mode 100644" + [System.Environment]::NewLine + 
    "new mode 100755" 

Push-Location 
cd $repositoryRoot 
$diff | Out-File -Encoding 'utf8' $env:tmp\exebit.diff 
hg import --bypass -m "$comment" $env:tmp\exebit.diff 
Pop-Location 

ejecutarlo de la siguiente manera:

.\SetFileExecutable.ps1" -comment "Marking file as executable" -fileRelativePath mvnw -repositoryRoot "c:\myrepo" 

El utiliza la solución aportada por Matt Harbison in Mercurial's Bugzilla