Попробуйте следующее:
def get_git_sha(git_dir='') {
dir(git_dir) {
return sh(returnStdout: true, script: 'git rev-parse HEAD').trim()
}
}
node(BUILD_NODE) {
...
repo_SHA = get_git_sha('src/FooBar.git')
echo repo_SHA
...
}
Проверено на:
Прямо сейчас, я не думаю, что это возможно сделать с одной операцией. Побитовые операторы (http://www.mongodb.org/display/DOCS/Updating#Updating-%24bit) еще не имеют «$ xor», хотя у меня есть патч для него.
В настоящее время обходным пути, о котором я думаю, всегда используется «$ inc»:
cl.update( { "_id": ...}, { '$inc' : { 'field' : 1 } } );
Затем вместо проверки на истинное или ложное вы можете проверить, является ли элемент «истинным»:
cl.find( { "_id": ..., 'field' : { '$mod' : [ 2, 1 ] } );
IE, вы используете оператор modulo, чтобы убедиться, что он четный или неравномерный, даже будучи «неустановленным», и неравномерно «установлен». Если вы хотите иметь oppposite поведение (т. Е. Найти все элементы, которые не имеют установленного флага), используйте
[ 2, 0 ];
Проблема SERVER-4362 действительно разрешена сейчас, и вы имеете доступ к оператору обновления $bit
. Таким образом, вместе с аргументом xor
вы можете сделать это в атомном действии:
cl.findOneAndUpdate(
{ "_id": ...},
{
"$bit": {
"field": { "xor": NumberInt(1) }
}
},
{ "returnNewDocument": true, "upsert": true }
);
До тех пор, пока значение поля сохраняется в 0
или 1
, то побитовый «флип» приведет к тому, что текущее значение будет противоположно тому, что было во время модификации.
.findOneAndUpdate()
не требуется , а просто способ продемонстрировать, что результирующее значение отличается от каждой модификации.