2017-12-28 4 views
1

Gradle 내에서 git describe으로 전달 된 glob와 일치하는 최신 git 태그를 가져 오는 데 문제가 있습니다. 그것은 터미널에서 잘 작동합니다.Android build.gradle에서`git describe --match` 사용

project.ext.releaseVersionName = "git describe --match \'[0-9]*.[0-9]*.[0-9]*\' --abbrev=0 --tags".execute().text.trim() 

그리고

def getReleaseVersion = { -> 
    try { 
     def stdout = new ByteArrayOutputStream() 
     exec { 
      commandLine 'bash', '-c', 'git', 'describe', '--match "[0-9]*.[0-9]*.[0-9]*"', '--abbrev=0', 'HEAD' 
      standardOutput = stdout 
     } 
     return stdout.toString().trim() 
    } 
    catch (ignored) { 
     return null 
    } 
} 

그러나 모두가 빈 문자열을 반환 :

나는 다음과 같은 노력했다. 만약 내가 일치하지 않으면 모든 것이 올바르게 작동합니다. 나는 그 문제를 일으키는 globs라고 생각합니다.

답변

1

'--match "[0-9]*.[0-9]*.[0-9]*"' 전체를 작은 따옴표로 묶어 기본적으로 전체 문자열과 함께 옵션을 전달합니다. 정말로 원하는 것은 [0-9]*.[0-9]*.[0-9]* 인수로 --match 옵션을 전달하는 것입니다. 당신의 commandLine이가되도록 그러므로 당신은 그 인수를 분할해야합니다

commandLine 'git', 'describe', '--match', '[0-9]*.[0-9]*.[0-9]*', '--abbrev=0', 'HEAD' 

은 또한 당신은 당신이 --abbrev=0을 위해처럼 --match=[0-9]*.[0-9]*.[0-9]*를 사용, 즉 --arg=value 구문에 --match 인수를 전환 할 수 있습니다.

댓글에 따라 'bash', '-c' 부분을 제거했습니다. 'bash', '-c'을 사용하려는 경우 bash-c 인수 값으로 작동하므로 나머지는 모두 단일 문자열이어야합니다.

+0

'--match ='로 추가하는 것을 포함하여 위의 모든 것을 시도했지만 다시 빈 문자열을 얻으십시오. – StuStirling

+1

bash와 -c를 제거한 것처럼 보입니다. '~ 설명', '~', '~ [0-9] *. [0-9] *. [0-9] *', '- abbrev = 0', 'HEAD' – StuStirling

+0

사실, 'bash', '-c'의 경우 나머지는 하나의 단일 문자열이어야합니다.이 경우 bash의 '-c'인수에 대한 값이므로 bash에 의해 더 해석됩니다. – mmlr

관련 문제