Как проверить хорошую подпись подписанного тега git без использования команды «git verify-tag»
Я сделал подписанный тег git, используя эту команду:
git tag -s <tag>
Есть ли другие альтернативы для проверки подписи этого тега без использования команды: или
git tag -v <tag>
?
Мой тег подписывается локально в локальном репозитории git, а затем переносится в удаленный репозиторий git bare. В моем случае проверка подписи должна выполняться не локально, а с помощью ловушки на стороне сервера во время операции отправки, которая может отклонить тег, если он не подписан. И ничего не возвращает на стороне сервера хука, так как тег не распознан и еще не создан на стороне сервера.
Что касается проверок git, упомянутых здесь https://git-scm.com/book/en/v2/Git-Tools-Signing-Your-Work, существуют ли другие альтернативы для проверки подписи git с помощью, например, команд «git log» ?
Спасибо за помощь.
------------------------------ ОБНОВИТЬ ------------------- ----------------
Как @torek упоминает ниже в комментарии, имя тега еще не распознано сервером, поэтому я использую хэш-идентификатор тега вместо имени тега. Один шаг сделан!
Как я уже говорил выше, проверка подписи производится на стороне сервера через хук, написанный на C++. Таким образом, в моем коде C++ я использую общий код C++ для выполнения командной строки и получения ее вывода.
Вот код общей функции exec С++:
#include <iostream>
#include <stdexcept>
#include <stdio.h>
#include <string>
std::string exec(const char* cmd) {
char buffer[128];
std::string result = "";
FILE* pipe = popen(cmd, "r");
if (!pipe) throw std::runtime_error("popen() failed!");
try {
while (fgets(buffer, sizeof buffer, pipe) != NULL) {
result += buffer;
}
} catch (...) {
pclose(pipe);
throw;
}
pclose(pipe);
return result;
}
Эта функция exec работает для других команд. Но по неизвестной причине моя команда «git verify-tag <tag_hash>» ничего не возвращает в возвращаемой строке функции (то же самое при использовании команды «git verify-commit <commit_hash>»). Поэтому я не могу в своем коде C++ проанализировать вывод команды.
Но вывод странным образом появляется в окне командной строки, где выполняется команда проталкивания тега.
Есть идеи по проблемам? Является ли моя функция exec асинхронной?
--------------РЕШЕНИЕ-----------------------------------
Как ни странно, команда выводит вывод не на стандартный «stdout», а на «stderr».
Итак, моя проблема решена путем перенаправления вывода «stderr» на «stdout» с помощью команды
git verify-tag <tag> 2>&1
вместо
git verify-tag <tag>