You've already forked jenkins-lib
mirror of
https://github.com/firstBitMarksistskaya/jenkins-lib.git
synced 2025-08-25 20:09:25 +02:00
Merge pull request #151 from firstBitMarksistskaya/fix/getLocalPath
Исправлена ошибка расчета локальных путей в случае, когда мастер на Linux, а агент - на Windows
This commit is contained in:
@@ -29,17 +29,20 @@ class FileUtils {
|
||||
|
||||
static String getLocalPath(FilePath filePath) {
|
||||
IStepExecutor steps = ContextRegistry.getContext().getStepExecutor()
|
||||
String workspacePath = steps.env().WORKSPACE
|
||||
String fileRemotePath = filePath.getRemote()
|
||||
|
||||
def env = steps.env();
|
||||
// Нормализуем пути: заменяем обратные слэши на прямые
|
||||
workspacePath = workspacePath.replace('\\', '/')
|
||||
fileRemotePath = fileRemotePath.replace('\\', '/')
|
||||
|
||||
Path workspacePath = new File(env.WORKSPACE).toPath()
|
||||
Path rawFilePath = new File(filePath.getRemote()).toPath()
|
||||
// Проверяем, что файл находится внутри рабочей директории
|
||||
if (!fileRemotePath.startsWith(workspacePath)) {
|
||||
throw new IllegalArgumentException("File path is not within the workspace directory")
|
||||
}
|
||||
|
||||
return workspacePath.relativize(rawFilePath)
|
||||
.toString()
|
||||
.replaceAll('\\\\\\\\', '/')
|
||||
.replaceAll('\\\\', '/')
|
||||
.toString()
|
||||
// Вычисляем относительный путь
|
||||
return fileRemotePath.substring(workspacePath.length() + 1)
|
||||
}
|
||||
|
||||
static void loadFile(String filePathFrom, def env, String filePathTo) {
|
||||
|
@@ -7,7 +7,7 @@ import java.io.IOException;
|
||||
|
||||
public class EnvUtils implements EnvironmentAction {
|
||||
|
||||
public String NODE_NAME = "node";
|
||||
public String NODE_NAME = "built-in";
|
||||
public String WORKSPACE = "ws";
|
||||
public String BRANCH_NAME = "master";
|
||||
|
||||
|
@@ -0,0 +1,32 @@
|
||||
package ru.pulsar.jenkins.library.utils;
|
||||
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import ru.pulsar.jenkins.library.IStepExecutor;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
class FileUtilsTest {
|
||||
|
||||
private final IStepExecutor steps = TestUtils.getMockedStepExecutor();
|
||||
|
||||
@BeforeEach
|
||||
void setUp() {
|
||||
TestUtils.setupMockedContext(steps);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testGetLocalPath() {
|
||||
// given
|
||||
var env = new EnvUtils();
|
||||
when(steps.env()).thenReturn(env);
|
||||
var filePath = FileUtils.getFilePath(env.WORKSPACE + "/src/cf");
|
||||
|
||||
// when
|
||||
String localPath = FileUtils.getLocalPath(filePath);
|
||||
|
||||
// then
|
||||
assertThat(localPath).isEqualTo("src/cf");
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user