Установка бита выполнения Mercurial в Windows - PullRequest
11 голосов
/ 24 апреля 2010

Я работаю в репозитории Mercurial, который извлечен в файловую систему Unix, такую ​​как ext3 на некоторых машинах и FAT32 на других.

В Subversion я могу установить свойство svn: executeable, чтобы контролировать, должен ли файл помечаться как исполняемый при извлечении на платформе, которая поддерживает такой бит. Я могу сделать это независимо от платформы, на которой я запускаю SVN, или файловой системы, содержащей мою рабочую копию.

В Mercurial я могу chmod + x, чтобы получить тот же эффект, если клон находится в файловой системе Unix. Но как я могу установить (или удалить) исполняемый бит файла в файловой системе FAT?

Ответы [ 3 ]

9 голосов
/ 24 апреля 2010

Пока вы не можете изменить бит выполнения, если файловая система не поддерживает его (я планирую поддержать его в будущем).

8 голосов
/ 24 апреля 2010

Mercurial отслеживает бит выполнения как часть метаданных файла. Там нет никакого способа явно установить его в Mercurial, но он отслеживает изменения, сделанные chmod в Unix. Для файлов, добавленных в windows, по умолчанию будет установлен бит выполнения, но команда windows attrib не позволяет их устанавливать.

Если вы сделаете hg log -p --git, вы увидите формат патча, который показывает изменение бита выполнения, который выглядит следующим образом:

$ hg log --git -p
changeset:   1:0d9a70aadc0a
tag:         tip
user:        Ry4an Brase <ry4an-hg@ry4an.org>
date:        Sat Apr 24 10:05:23 2010 -0500
summary:     added execute

diff --git a/that b/that
old mode 100644
new mode 100755

changeset:   0:06e25cb66089
user:        Ry4an Brase <ry4an-hg@ry4an.org>
date:        Sat Apr 24 10:05:09 2010 -0500
summary:     added no execute

diff --git a/that b/that
new file mode 100644
--- /dev/null
+++ b/that
@@ -0,0 +1,1 @@
+this

Если вы не можете подключиться к Unix-системе, чтобы установить их, вы, вероятно, могли бы подделать такой патч и hg import, но это определенно ниже оптимального.

2 голосов
/ 18 июля 2016

Для Windows вам нужно создать файл патча и затем применить его, как Ry4an сказал , но с аргументом --bypass в hg import. Это можно сделать, создав файл сценария Powershell с именем SetFileExecutable.ps1 с текстом ниже

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

if( Test-Path -Path "$($repositoryRoot)\.hg" -PathType Container )
{
  if( Test-Path -Path "$($repositoryRoot)\$($filePathRelativeTo)" -PathType Leaf )
  {
    $filePathRelativeTo = $filePathRelativeTo.Replace( '\', '/' )

    $diff = "$comment" + [System.Environment]::NewLine +
      [System.Environment]::NewLine +
      "diff --git a/$filePathRelativeTo b/$filePathRelativeTo" + [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
  }
  else
  {
    Write-Host "filePathRelativeTo must the location of a file relative to repositoryRoot"
  }
}
else
{
  Write-Host "repositoryRoot must be the location of the .hg folder"
}

выполнить его следующим образом:

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

Использует решение, предоставленное Мэттом Харбисоном в Mergrial's Bugzilla

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...