1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mirrors-VFS-for-Git

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Protocol.md 7.1 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 28.11.2024 21:19 79c276e

Протокол GVFS (версия 1)

Сетевой протокол GVFS состоит из четырёх операций на трёх конечных точках. Вкратце:

  • GET /gvfs/objects/{objectId}
    • Предоставляет один объект в формате свободного объекта;
  • POST /gvfs/objects
    • Предоставляет один или несколько объектов в формате упакованного файла или потокового формата свободного объекта;
  • GET /gvfs/prefetch[?lastPackTimestamp={secondsSinceEpoch}]
    • Предоставляет один или несколько упакованных файлов не-BLOB-объектов и, возможно, индексы упакованных файлов в потоковом формате;
  • POST /gvfs/sizes
    • Предоставляет несжатый, недельтаизированный размер одного или нескольких объектов;
  • GET /gvfs/config
    • Предоставляет параметры конфигурации клиента, установленные сервером.

GET /gvfs/objects/{objectId}

Вернёт один объект в сжатом формате свободного объекта, который можно напрямую записать в .git/xx/yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy, если это необходимо. Запрос/ответ похож на «тупой протокол», как описано здесь.

POST /gvfs/objects

Вернёт несколько объектов, возможно больше, чем запросил клиент, на основе параметров запроса. Запрос состоит из тела JSON следующего формата:

{
    "objectIds" : [ {JSON массив SHA-1 идентификаторов объектов, в виде строк} ],
    "commitDepth" : {положительное целое число}
}

Например:

{
    "objectIds" : [
        "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
        "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
    ],
    "commitDepth" : 1
}

Accept: application/x-git-packfile (по умолчанию)

Если указан заголовок Accept application/x-git-packfile, или заголовок Accept не указан, клиенту будет возвращён упакованный файл git, индексируемый через index-pack.

Если objectIds включает фиксацию, то все tree рекурсивно ссылаются на эту фиксацию также возвращаются. Если запрашивается любой другой тип объекта (tree, blob или tag), то возвращается только этот объект.

commitDepth — если запрошенный объект является фиксацией, все родители до n уровней глубины будут возвращены вместе со всеми их деревьями, как описано ранее. Не включает blobs.

Accept: application/x-gvfs-loose-objects

ПРИМЕЧАНИЕ: Этот формат в настоящее время поддерживается только сервером кэширования, а не VSTS. Чтобы включить сценарии, где требуется несколько объектов, но меньше накладных расходов было бы понесено при использовании уже существующих свободных объектов (например, на прокси-сервере кэширования), также поддерживается альтернативный формат ответа, подобный упакованному файлу, который содержит свободные объекты. Для получения объектов в этом формате клиент ДОЛЖЕН предоставить заголовок Accept application/x-gvfs-loose-objects в конечную точку POST /gvfs/objects. В противном случае формат ответа будет application/x-git-packfile. Этот формат НЕ выполняет никакого расширения от фиксации к дереву и вернёт ошибку, если указана commitDepth, превышающая 1. Другими словами, этот тип Accept/возврата не имеет понятия «неявно запрошенных» объектов.

Версия 1

  • Целые числа являются знаковыми и малоэндианными, если не указано иное;
  • Байт смещения 0 является первым байтом в файле;
  • Смещение индекса 0 является первым байтом первого элемента массива;
  • num_objects представляет переменное количество объектов в файле/ответе. Описывая их URL и значение по умолчанию с помощью понятного имени, которое пользователи могут использовать для определения того, какой кэш-сервер использовать. Обратите внимание, что имена «None» и «User Defined» зарезервированы GVFS. Любые кэши с этими именами могут вызвать неопределённое поведение в клиенте GVFS.

Пример ответа приведён ниже. Обратите внимание, что значение "Max" "null" разрешено только для последнего (или самого большого) диапазона, поскольку оно логически исключает более высокие номера версий от воздействия.

{
    "AllowedGvfsClientVersions": [{
        "Max": {
            "Major": 0,
            "Minor": 4,
            "Build": 0,
            "Revision": 0
        },
        "Min": {
            "Major": 0,
            "Minor": 2,
            "Build": 0,
            "Revision": 0
        }
    }, {
        "Max": {
            "Major": 0,
            "Minor": 5,
            "Build": 0,
            "Revision": 0
        },
        "Min": {
            "Major": 0,
            "Minor": 4,
            "Build": 17009,
            "Revision": 1
        }
    }, {
        "Max": null,
        "Min": {
            "Major": 0,
            "Minor": 5,
            "Build": 16326,
            "Revision": 1
        }
    }],
    "CacheServers": [{
        "Url": "https://redmond-cache-machine/repo-id",
        "Name": "Redmond",
        "GlobalDefault": true
    }, {
        "Url": "https://dublin-cache-machine/repo-id",
        "Name": "Dublin",
        "GlobalDefault": false
    }]
}

Опубликовать ( 0 )

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

1
https://api.gitlife.ru/oschina-mirror/mirrors-VFS-for-Git.git
git@api.gitlife.ru:oschina-mirror/mirrors-VFS-for-Git.git
oschina-mirror
mirrors-VFS-for-Git
mirrors-VFS-for-Git
master