Получить, когда файл последний раз обновлялся из репозитория Github - PullRequest
0 голосов
/ 06 мая 2018

Я могу получить содержимое файла (и если это папка, я могу получить список файлов) с помощью с помощью API GitHub v3. Пример:

https://api.github.com/repos/[Owner]/[Repository]/contents/[Folder]

Но как узнать, когда файл последний раз обновлялся? Есть ли для этого API?

Ответы [ 3 ]

0 голосов
/ 07 мая 2018

Если вы знаете точный путь к файлу, вы можете использовать список коммитов в API хранилища , указав path, который включает в себя только коммиты с этим конкретным путем к файлу, а затем извлекать самый последний коммит (самый последний первый):

Использование Rest API v3

https://api.github.com/repos/bertrandmartel/speed-test-lib/commits?path=jspeedtest%2Fbuild.gradle&page=1&per_page=1

Использование & :

curl -s "https://api.github.com/repos/bertrandmartel/speed-test-lib/commits?path=jspeedtest%2Fbuild.gradle&page=1&per_page=1" | \
     jq -r '.[0].commit.committer.date'

Использование GraphqQL API v4

{
  repository(owner: "bertrandmartel", name: "speed-test-lib") {
    ref(qualifiedName: "refs/heads/master") {
      target {
        ... on Commit {
          history(first: 1, path: "jspeedtest/build.gradle") {
            edges {
              node {
                committedDate
              }
            }
          }
        }
      }
    }
  }
}

Попробуйте в проводнике

Использование & :

curl -s -H "Authorization: Bearer YOUR_TOKEN" \
     -H  "Content-Type:application/json" \
     -d '{ 
          "query": "{ repository(owner: \"bertrandmartel\", name: \"speed-test-lib\") { ref(qualifiedName: \"refs/heads/master\") { target { ... on Commit { history(first: 1, path: \"jspeedtest/build.gradle\") { edges { node { committedDate } } } } } } } }"
         }' https://api.github.com/graphql | \
     jq -r '.data.repository.ref.target.history.edges[0].node.committedDate'
0 голосов
/ 27 декабря 2018

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

Обратите внимание, что все даты / время ниже указаны по Гринвичу (конечно).

Скопируйте и вставьте следующую команду, чтобы найти дату и время последнего изменения папки / файла в репозитории ForStackExchange пользователем YenForYang:

\curl -sIA. --ignore-content-length  \
     -H"If-Modified-Since: Sun May 01 00:00:00 9999" \
     "https://api.github.com/repos/YenForYang/ForStackExchange/contents/Folder/File?ref=branch" \
| \grep -m1 -oP "(?<=Last-Modified: )[ADFJMNOSTWa-eghilnoprtuvy0-9:, ]{25}" \

(Если регулярное выражение Perl недоступно, вы можете ... | grep -F -m1 "Last-Modified:")


Приведенная выше команда должна возвращать (GMT): Thu, 27 Dec 2018 11:01:26 (или позже, если я обновлю файл по какой-то причине)


Обратите внимание, что если параметр ref не указан, ref=master.


И если вы не можете копировать и вставлять и не заботитесь об ограничениях скорости API, вы можете выбрать более короткое:

\curl -sIL "api.github.com/repos/yenforyang/forstackexchange/contents/Folder/File?ref=branch" | \grep "^Las"

И если у вас нет grep в Windows, просто используйте find "Last-Modified: " вместо (необходимы двойные кавычки).

А если у вас нет скручивания в Windows (скачайте его ... или), используйте Powershell

(iwr -me HEAD -usebasic "https://api.github.com/repos/yenforyang/forstackexchange/contents/Folder/File?ref=branch").Headers."Last-Modified"
0 голосов
/ 06 мая 2018

Это было бы удивительно, учитывая, что git не хранит временные метки файлов (и другие метаданные, такие как разрешения и владение) , по причинам Я подробно описал здесь .

Так что информация также отсутствует на стороне удаленного хранилища (здесь GitHub).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...