Как работает опция «эмулировать чистую кассу» Дженкинса? - PullRequest
2 голосов
/ 08 июня 2011

В частности, я хочу знать, как выполнить часть команды «удалить неверсионные / проигнорированные файлы». Я хочу сделать это, чтобы я мог эмулировать чистую проверку, наш репозиторий большой, а полная проверка требует времени.

Ответы [ 2 ]

2 голосов
/ 05 марта 2013

Эта опция реализована в UpdateWithCleanUpdater. Из источника ,

@Override
protected void preUpdate(ModuleLocation module, File local) throws SVNException, IOException {
    listener.getLogger().println("Cleaning up " + local);

    clientManager.getStatusClient().doStatus(local, null, SVNDepth.INFINITY, false, false, true, false, new ISVNStatusHandler() {
        public void handleStatus(SVNStatus status) throws SVNException {
            SVNStatusType s = status.getCombinedNodeAndContentsStatus();
            if (s == SVNStatusType.STATUS_UNVERSIONED || s == SVNStatusType.STATUS_IGNORED || s == SVNStatusType.STATUS_MODIFIED) {
                listener.getLogger().println("Deleting "+status.getFile());
                try {
                    File f = status.getFile();
                    if (f.isDirectory())
                        hudson.Util.deleteRecursive(f);
                    else
                        f.delete();
                } catch (IOException e) {
                    throw new SVNException(SVNErrorMessage.create(SVNErrorCode.UNKNOWN, e));
                }
            }
        }
    }, null);
}

Похоже, что код использует SVNKit для получения статуса SVN, а затем удаляет все неверсированные, игнорируемые и измененные файлы и каталоги.

Меня удивило, что измененные файлы удаляются, а не возвращаются, но они все равно будут возвращаться через обновление SVN.

2 голосов
/ 08 июня 2011

Не знаю, как Jenkins делает это, но я предполагаю, что он использует svn status для поиска неверсионных / игнорируемых файлов.

Вот два сценария powershell, которые я использую для этого:

#remove_ignored.ps1 (only removes ignored files, leaves unversioned)

param([switch] $WhatIf)

# Find all items with the status of I in svn
# Strip the leading status code and whitespace
# Grab the item for said path (either FileInfo or DirectoryInfo)
$paths = (svn status --no-ignore | Where-Object {$_.StartsWith('I')} | ForEach-Object {$_.SubString(8)} | ForEach-Object {Get-Item -Force $_})

$paths | ForEach-Object {
    if (-not $WhatIf) {
        # Check if the path still exists, in case it was a nested directory or something strange like that
        if ($_.Exists) {
            # If its a directory info, tell it to perform a recursive delete
            if ($_ -is [System.IO.DirectoryInfo]) { $_.Delete($true) }
            else { $_.Delete() }
        }
    }

    Write-Host "Deleted $_"
}

#remove_unversioned.ps1 (removes both ignored and unversioned files)
param([switch] $WhatIf)

# Find all items with the status of I or ? in svn
# Strip the leading status code and whitespace
# Grab the item for said path (either FileInfo or DirectoryInfo)
$paths = (svn status --no-ignore | Where-Object {$_.StartsWith('I') -or $_.StartsWith('?')} | ForEach-Object {$_.SubString(8)} | ForEach-Object {Get-Item -Force $_})

$paths | ForEach-Object {
    if (-not $WhatIf) {
        # Check if the path still exists, in case it was a nested directory or something strange like that
        if ($_.Exists) {
            # If its a directory info, tell it to perform a recursive delete
            if ($_ -is [System.IO.DirectoryInfo]) { $_.Delete($true) }
            else { $_.Delete() }
        }
    }

    Write-Host "Deleted $_"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...